Từ khóa Python nào dùng để xuất văn bản ra màn hình?

Chuyển đến nội dung chính

Giới thiệu về Python

Nắm vững kiến ​​thức cơ bản về phân tích dữ liệu với Python chỉ trong bốn giờ. Khóa học trực tuyến này sẽ giới thiệu giao diện Python và khám phá các gói phổ biến

Python trung gian

Nâng cao kỹ năng khoa học dữ liệu của bạn bằng cách tạo trực quan hóa bằng Matplotlib và thao tác với DataFrames bằng gấu trúc

Có liên quan

SQL so với Python. Bạn nên học cái nào?

Trong bài viết này, chúng tôi sẽ đề cập đến các tính năng chính của Python và SQL, những điểm tương đồng và khác biệt chính của chúng cũng như bạn nên chọn cái nào trước để bắt đầu hành trình khoa học dữ liệu của mình

Javier Canales Luna •

12 phút

Dữ liệu văn bản trong Python Cheat Sheet

Chào mừng bạn đến với bảng gian lận của chúng tôi để làm việc với dữ liệu văn bản trong Python. Chúng tôi đã biên soạn một danh sách các hàm và gói hữu ích nhất để dọn dẹp, xử lý và phân tích dữ liệu văn bản trong Python, cùng với các ví dụ và giải thích rõ ràng, vì vậy bạn sẽ có mọi thứ cần biết về cách làm việc với dữ liệu văn bản trong Python.

Hướng dẫn về tập hợp và lý thuyết tập hợp trong Python

Tìm hiểu về bộ Python. chúng là gì, cách tạo chúng, khi nào sử dụng chúng, các chức năng tích hợp và mối quan hệ của chúng với các hoạt động lý thuyết thiết lập

Hướng dẫn về gấu trúc. Khung dữ liệu trong Python

Khám phá phân tích dữ liệu với Python. Pandas DataFrames giúp thao tác dữ liệu của bạn dễ dàng, từ việc chọn hoặc thay thế các cột và chỉ mục để định hình lại dữ liệu của bạn

Xem ThêmXem Thêm

Bạn có thể dễ dàng thực hiện việc này với Tkinter, được bao gồm trong hầu hết các bản cài đặt Python hiện đại. Ví dụ,

Nội dung chính Hiển thị

  • In một cách ngắn gọn
  • Gọi in[]
  • Tách nhiều đối số
  • Ngăn Ngắt Dòng
  • In ra một tập tin
  • Bộ đệm print[] cuộc gọi
  • In các loại dữ liệu tùy chỉnh
  • Hiểu Python print[]
  • In là một chức năng trong Python 3
  • in Là một Tuyên bố trong Python 2
  • In ấn theo phong cách
  • Cấu trúc dữ liệu lồng nhau in đẹp
  • Thêm màu với chuỗi thoát ANSI
  • Xây dựng giao diện người dùng bảng điều khiển
  • Sống hết mình với những hình ảnh động thú vị
  • Tạo âm thanh với print[]
  • Mocking Python print[] trong Bài kiểm tra đơn vị
  • in [] Gỡ lỗi
  • In chỉ an toàn
  • Đối tác in Python
  • bên thứ ba
  • Làm cách nào để bạn hiển thị văn bản trên màn hình bằng Python?
  • Tôi sẽ sử dụng chức năng nào để hiển thị văn bản trong Python?
  • Python có thể đọc văn bản trên màn hình không?
  • Lệnh nào được sử dụng trong Python để hiển thị thông báo trên màn hình?

import tkinter as tk
from random import seed, choice
from string import ascii_letters

seed[42]

colors = ['red', 'yellow', 'green', 'cyan', 'blue', 'magenta']
def do_stuff[]:
    s = ''.join[[choice[ascii_letters] for i in range[10]]]
    color = choice[colors]
    l.config[text=s, fg=color]
    root.after[100, do_stuff]

root = tk.Tk[]
root.wm_overrideredirect[True]
root.geometry["{0}x{1}+0+0".format[root.winfo_screenwidth[], root.winfo_screenheight[]]]
root.bind["", lambda evt: root.destroy[]]

l = tk.Label[text='', font=["Helvetica", 60]]
l.pack[expand=True]

do_stuff[]
root.mainloop[]

Click chuột trái để thoát

Đây chỉ là một bằng chứng về khái niệm. Để kiểm soát màu sắc &/hoặc phông chữ trên cơ sở từng chữ cái, bạn sẽ cần thực hiện điều gì đó phức tạp hơn một chút. Bạn có thể sử dụng một hàng tiện ích Nhãn [mỗi tiện ích một chữ cái] hoặc bạn có thể sử dụng tiện ích Văn bản

Tuy nhiên, nếu bạn thử điều này trên máy Mac, cửa sổ có thể không nhận được tiêu điểm, như đã đề cập tại đây. Các câu trả lời ở đây cho thấy một cách khác để có cửa sổ toàn màn hình, nhưng tôi nghi ngờ nó có thể bị lỗi tương tự

root.attributes["-fullscreen", True]

Một lợi thế của phương pháp này là nó không yêu cầu cuộc gọi

root.attributes["-fullscreen", True]
62

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Hàm print[] của Python. Đi xa hơn những điều cơ bản

Nếu bạn giống như hầu hết người dùng Python, bao gồm cả tôi, thì có lẽ bạn đã bắt đầu hành trình Python của mình bằng cách tìm hiểu về

root.attributes["-fullscreen", True]
63. Nó đã giúp bạn viết một lớp lót
root.attributes["-fullscreen", True]
64 của riêng bạn. Bạn có thể sử dụng nó để hiển thị các tin nhắn được định dạng trên màn hình và có thể tìm thấy một số lỗi. Nhưng nếu bạn nghĩ rằng đó là tất cả những gì cần biết về hàm
root.attributes["-fullscreen", True]
63 của Python, thì bạn đang bỏ lỡ rất nhiều thứ.

Hãy tiếp tục đọc để tận dụng tối đa chức năng nhỏ có vẻ nhàm chán và không được đánh giá cao này. Hướng dẫn này sẽ giúp bạn bắt kịp tốc độ sử dụng Python

root.attributes["-fullscreen", True]
63 một cách hiệu quả. Tuy nhiên, hãy chuẩn bị để tìm hiểu sâu khi bạn đi qua các phần. Bạn có thể ngạc nhiên về số lượng mà
root.attributes["-fullscreen", True]
63 cung cấp

Đến cuối hướng dẫn này, bạn sẽ biết cách

  • Tránh những lỗi thường gặp với
    root.attributes["-fullscreen", True]
    
    63 của Python
  • Xử lý các dòng mới, mã hóa ký tự và bộ đệm
  • Viết văn bản vào tập tin
  • Mock
    root.attributes["-fullscreen", True]
    
    63 trong bài kiểm tra đơn vị
  • Xây dựng giao diện người dùng nâng cao trong thiết bị đầu cuối

Nếu bạn là người hoàn toàn mới bắt đầu, thì bạn sẽ thu được nhiều lợi ích nhất khi đọc phần đầu tiên của hướng dẫn này, phần này minh họa các yếu tố cần thiết của việc in bằng Python. Nếu không, vui lòng bỏ qua phần đó và nhảy xung quanh khi bạn thấy phù hợp

In một cách ngắn gọn

Hãy bắt đầu bằng cách xem xét một số ví dụ thực tế về in bằng Python. Đến cuối phần này, bạn sẽ biết mọi cách có thể để gọi

root.attributes["-fullscreen", True]
63. Hoặc, theo biệt ngữ của lập trình viên, bạn sẽ nói rằng bạn sẽ quen với chữ ký hàm

Gọi in[]

Ví dụ đơn giản nhất về việc sử dụng Python

root.attributes["-fullscreen", True]
63 chỉ cần một vài lần nhấn phím

Bạn không chuyển bất kỳ đối số nào, nhưng bạn vẫn cần đặt dấu ngoặc đơn trống ở cuối, dấu ngoặc đơn này yêu cầu Python thực sự thực thi hàm thay vì chỉ gọi nó theo tên

Thao tác này sẽ tạo ra một ký tự xuống dòng ẩn, do đó sẽ khiến một dòng trống xuất hiện trên màn hình của bạn. Bạn có thể gọi

root.attributes["-fullscreen", True]
63 nhiều lần như thế này để thêm không gian dọc. Giống như bạn đang nhấn Enter trên bàn phím của mình trong trình xử lý văn bản.

Ký tự xuống dòng là một ký tự điều khiển đặc biệt được sử dụng để biểu thị kết thúc một dòng [EOL]. Nó thường không có biểu diễn hiển thị trên màn hình, nhưng một số trình soạn thảo văn bản có thể hiển thị các ký tự không in được như vậy với ít đồ họa

Từ “ký tự” có phần sai trong trường hợp này, bởi vì một dòng mới thường dài hơn một ký tự. Ví dụ: hệ điều hành Windows, cũng như giao thức HTTP, biểu thị các dòng mới bằng một cặp ký tự. Đôi khi bạn cần tính đến những khác biệt đó để thiết kế các chương trình di động thực sự

Để tìm hiểu điều gì tạo nên một dòng mới trong hệ điều hành của bạn, hãy sử dụng mô-đun

root.attributes["-fullscreen", True]
73 tích hợp sẵn của Python

Điều này sẽ ngay lập tức cho bạn biết rằng Windows và DOS đại diện cho dòng mới dưới dạng một chuỗi

root.attributes["-fullscreen", True]
74 theo sau là
root.attributes["-fullscreen", True]
75

>>>

root.attributes["-fullscreen", True]
6

Trên Unix, Linux và các phiên bản macOS gần đây, đó là một ký tự

root.attributes["-fullscreen", True]
75

>>>

root.attributes["-fullscreen", True]
8

Tuy nhiên, Mac OS X cổ điển vẫn bám sát triết lý “nghĩ khác” của riêng nó bằng cách chọn một đại diện khác

>>>

root.attributes["-fullscreen", True]
9

Lưu ý cách các ký tự này xuất hiện trong chuỗi ký tự. Họ sử dụng cú pháp đặc biệt với dấu gạch chéo ngược trước [

root.attributes["-fullscreen", True]
77] để biểu thị phần đầu của chuỗi ký tự thoát. Các trình tự như vậy cho phép biểu diễn các ký tự điều khiển, nếu không sẽ không nhìn thấy được trên màn hình

Hầu hết các ngôn ngữ lập trình đều đi kèm với một tập hợp các chuỗi thoát được xác định trước cho các ký tự đặc biệt, chẳng hạn như các ký tự này

  • root.attributes["-fullscreen", True]
    
    78. dấu gạch chéo ngược
  • root.attributes["-fullscreen", True]
    
    79. xóa lùi
  • root.attributes["-fullscreen", True]
    
    80. chuyển hướng
  • root.attributes["-fullscreen", True]
    
    74. vận chuyển trở lại [CR]
  • root.attributes["-fullscreen", True]
    
    75. dòng mới, còn được gọi là nguồn cấp dữ liệu dòng [LF]

Hai cái cuối cùng gợi nhớ đến máy đánh chữ cơ học, yêu cầu hai lệnh riêng biệt để chèn một dòng mới. Lệnh đầu tiên sẽ di chuyển cỗ xe trở lại đầu dòng hiện tại, trong khi lệnh thứ hai sẽ chuyển cuộn sang dòng tiếp theo

Bằng cách so sánh các mã ký tự ASCII tương ứng, bạn sẽ thấy rằng việc đặt dấu gạch chéo ngược trước một ký tự sẽ thay đổi hoàn toàn ý nghĩa của nó. Tuy nhiên, không phải tất cả các ký tự đều cho phép điều này–chỉ những ký tự đặc biệt

Để so sánh các mã ký tự ASCII, bạn có thể muốn sử dụng hàm

root.attributes["-fullscreen", True]
83 tích hợp

>>>

root.attributes["-fullscreen", True]
7

Hãy nhớ rằng, để tạo thành một chuỗi thoát chính xác, không được có khoảng cách giữa ký tự dấu gạch chéo ngược và một chữ cái

Như bạn vừa thấy, gọi

root.attributes["-fullscreen", True]
63 mà không có đối số sẽ dẫn đến một dòng trống, là dòng chỉ bao gồm ký tự xuống dòng. Đừng nhầm lẫn điều này với một dòng trống, không chứa bất kỳ ký tự nào, thậm chí không có dòng mới

Bạn có thể sử dụng chuỗi ký tự của Python để hình dung hai

root.attributes["-fullscreen", True]
9

Cái đầu tiên dài một ký tự, trong khi cái thứ hai không có nội dung

Trong một tình huống phổ biến hơn, bạn muốn truyền đạt một số thông điệp tới người dùng cuối. Có một số cách để đạt được điều này

Trước tiên, bạn có thể chuyển trực tiếp một chuỗi ký tự tới

root.attributes["-fullscreen", True]
63

>>>

root.attributes["-fullscreen", True]
1

Điều này sẽ in nguyên văn tin nhắn lên màn hình

Chuỗi ký tự trong Python có thể được đặt trong dấu ngoặc đơn [

root.attributes["-fullscreen", True]
86] hoặc dấu ngoặc kép [
root.attributes["-fullscreen", True]
87]. Theo hướng dẫn phong cách PEP 8 chính thức, bạn chỉ nên chọn một và tiếp tục sử dụng nó một cách nhất quán. Không có sự khác biệt, trừ khi bạn cần lồng cái này vào cái khác

Ví dụ: bạn không thể sử dụng dấu ngoặc kép cho nghĩa đen và cũng bao gồm dấu ngoặc kép bên trong nó, vì điều đó không rõ ràng đối với trình thông dịch Python

root.attributes["-fullscreen", True]
4

Điều bạn muốn làm là đặt văn bản chứa dấu ngoặc kép trong dấu ngoặc đơn

root.attributes["-fullscreen", True]
5

Thủ thuật tương tự sẽ hoạt động theo cách khác

root.attributes["-fullscreen", True]
0

Ngoài ra, bạn có thể sử dụng các chuỗi ký tự thoát đã đề cập trước đó, để làm cho Python coi các dấu ngoặc kép bên trong đó theo nghĩa đen là một phần của chuỗi ký tự

root.attributes["-fullscreen", True]
1

Chạy trốn là tốt và bảnh bao, nhưng đôi khi nó có thể cản trở. Cụ thể, khi bạn cần chuỗi của mình chứa tương đối nhiều ký tự gạch chéo ngược ở dạng chữ

Một ví dụ kinh điển là đường dẫn tệp trên Windows

root.attributes["-fullscreen", True]
2

Lưu ý cách mỗi ký tự dấu gạch chéo ngược cần được thoát bằng một dấu gạch chéo ngược khác

Điều này thậm chí còn nổi bật hơn với các biểu thức thông thường, nhanh chóng trở nên phức tạp do sử dụng nhiều ký tự đặc biệt

root.attributes["-fullscreen", True]
3

May mắn thay, bạn có thể tắt hoàn toàn thoát ký tự với sự trợ giúp của chuỗi ký tự thô. Đơn giản chỉ cần thêm một

root.attributes["-fullscreen", True]
88 hoặc
root.attributes["-fullscreen", True]
89 trước câu trích dẫn mở đầu, và bây giờ bạn kết thúc với điều này

root.attributes["-fullscreen", True]
4

Điều đó tốt hơn nhiều, phải không?

Có một vài tiền tố nữa mang ý nghĩa đặc biệt cho chuỗi ký tự trong Python, nhưng bạn sẽ không tìm hiểu về chúng ở đây

Cuối cùng, bạn có thể xác định các chuỗi ký tự nhiều dòng bằng cách đặt chúng trong khoảng từ

root.attributes["-fullscreen", True]
90 hoặc
root.attributes["-fullscreen", True]
91, thường được sử dụng làm chuỗi tài liệu

Đây là một ví dụ

root.attributes["-fullscreen", True]
5

Để ngăn một dòng mới ban đầu, chỉ cần đặt văn bản ngay sau phần mở đầu

root.attributes["-fullscreen", True]
91

root.attributes["-fullscreen", True]
6

Bạn cũng có thể sử dụng dấu gạch chéo ngược để loại bỏ dòng mới

root.attributes["-fullscreen", True]
7

Để xóa thụt đầu dòng khỏi chuỗi nhiều dòng, bạn có thể tận dụng lợi thế của mô-đun

root.attributes["-fullscreen", True]
93 tích hợp

>>>

root.attributes["-fullscreen", True]
8

Điều này sẽ xử lý các đoạn không liên kết cho bạn. Ngoài ra còn có một số chức năng hữu ích khác trong

root.attributes["-fullscreen", True]
93 để căn chỉnh văn bản mà bạn có thể tìm thấy trong trình xử lý văn bản

Thứ hai, bạn có thể trích xuất thông báo đó thành biến riêng của nó với một tên có ý nghĩa để nâng cao khả năng đọc và thúc đẩy tái sử dụng mã

>>>

root.attributes["-fullscreen", True]
9

Cuối cùng, bạn có thể chuyển một biểu thức, chẳng hạn như nối chuỗi, để được đánh giá trước khi in kết quả

>>>

root.attributes["-fullscreen", True]
60

Trên thực tế, có hàng chục cách để định dạng thư trong Python. Tôi thực sự khuyến khích bạn xem f-strings, được giới thiệu trong Python 3. 6, bởi vì chúng cung cấp cú pháp ngắn gọn nhất trong số chúng

>>>

root.attributes["-fullscreen", True]
61

Hơn nữa, f-strings sẽ giúp bạn tránh mắc một lỗi phổ biến, đó là quên gõ các toán hạng nối kiểu ép kiểu. Python là một ngôn ngữ được gõ mạnh, có nghĩa là nó sẽ không cho phép bạn làm điều này

>>>

root.attributes["-fullscreen", True]
62

Điều đó sai vì thêm số vào chuỗi không có nghĩa. Trước tiên, bạn cần chuyển đổi rõ ràng số thành chuỗi để nối chúng lại với nhau

>>>

root.attributes["-fullscreen", True]
63

Trừ khi bạn tự xử lý các lỗi như vậy, trình thông dịch Python sẽ cho bạn biết về sự cố bằng cách hiển thị truy nguyên

Như với bất kỳ chức năng nào, việc bạn truyền một ký tự, một biến hay một biểu thức không quan trọng. Tuy nhiên, không giống như nhiều chức năng khác,

root.attributes["-fullscreen", True]
63 sẽ chấp nhận mọi thứ bất kể loại của nó

Cho đến nay, bạn chỉ nhìn vào chuỗi, còn các kiểu dữ liệu khác thì sao?

>>>

root.attributes["-fullscreen", True]
64

Tuy nhiên, hãy coi chừng hằng số

root.attributes["-fullscreen", True]
96. Mặc dù được sử dụng để biểu thị sự vắng mặt của một giá trị, nhưng nó sẽ hiển thị dưới dạng
root.attributes["-fullscreen", True]
97 chứ không phải là một chuỗi trống

Làm thế nào để

root.attributes["-fullscreen", True]
63 biết cách làm việc với tất cả các loại khác nhau này? . Nó ngầm gọi
root.attributes["-fullscreen", True]
99 đằng sau hậu trường để nhập cast bất kỳ đối tượng nào vào một chuỗi. Sau đó, nó xử lý các chuỗi theo cách thống nhất

Ở phần sau của hướng dẫn này, bạn sẽ học cách sử dụng cơ chế này để in các loại dữ liệu tùy chỉnh, chẳng hạn như các lớp của bạn

Được rồi, bây giờ bạn có thể gọi

root.attributes["-fullscreen", True]
63 bằng một đối số hoặc không có bất kỳ đối số nào. Bạn biết cách in các tin nhắn đã sửa hoặc đã định dạng lên màn hình. Tiểu mục tiếp theo sẽ mở rộng một chút về định dạng thư

Để đạt được kết quả tương tự trong thế hệ ngôn ngữ trước, bạn thường muốn bỏ dấu ngoặc đơn kèm theo văn bản

root.attributes["-fullscreen", True]
65

Đó là bởi vì hồi đó

root.attributes["-fullscreen", True]
601 không phải là một hàm, như bạn sẽ thấy trong phần tiếp theo. Tuy nhiên, lưu ý rằng trong một số trường hợp, dấu ngoặc đơn trong Python là thừa. Sẽ không hại gì nếu bao gồm chúng vì chúng sẽ bị bỏ qua. Điều đó có nghĩa là bạn nên sử dụng câu lệnh
root.attributes["-fullscreen", True]
601 như thể nó là một hàm?

Ví dụ: dấu ngoặc đơn bao quanh một biểu thức hoặc một chữ là tùy chọn. Cả hai hướng dẫn đều tạo ra cùng một kết quả trong Python 2

>>>

root.attributes["-fullscreen", True]
66

Dấu ngoặc tròn thực sự là một phần của biểu thức chứ không phải là câu lệnh

root.attributes["-fullscreen", True]
601. Nếu biểu thức của bạn tình cờ chỉ chứa một mục, thì có vẻ như bạn hoàn toàn không bao gồm dấu ngoặc

Mặt khác, đặt dấu ngoặc đơn xung quanh nhiều mục sẽ tạo thành một bộ

>>>

root.attributes["-fullscreen", True]
67

Đây là một nguồn nhầm lẫn đã biết. Trên thực tế, bạn cũng sẽ nhận được một bộ bằng cách thêm dấu phẩy ở cuối vào mục duy nhất được bao quanh bởi dấu ngoặc đơn

>>>

root.attributes["-fullscreen", True]
68

Điểm mấu chốt là bạn không nên gọi

root.attributes["-fullscreen", True]
601 bằng dấu ngoặc trong Python 2. Mặc dù, để hoàn toàn chính xác, bạn có thể giải quyết vấn đề này với sự trợ giúp của nhập khẩu
root.attributes["-fullscreen", True]
605, bạn sẽ đọc thêm về điều này trong phần có liên quan

Tách nhiều đối số

Bạn đã thấy

root.attributes["-fullscreen", True]
63 được gọi mà không có bất kỳ đối số nào để tạo ra một dòng trống và sau đó được gọi với một đối số duy nhất để hiển thị thông báo cố định hoặc thông báo được định dạng

Tuy nhiên, hóa ra hàm này có thể chấp nhận bất kỳ số lượng đối số vị trí nào, bao gồm không, một hoặc nhiều đối số. Điều đó rất hữu ích trong trường hợp phổ biến của định dạng thư, nơi bạn muốn kết hợp một số thành phần lại với nhau

Các đối số có thể được chuyển đến một chức năng theo một số cách. Một cách là đặt tên rõ ràng cho các đối số khi bạn gọi hàm, như thế này

>>>

root.attributes["-fullscreen", True]
69

Vì các đối số có thể được xác định duy nhất theo tên nên thứ tự của chúng không thành vấn đề. Trao đổi chúng ra vẫn sẽ cho kết quả tương tự

>>>

root.attributes["-fullscreen", True]
80

Ngược lại, các đối số được truyền không có tên được xác định theo vị trí của chúng. Đó là lý do tại sao các đối số vị trí cần tuân thủ nghiêm ngặt thứ tự do chữ ký hàm đặt ra

>>>

root.attributes["-fullscreen", True]
81

root.attributes["-fullscreen", True]
63 cho phép số lượng đối số vị trí tùy ý nhờ tham số
root.attributes["-fullscreen", True]
608

Hãy xem ví dụ này

>>>

root.attributes["-fullscreen", True]
82

root.attributes["-fullscreen", True]
63 nối tất cả bốn đối số được truyền cho nó và nó chèn một khoảng trắng giữa chúng để bạn không nhận được một thông báo bị nén như
root.attributes["-fullscreen", True]
610

Lưu ý rằng nó cũng quan tâm đến việc truyền kiểu thích hợp bằng cách gọi ngầm

root.attributes["-fullscreen", True]
99 trên mỗi đối số trước khi nối chúng lại với nhau. Nếu bạn nhớ lại từ tiểu mục trước, một phép nối ngây thơ có thể dễ dàng dẫn đến lỗi do các loại không tương thích

>>>

root.attributes["-fullscreen", True]
83

Ngoài việc chấp nhận một số lượng đối số vị trí khác nhau,

root.attributes["-fullscreen", True]
63 định nghĩa bốn đối số có tên hoặc từ khóa, là tùy chọn vì tất cả chúng đều có giá trị mặc định. Bạn có thể xem tài liệu ngắn gọn của họ bằng cách gọi
root.attributes["-fullscreen", True]
613 từ trình thông dịch tương tác

Bây giờ hãy tập trung vào

root.attributes["-fullscreen", True]
614. Nó là viết tắt của dấu phân cách và được gán một khoảng trắng [
root.attributes["-fullscreen", True]
615] theo mặc định. Nó xác định giá trị để nối các phần tử với

Nó phải là một chuỗi hoặc

root.attributes["-fullscreen", True]
96, nhưng cái sau có tác dụng tương tự như khoảng trắng mặc định

>>>

root.attributes["-fullscreen", True]
84

Nếu bạn muốn loại bỏ hoàn toàn dấu phân cách, thay vào đó, bạn phải chuyển một chuỗi trống [

root.attributes["-fullscreen", True]
617]

>>>

root.attributes["-fullscreen", True]
85

Bạn có thể muốn

root.attributes["-fullscreen", True]
63 tham gia các đối số của nó dưới dạng các dòng riêng biệt. Trong trường hợp đó, chỉ cần chuyển ký tự dòng mới đã thoát được mô tả trước đó

>>>

root.attributes["-fullscreen", True]
86

Một ví dụ hữu ích hơn về tham số

root.attributes["-fullscreen", True]
614 sẽ in một cái gì đó như đường dẫn tệp

>>>

root.attributes["-fullscreen", True]
87

Hãy nhớ rằng dấu phân cách nằm giữa các phần tử chứ không phải xung quanh chúng, vì vậy bạn cần tính đến điều đó theo cách này hay cách khác

>>>

root.attributes["-fullscreen", True]
88

Cụ thể, bạn có thể chèn một ký tự gạch chéo [

root.attributes["-fullscreen", True]
620] vào đối số vị trí đầu tiên hoặc sử dụng một chuỗi trống làm đối số đầu tiên để thực thi dấu gạch chéo ở đầu

Một ví dụ thú vị khác có thể là xuất dữ liệu sang định dạng giá trị được phân tách bằng dấu phẩy [CSV]

>>>

root.attributes["-fullscreen", True]
89

Điều này sẽ không xử lý các trường hợp cạnh như thoát dấu phẩy một cách chính xác, nhưng đối với các trường hợp sử dụng đơn giản, nó nên làm. Dòng trên sẽ hiển thị trong cửa sổ đầu cuối của bạn. Để lưu nó vào một tệp, bạn phải chuyển hướng đầu ra. Ở phần sau của phần này, bạn sẽ thấy cách sử dụng

root.attributes["-fullscreen", True]
63 để viết văn bản vào tệp trực tiếp từ Python

Cuối cùng, tham số

root.attributes["-fullscreen", True]
614 không chỉ giới hạn ở một ký tự. Bạn có thể nối các phần tử với các chuỗi có độ dài bất kỳ

>>>

root.attributes["-fullscreen", True]
90

Trong các phần phụ sắp tới, bạn sẽ khám phá các đối số từ khóa còn lại của hàm

root.attributes["-fullscreen", True]
63

Để in nhiều phần tử trong Python 2, bạn phải bỏ dấu ngoặc đơn xung quanh chúng, giống như trước đây

>>>

root.attributes["-fullscreen", True]
91

Mặt khác, nếu bạn giữ chúng, bạn sẽ chuyển một phần tử tuple duy nhất cho câu lệnh

root.attributes["-fullscreen", True]
601

>>>

root.attributes["-fullscreen", True]
92

Hơn nữa, không có cách nào thay đổi dấu tách mặc định của các phần tử đã nối trong Python 2, vì vậy một cách giải quyết khác là sử dụng phép nội suy chuỗi như vậy

>>>

root.attributes["-fullscreen", True]
93

Đó là cách định dạng chuỗi mặc định cho đến khi phương thức

root.attributes["-fullscreen", True]
625 được nhập từ Python 3

Ngăn Ngắt Dòng

Đôi khi bạn không muốn kết thúc tin nhắn của mình bằng một dòng mới ở cuối để các cuộc gọi tiếp theo tới

root.attributes["-fullscreen", True]
63 sẽ tiếp tục trên cùng một dòng. Các ví dụ cổ điển bao gồm cập nhật tiến trình của một hoạt động dài hạn hoặc nhắc người dùng nhập liệu. Trong trường hợp sau, bạn muốn người dùng nhập câu trả lời trên cùng một dòng

root.attributes["-fullscreen", True]
94

Nhiều ngôn ngữ lập trình hiển thị các hàm tương tự như

root.attributes["-fullscreen", True]
63 thông qua các thư viện tiêu chuẩn của chúng, nhưng chúng cho phép bạn quyết định có thêm một dòng mới hay không. Ví dụ: trong Java và C#, bạn có hai hàm riêng biệt, trong khi các ngôn ngữ khác yêu cầu bạn phải thêm rõ ràng
root.attributes["-fullscreen", True]
75 vào cuối chuỗi ký tự

Dưới đây là một vài ví dụ về cú pháp trong các ngôn ngữ như vậy

Ngôn ngữVí dụPerl
root.attributes["-fullscreen", True]
629C
root.attributes["-fullscreen", True]
630C++
root.attributes["-fullscreen", True]
631

Ngược lại, hàm ________ 163 của Python luôn thêm ________ 175 mà không cần hỏi, vì đó là điều bạn muốn trong hầu hết các trường hợp. Để vô hiệu hóa nó, bạn có thể tận dụng một đối số từ khóa khác,

root.attributes["-fullscreen", True]
634, cho biết nội dung kết thúc dòng bằng

Về mặt ngữ nghĩa, tham số

root.attributes["-fullscreen", True]
634 gần giống với tham số
root.attributes["-fullscreen", True]
614 mà bạn đã thấy trước đó

  • Nó phải là một chuỗi hoặc
    root.attributes["-fullscreen", True]
    
    96
  • Nó có thể dài tùy ý
  • Nó có giá trị mặc định là
    root.attributes["-fullscreen", True]
    
    638
  • Nếu bằng
    root.attributes["-fullscreen", True]
    
    96, nó sẽ có tác dụng giống như giá trị mặc định
  • Nếu bằng một chuỗi rỗng [______1617], nó sẽ chặn dòng mới

Bây giờ bạn đã hiểu điều gì đang xảy ra bí ẩn khi bạn gọi điện cho

root.attributes["-fullscreen", True]
63 mà không cần tranh luận. Vì bạn không cung cấp bất kỳ đối số vị trí nào cho hàm nên không có gì được nối và do đó, dấu phân cách mặc định hoàn toàn không được sử dụng. Tuy nhiên, giá trị mặc định của
root.attributes["-fullscreen", True]
634 vẫn được áp dụng và một dòng trống xuất hiện

Để tắt dòng mới, bạn phải chỉ định một chuỗi trống thông qua đối số từ khóa

root.attributes["-fullscreen", True]
634

root.attributes["-fullscreen", True]
95

Mặc dù đây là hai lệnh gọi

root.attributes["-fullscreen", True]
63 riêng biệt, có thể thực hiện cách nhau một thời gian dài, cuối cùng bạn sẽ chỉ thấy một dòng. Đầu tiên, nó sẽ trông như thế này

root.attributes["-fullscreen", True]
96

Tuy nhiên, sau cuộc gọi thứ hai đến

root.attributes["-fullscreen", True]
63, dòng tương tự sẽ xuất hiện trên màn hình như

root.attributes["-fullscreen", True]
97

Như với

root.attributes["-fullscreen", True]
614, bạn có thể sử dụng
root.attributes["-fullscreen", True]
634 để nối các phần riêng lẻ thành một khối văn bản lớn bằng dấu tách tùy chỉnh. Tuy nhiên, thay vì nối nhiều đối số, nó sẽ nối văn bản từ mỗi lệnh gọi hàm vào cùng một dòng

root.attributes["-fullscreen", True]
98

Ba hướng dẫn này sẽ xuất ra một dòng văn bản

root.attributes["-fullscreen", True]
99

Bạn có thể trộn hai đối số từ khóa

root.attributes["-fullscreen", True]
70

Bạn không chỉ nhận được một dòng văn bản mà tất cả các mục được phân tách bằng dấu phẩy

root.attributes["-fullscreen", True]
71

Không có gì ngăn bạn sử dụng ký tự xuống dòng với một số phần đệm bổ sung xung quanh nó

root.attributes["-fullscreen", True]
72

Nó sẽ in ra đoạn văn bản sau

root.attributes["-fullscreen", True]
73

Như bạn có thể thấy, đối số từ khóa

root.attributes["-fullscreen", True]
634 sẽ chấp nhận các chuỗi tùy ý

Bạn đang làm quen với việc in bằng Python, nhưng vẫn còn rất nhiều thông tin hữu ích phía trước. Trong phần phụ sắp tới, bạn sẽ học cách chặn và chuyển hướng đầu ra của hàm

root.attributes["-fullscreen", True]
63

Ngăn ngắt dòng trong Python 2 yêu cầu bạn thêm dấu phẩy ở cuối vào biểu thức

Tuy nhiên, điều đó không lý tưởng vì nó cũng thêm một khoảng trống không mong muốn, điều này sẽ chuyển thành

root.attributes["-fullscreen", True]
650 thay vì
root.attributes["-fullscreen", True]
651 trong Python 3. Bạn có thể kiểm tra điều này với đoạn mã sau

root.attributes["-fullscreen", True]
74

Lưu ý rằng có một khoảng trống giữa các từ

root.attributes["-fullscreen", True]
652 và
root.attributes["-fullscreen", True]
653

Để có được kết quả như mong đợi, bạn cần sử dụng một trong những thủ thuật được giải thích sau, đó là nhập hàm

root.attributes["-fullscreen", True]
63 từ
root.attributes["-fullscreen", True]
605 hoặc quay lại mô-đun
root.attributes["-fullscreen", True]
656

root.attributes["-fullscreen", True]
75

Điều này sẽ in đầu ra chính xác mà không cần thêm dung lượng

Trong khi sử dụng mô-đun

root.attributes["-fullscreen", True]
656 cho phép bạn kiểm soát những gì được in ra đầu ra tiêu chuẩn, mã sẽ trở nên lộn xộn hơn một chút

In ra một tập tin

Dù bạn có tin hay không thì tùy,

root.attributes["-fullscreen", True]
63 không biết cách chuyển tin nhắn thành văn bản trên màn hình của bạn và nói thẳng ra là không cần. Đó là công việc dành cho các lớp mã cấp thấp hơn, hiểu các byte và biết cách đẩy chúng xung quanh

root.attributes["-fullscreen", True]
63 là một sự trừu tượng hóa trên các lớp này, cung cấp một giao diện thuận tiện chỉ ủy quyền việc in thực tế cho một đối tượng giống như luồng hoặc tệp. Luồng có thể là bất kỳ tệp nào trên đĩa của bạn, ổ cắm mạng hoặc có thể là bộ đệm trong bộ nhớ

Ngoài ra, có ba luồng tiêu chuẩn được cung cấp bởi hệ điều hành

  1. root.attributes["-fullscreen", True]
    
    660. đầu vào tiêu chuẩn
  2. root.attributes["-fullscreen", True]
    
    661. đầu ra tiêu chuẩn
  3. root.attributes["-fullscreen", True]
    
    662. lỗi tiêu chuẩn

Đầu ra tiêu chuẩn là những gì bạn nhìn thấy trong thiết bị đầu cuối khi chạy các chương trình dòng lệnh khác nhau bao gồm các tập lệnh Python của riêng bạn

root.attributes["-fullscreen", True]
76

Trừ khi có hướng dẫn khác,

root.attributes["-fullscreen", True]
63 sẽ mặc định ghi vào đầu ra tiêu chuẩn. Tuy nhiên, bạn có thể yêu cầu hệ điều hành của mình tạm thời hoán đổi
root.attributes["-fullscreen", True]
661 cho một luồng tệp để mọi đầu ra kết thúc trong tệp đó thay vì màn hình

root.attributes["-fullscreen", True]
77

Đó gọi là chuyển hướng luồng

Lỗi tiêu chuẩn giống như

root.attributes["-fullscreen", True]
661 ở chỗ nó cũng hiển thị trên màn hình. Tuy nhiên, đó là một luồng riêng biệt, với mục đích là ghi lại các thông báo lỗi để chẩn đoán. Bằng cách chuyển hướng một hoặc cả hai, bạn có thể giữ mọi thứ sạch sẽ

Một số chương trình sử dụng cách tô màu khác nhau để phân biệt giữa các thư được in cho

root.attributes["-fullscreen", True]
661 và
root.attributes["-fullscreen", True]
662

Đó là bởi vì bộ đệm hệ điều hành sau đó ghi vào đầu ra tiêu chuẩn trong trường hợp này. Bạn cần biết rằng có ba loại luồng liên quan đến bộ đệm

  1. Không có bộ đệm
  2. đệm dòng
  3. đệm khối

Không có bộ đệm thì rõ ràng, nghĩa là không có bộ đệm nào diễn ra và tất cả các thao tác ghi đều có hiệu lực ngay lập tức. Luồng có bộ đệm dòng chờ trước khi thực hiện bất kỳ lệnh gọi I/O nào cho đến khi ngắt dòng xuất hiện ở đâu đó trong bộ đệm, trong khi luồng có bộ đệm khối chỉ đơn giản cho phép bộ đệm lấp đầy đến một kích thước nhất định bất kể nội dung của nó là gì. Đầu ra tiêu chuẩn có cả bộ đệm dòng và bộ đệm khối, tùy thuộc vào sự kiện nào đến trước

Bộ đệm giúp giảm số lượng cuộc gọi I/O đắt tiền. Ví dụ, hãy nghĩ về việc gửi tin nhắn qua mạng có độ trễ cao. Khi bạn kết nối với một máy chủ từ xa để thực thi các lệnh qua giao thức SSH, mỗi lần nhấn phím của bạn thực sự có thể tạo ra một gói dữ liệu riêng lẻ, có kích thước lớn hơn tải trọng của nó. Thật là một chi phí. Sẽ hợp lý nếu đợi cho đến khi ít nhất một vài ký tự được nhập và sau đó gửi chúng cùng nhau. Đó là nơi bộ đệm bước vào

Mặt khác, bộ đệm đôi khi có thể có tác dụng không mong muốn như bạn vừa thấy với ví dụ đếm ngược. Để khắc phục, bạn chỉ cần yêu cầu

root.attributes["-fullscreen", True]
63 xóa mạnh luồng mà không cần đợi ký tự xuống dòng trong bộ đệm bằng cách sử dụng cờ
root.attributes["-fullscreen", True]
698 của nó

root.attributes["-fullscreen", True]
10

Đó là tất cả. Bộ đếm ngược của bạn sẽ hoạt động như mong đợi ngay bây giờ, nhưng đừng tin lời tôi. Hãy tiếp tục và kiểm tra nó để thấy sự khác biệt

Xin chúc mừng. Tại thời điểm này, bạn đã thấy các ví dụ về cách gọi

root.attributes["-fullscreen", True]
63 bao gồm tất cả các tham số của nó. Bạn biết mục đích của chúng và khi nào nên sử dụng chúng. Tuy nhiên, việc hiểu chữ ký chỉ là bước đầu. Trong các phần sắp tới, bạn sẽ thấy tại sao

Không có cách nào dễ dàng để xóa luồng trong Python 2, vì bản thân câu lệnh

root.attributes["-fullscreen", True]
601 không cho phép thực hiện điều đó. Bạn cần xử lý lớp cấp thấp hơn của nó, đây là đầu ra tiêu chuẩn và gọi nó trực tiếp

root.attributes["-fullscreen", True]
11

Ngoài ra, bạn có thể vô hiệu hóa tính năng đệm của các luồng tiêu chuẩn bằng cách cung cấp cờ

root.attributes["-fullscreen", True]
801 cho trình thông dịch Python hoặc bằng cách thiết lập biến môi trường
root.attributes["-fullscreen", True]
802

root.attributes["-fullscreen", True]
12

Lưu ý rằng

root.attributes["-fullscreen", True]
63 đã được nhập vào Python 2 và được cung cấp thông qua mô-đun
root.attributes["-fullscreen", True]
605. Thật không may, nó không đi kèm với tham số
root.attributes["-fullscreen", True]
698

>>>

root.attributes["-fullscreen", True]
13

Những gì bạn đang thấy ở đây là một chuỗi tài liệu của hàm

root.attributes["-fullscreen", True]
63. Bạn có thể hiển thị các chuỗi tài liệu của các đối tượng khác nhau trong Python bằng cách sử dụng hàm
root.attributes["-fullscreen", True]
807 tích hợp

In các loại dữ liệu tùy chỉnh

Cho đến bây giờ, bạn chỉ xử lý các kiểu dữ liệu dựng sẵn như chuỗi và số, nhưng bạn sẽ thường muốn in các kiểu dữ liệu trừu tượng của riêng mình. Chúng ta hãy xem xét các cách khác nhau để định nghĩa chúng

Đối với các đối tượng đơn giản không có bất kỳ logic nào, mục đích là mang dữ liệu, thông thường bạn sẽ tận dụng lợi thế của

root.attributes["-fullscreen", True]
808, có sẵn trong thư viện tiêu chuẩn. Các bộ dữ liệu được đặt tên có một biểu diễn văn bản gọn gàng ngoài hộp

>>>

root.attributes["-fullscreen", True]
14

Điều đó thật tuyệt miễn là giữ dữ liệu là đủ, nhưng để thêm các hành vi vào loại

root.attributes["-fullscreen", True]
809, cuối cùng bạn sẽ cần xác định một lớp. Hãy xem ví dụ này

root.attributes["-fullscreen", True]
15

Nếu bây giờ bạn tạo một thể hiện của lớp

root.attributes["-fullscreen", True]
809 và thử in nó, bạn sẽ nhận được kết quả kỳ lạ này, khá khác so với lớp
root.attributes["-fullscreen", True]
808 tương đương

>>>

root.attributes["-fullscreen", True]
16

Đó là biểu diễn mặc định của các đối tượng, bao gồm địa chỉ của chúng trong bộ nhớ, tên lớp tương ứng và mô-đun trong đó chúng được định nghĩa. Bạn sẽ khắc phục điều đó trong giây lát, nhưng chỉ để ghi lại, như một giải pháp thay thế nhanh chóng, bạn có thể kết hợp

root.attributes["-fullscreen", True]
808 và một lớp tùy chỉnh thông qua kế thừa

root.attributes["-fullscreen", True]
17

Lớp

root.attributes["-fullscreen", True]
809 của bạn vừa trở thành một loại
root.attributes["-fullscreen", True]
808 chuyên biệt với hai thuộc tính mà bạn có thể tùy chỉnh

Điều đó tốt hơn một

root.attributes["-fullscreen", True]
808 đơn giản, bởi vì bạn không chỉ được in miễn phí mà còn có thể thêm các phương thức và thuộc tính tùy chỉnh vào lớp. Tuy nhiên, nó giải quyết một vấn đề trong khi giới thiệu một vấn đề khác. Hãy nhớ rằng các bộ dữ liệu, bao gồm cả các bộ dữ liệu được đặt tên, là bất biến trong Python, vì vậy chúng không thể thay đổi giá trị của chúng sau khi được tạo

Đúng là mong muốn thiết kế các kiểu dữ liệu bất biến, nhưng trong nhiều trường hợp, bạn sẽ muốn chúng cho phép thay đổi, vì vậy bạn quay lại với các lớp thông thường

Từ các tiểu mục trước, bạn đã biết rằng

root.attributes["-fullscreen", True]
63 ngầm gọi hàm
root.attributes["-fullscreen", True]
99 tích hợp để chuyển đổi các đối số vị trí của nó thành các chuỗi. Thật vậy, việc gọi thủ công
root.attributes["-fullscreen", True]
99 đối với một thể hiện của lớp
root.attributes["-fullscreen", True]
809 thông thường mang lại kết quả tương tự như việc in nó

>>>

root.attributes["-fullscreen", True]
18

Ngược lại,

root.attributes["-fullscreen", True]
99 tìm kiếm một trong hai phương thức ma thuật trong nội dung lớp mà bạn thường triển khai. Nếu nó không tìm thấy, thì nó sẽ quay trở lại biểu diễn mặc định xấu xí. Những phương pháp kỳ diệu đó, theo thứ tự tìm kiếm

  1. root.attributes["-fullscreen", True]
    
    821
  2. root.attributes["-fullscreen", True]
    
    822

Cái đầu tiên được khuyến nghị trả về một văn bản ngắn, con người có thể đọc được, bao gồm thông tin từ các thuộc tính có liên quan nhất. Rốt cuộc, bạn không muốn để lộ dữ liệu nhạy cảm, chẳng hạn như mật khẩu người dùng, khi in các đối tượng

Tuy nhiên, cái còn lại phải cung cấp thông tin đầy đủ về một đối tượng, để cho phép khôi phục trạng thái của nó từ một chuỗi. Lý tưởng nhất là nó sẽ trả về mã Python hợp lệ để bạn có thể chuyển trực tiếp mã đó tới

root.attributes["-fullscreen", True]
823

>>>

root.attributes["-fullscreen", True]
19

Lưu ý việc sử dụng một hàm dựng sẵn khác,

root.attributes["-fullscreen", True]
824, luôn cố gắng gọi
root.attributes["-fullscreen", True]
825 trong một đối tượng, nhưng sẽ quay lại biểu diễn mặc định nếu không tìm thấy phương thức đó

Python mang đến cho bạn rất nhiều sự tự do khi xác định các kiểu dữ liệu của riêng bạn nếu không có kiểu tích hợp sẵn nào đáp ứng nhu cầu của bạn. Một số trong số chúng, chẳng hạn như các bộ dữ liệu được đặt tên và các lớp dữ liệu, cung cấp các biểu diễn chuỗi trông đẹp mắt mà không yêu cầu bất kỳ công việc nào từ phía bạn. Tuy nhiên, để linh hoạt nhất, bạn sẽ phải định nghĩa một lớp và ghi đè các phương thức ma thuật của nó được mô tả ở trên

Ngữ nghĩa của

root.attributes["-fullscreen", True]
826 và
root.attributes["-fullscreen", True]
825 không thay đổi kể từ Python 2, nhưng bạn phải nhớ rằng các chuỗi không có gì khác hơn là các mảng byte được tôn vinh vào thời điểm đó. Để chuyển đổi các đối tượng của bạn thành Unicode thích hợp, là một loại dữ liệu riêng biệt, bạn phải cung cấp một phương pháp kỳ diệu khác.
root.attributes["-fullscreen", True]
828

Đây là một ví dụ về cùng một lớp

root.attributes["-fullscreen", True]
829 trong Python 2

root.attributes["-fullscreen", True]
40

Như bạn có thể thấy, việc triển khai này ủy thác một số công việc để tránh trùng lặp bằng cách tự gọi hàm

root.attributes["-fullscreen", True]
830 tích hợp sẵn

Cả hai phương thức

root.attributes["-fullscreen", True]
826 và
root.attributes["-fullscreen", True]
825 đều phải trả về chuỗi, vì vậy chúng mã hóa các ký tự Unicode thành các biểu diễn byte cụ thể được gọi là bộ ký tự. UTF-8 là mã hóa phổ biến nhất và an toàn nhất, trong khi
root.attributes["-fullscreen", True]
833 là hằng số đặc biệt để biểu thị các ký tự ngộ nghĩnh, chẳng hạn như
root.attributes["-fullscreen", True]
834, dưới dạng các chuỗi thoát trong ASCII đơn giản, chẳng hạn như
root.attributes["-fullscreen", True]
835

Câu lệnh

root.attributes["-fullscreen", True]
601 đang tìm kiếm phương thức
root.attributes["-fullscreen", True]
826 kỳ diệu trong lớp, vì vậy bộ ký tự được chọn phải tương ứng với bộ ký tự được sử dụng bởi thiết bị đầu cuối. Ví dụ: mã hóa mặc định trong DOS và Windows là CP 852 chứ không phải UTF-8, vì vậy việc chạy mã này có thể dẫn đến kết quả đầu ra
root.attributes["-fullscreen", True]
691 hoặc thậm chí bị cắt xén

>>>

root.attributes["-fullscreen", True]
41

Tuy nhiên, nếu bạn chạy cùng một mã trên hệ thống có mã hóa UTF-8, thì bạn sẽ nhận được cách viết đúng của một tên tiếng Nga phổ biến

>>>

root.attributes["-fullscreen", True]
42

Bạn nên chuyển đổi các chuỗi thành Unicode càng sớm càng tốt, chẳng hạn như khi bạn đang đọc dữ liệu từ một tệp và sử dụng nó một cách nhất quán ở mọi nơi trong mã của bạn. Đồng thời, bạn nên mã hóa Unicode trở lại bộ ký tự đã chọn ngay trước khi trình bày cho người dùng

Có vẻ như bạn có nhiều quyền kiểm soát hơn đối với biểu diễn chuỗi của các đối tượng trong Python 2 vì không còn phương thức

root.attributes["-fullscreen", True]
828 thần kỳ nào trong Python 3 nữa. Bạn có thể tự hỏi liệu có thể chuyển đổi một đối tượng thành biểu diễn chuỗi byte của nó thay vì chuỗi Unicode trong Python 3 không. Có thể, với một phương pháp
root.attributes["-fullscreen", True]
840 đặc biệt làm được điều đó

>>>

root.attributes["-fullscreen", True]
43

Sử dụng hàm

root.attributes["-fullscreen", True]
841 tích hợp trên một cá thể ủy quyền cuộc gọi đến phương thức
root.attributes["-fullscreen", True]
842 của nó được xác định trong lớp tương ứng

Hiểu Python print[]

Bạn biết cách sử dụng

root.attributes["-fullscreen", True]
63 khá tốt vào thời điểm này, nhưng biết nó là gì sẽ cho phép bạn sử dụng nó hiệu quả và có ý thức hơn. Sau khi đọc phần này, bạn sẽ hiểu cách in bằng Python đã được cải thiện như thế nào trong những năm qua

In là một chức năng trong Python 3

Bạn đã thấy rằng

root.attributes["-fullscreen", True]
63 là một hàm trong Python 3. Cụ thể hơn, đó là chức năng tích hợp sẵn, nghĩa là bạn không cần phải nhập nó từ bất cứ đâu

>>>

root.attributes["-fullscreen", True]
44

Nó luôn có sẵn trong không gian tên chung để bạn có thể gọi nó trực tiếp, nhưng bạn cũng có thể truy cập nó thông qua một mô-đun từ thư viện chuẩn

>>>

root.attributes["-fullscreen", True]
45

Bằng cách này, bạn có thể tránh xung đột tên với các chức năng tùy chỉnh. Giả sử bạn muốn xác định lại

root.attributes["-fullscreen", True]
63 để nó không thêm một dòng mới ở cuối. Đồng thời, bạn muốn đổi tên chức năng ban đầu thành một cái gì đó như
root.attributes["-fullscreen", True]
846

>>>

root.attributes["-fullscreen", True]
46

Bây giờ bạn có hai chức năng in riêng biệt giống như trong ngôn ngữ lập trình Java. Bạn cũng sẽ định nghĩa các hàm

root.attributes["-fullscreen", True]
63 tùy chỉnh trong phần mô phỏng sau này. Ngoài ra, lưu ý rằng bạn sẽ không thể ghi đè lên
root.attributes["-fullscreen", True]
63 ngay từ đầu nếu đó không phải là một chức năng

Mặt khác,

root.attributes["-fullscreen", True]
63 không phải là một hàm theo nghĩa toán học, bởi vì nó không trả về bất kỳ giá trị có ý nghĩa nào ngoài giá trị ngầm định
root.attributes["-fullscreen", True]
96

>>>

root.attributes["-fullscreen", True]
47

Trên thực tế, các chức năng như vậy là các thủ tục hoặc chương trình con mà bạn gọi để đạt được một loại hiệu ứng phụ nào đó, mà cuối cùng là thay đổi trạng thái toàn cục. Trong trường hợp của

root.attributes["-fullscreen", True]
63, tác dụng phụ đó là hiển thị một thông báo trên đầu ra tiêu chuẩn hoặc ghi vào một tệp

root.attributes["-fullscreen", True]
63 là một hàm nên nó có chữ ký được xác định rõ ràng với các thuộc tính đã biết. Bạn có thể nhanh chóng tìm thấy tài liệu của nó bằng cách sử dụng trình chỉnh sửa mà bạn chọn mà không cần phải nhớ một số cú pháp kỳ lạ để thực hiện một tác vụ nhất định

Bên cạnh đó, các chức năng dễ dàng mở rộng hơn. Việc thêm một tính năng mới vào một chức năng cũng dễ dàng như thêm một đối số từ khóa khác, trong khi việc thay đổi ngôn ngữ để hỗ trợ tính năng mới đó thì cồng kềnh hơn nhiều. Ví dụ, hãy nghĩ về chuyển hướng luồng hoặc xóa bộ đệm

Một lợi ích khác của việc

root.attributes["-fullscreen", True]
63 là một chức năng là khả năng kết hợp. Các hàm được gọi là đối tượng hạng nhất hoặc công dân hạng nhất trong Python, đây là một cách thú vị để nói rằng chúng là các giá trị giống như chuỗi hoặc số. Bằng cách này, bạn có thể gán một hàm cho một biến, chuyển nó sang một hàm khác hoặc thậm chí trả về một hàm từ một hàm khác.
root.attributes["-fullscreen", True]
63 không khác biệt về vấn đề này. Chẳng hạn, bạn có thể tận dụng nó để tiêm phụ thuộc

root.attributes["-fullscreen", True]
48

Ở đây, tham số

root.attributes["-fullscreen", True]
855 cho phép bạn thêm chức năng gọi lại, mặc định là
root.attributes["-fullscreen", True]
63 nhưng có thể là bất kỳ chức năng nào có thể gọi được. Trong ví dụ này, việc in bị vô hiệu hóa hoàn toàn bằng cách thay thế
root.attributes["-fullscreen", True]
63 bằng một hàm giả không làm gì cả

Thành phần cho phép bạn kết hợp một số chức năng thành một chức năng mới cùng loại. Hãy xem điều này hoạt động bằng cách chỉ định một hàm

root.attributes["-fullscreen", True]
858 tùy chỉnh in ra luồng lỗi tiêu chuẩn và thêm tiền tố vào tất cả các thông báo với một mức nhật ký nhất định

>>>

root.attributes["-fullscreen", True]
49

Chức năng tùy chỉnh này sử dụng các chức năng từng phần để đạt được hiệu quả mong muốn. Đó là một khái niệm nâng cao mượn từ mô hình lập trình chức năng, vì vậy bạn không cần phải đi quá sâu vào chủ đề đó vào lúc này. Tuy nhiên, nếu bạn quan tâm đến chủ đề này, tôi khuyên bạn nên xem mô-đun

root.attributes["-fullscreen", True]
859

Không giống như câu lệnh, chức năng là giá trị. Điều đó có nghĩa là bạn có thể kết hợp chúng với các biểu thức, cụ thể là biểu thức lambda. Thay vì xác định một hàm toàn diện để thay thế

root.attributes["-fullscreen", True]
63 bằng, bạn có thể tạo một biểu thức lambda ẩn danh để gọi nó

>>>

root.attributes["-fullscreen", True]
50

Tuy nhiên, vì một biểu thức lambda được xác định tại chỗ nên không có cách nào đề cập đến nó ở nơi khác trong mã

Một loại biểu thức khác là biểu thức điều kiện bậc ba

>>>

root.attributes["-fullscreen", True]
51

Python có cả câu lệnh điều kiện và biểu thức điều kiện. Cái sau được đánh giá thành một giá trị có thể được gán cho một biến hoặc được truyền cho một hàm. Trong ví dụ trên, bạn quan tâm đến tác dụng phụ hơn là giá trị, đánh giá là

root.attributes["-fullscreen", True]
96, vì vậy bạn chỉ cần bỏ qua nó

Như bạn có thể thấy, các hàm cho phép một giải pháp tao nhã và có thể mở rộng, phù hợp với phần còn lại của ngôn ngữ. Trong tiểu mục tiếp theo, bạn sẽ khám phá ra việc không có hàm

root.attributes["-fullscreen", True]
63 gây ra nhiều vấn đề đau đầu như thế nào

in Là một Tuyên bố trong Python 2

Một câu lệnh là một hướng dẫn có thể gây ra tác dụng phụ khi được thực thi nhưng không bao giờ đánh giá thành một giá trị. Nói cách khác, bạn sẽ không thể in một câu lệnh hoặc gán nó cho một biến như thế này

root.attributes["-fullscreen", True]
52

Đó là lỗi cú pháp trong Python 2

Dưới đây là một vài ví dụ khác về câu lệnh trong Python

  • phân công.
    root.attributes["-fullscreen", True]
    
    863
  • có điều kiện.
    root.attributes["-fullscreen", True]
    
    864
  • vòng.
    root.attributes["-fullscreen", True]
    
    865
  • quả quyết.
    root.attributes["-fullscreen", True]
    
    866

Các tuyên bố thường bao gồm các từ khóa dành riêng như

root.attributes["-fullscreen", True]
864,
root.attributes["-fullscreen", True]
868 hoặc
root.attributes["-fullscreen", True]
601 có nghĩa cố định trong ngôn ngữ. Bạn không thể sử dụng chúng để đặt tên cho các biến của mình hoặc các ký hiệu khác. Đó là lý do tại sao không thể xác định lại hoặc chế nhạo câu lệnh
root.attributes["-fullscreen", True]
601 trong Python 2. Bạn bị mắc kẹt với những gì bạn nhận được

Ngoài ra, bạn không thể in từ các hàm ẩn danh vì các câu lệnh không được chấp nhận trong các biểu thức lambda

>>>

root.attributes["-fullscreen", True]
53

Cú pháp của câu lệnh

root.attributes["-fullscreen", True]
601 không rõ ràng. Đôi khi bạn có thể thêm dấu ngoặc đơn xung quanh tin nhắn và chúng hoàn toàn không bắt buộc

>>>

root.attributes["-fullscreen", True]
54

Vào những thời điểm khác, họ thay đổi cách in tin nhắn

>>>

root.attributes["-fullscreen", True]
55

Nối chuỗi có thể tăng

root.attributes["-fullscreen", True]
872 do các loại không tương thích, chẳng hạn như bạn phải xử lý thủ công

>>>

root.attributes["-fullscreen", True]
56

So sánh mã này với mã tương tự trong Python 3, mã này thúc đẩy giải nén trình tự

>>>

root.attributes["-fullscreen", True]
57

Không có bất kỳ đối số từ khóa nào cho các tác vụ phổ biến như xóa bộ đệm hoặc chuyển hướng luồng. Thay vào đó, bạn cần nhớ cú pháp kỳ quặc. Ngay cả hàm

root.attributes["-fullscreen", True]
807 tích hợp cũng không hữu ích đối với câu lệnh
root.attributes["-fullscreen", True]
601

>>>

root.attributes["-fullscreen", True]
58

Loại bỏ dòng mới ở cuối không hoạt động hoàn toàn đúng vì nó thêm một khoảng trống không mong muốn. Bạn không thể soạn nhiều câu lệnh

root.attributes["-fullscreen", True]
601 cùng nhau và trên hết, bạn phải cực kỳ siêng năng về mã hóa ký tự

Danh sách các vấn đề cứ lặp đi lặp lại. Nếu tò mò, bạn có thể quay lại phần trước và tìm kiếm các giải thích chi tiết hơn về cú pháp trong Python 2

Tuy nhiên, bạn có thể giảm thiểu một số vấn đề đó bằng cách tiếp cận đơn giản hơn nhiều. Hóa ra hàm

root.attributes["-fullscreen", True]
63 đã được nhập vào để dễ dàng chuyển sang Python 3. Bạn có thể nhập nó từ một mô-đun
root.attributes["-fullscreen", True]
605 đặc biệt, hiển thị một loạt các tính năng ngôn ngữ được phát hành trong các phiên bản Python sau này

Để bật hàm

root.attributes["-fullscreen", True]
63 trong Python 2, bạn cần thêm câu lệnh nhập này vào đầu mã nguồn của mình

root.attributes["-fullscreen", True]
59

Từ giờ câu lệnh

root.attributes["-fullscreen", True]
601 không còn nữa, nhưng bạn đã có hàm
root.attributes["-fullscreen", True]
63 tùy ý sử dụng. Lưu ý rằng nó không giống chức năng như trong Python 3, vì nó thiếu đối số từ khóa
root.attributes["-fullscreen", True]
698, nhưng các đối số còn lại đều giống nhau

Ngoài ra, nó không giúp bạn quản lý mã hóa ký tự đúng cách

Đây là một ví dụ về cách gọi hàm

root.attributes["-fullscreen", True]
63 trong Python 2

>>>

root.attributes["-fullscreen", True]
00

Bây giờ bạn đã có ý tưởng về cách in bằng Python đã phát triển và quan trọng nhất là hiểu tại sao những thay đổi không tương thích ngược này lại cần thiết. Biết điều này chắc chắn sẽ giúp bạn trở thành một lập trình viên Python giỏi hơn

In ấn theo phong cách

Nếu bạn nghĩ rằng in ấn chỉ là làm sáng các điểm ảnh trên màn hình, thì về mặt kỹ thuật, bạn đã đúng. Tuy nhiên, có nhiều cách để làm cho nó trông thật ngầu. Trong phần này, bạn sẽ tìm hiểu cách định dạng cấu trúc dữ liệu phức tạp, thêm màu sắc và các trang trí khác, xây dựng giao diện, sử dụng hoạt ảnh và thậm chí phát âm thanh với văn bản

Cấu trúc dữ liệu lồng nhau in đẹp

Ngôn ngữ máy tính cho phép bạn biểu diễn dữ liệu cũng như mã thực thi theo cách có cấu trúc. Tuy nhiên, không giống như Python, hầu hết các ngôn ngữ đều cho phép bạn tự do sử dụng khoảng trắng và định dạng. Điều này có thể hữu ích, chẳng hạn như trong quá trình nén, nhưng đôi khi nó dẫn đến mã khó đọc hơn

In đẹp là làm cho một đoạn dữ liệu hoặc mã trông hấp dẫn hơn đối với mắt người để có thể hiểu nó dễ dàng hơn. Điều này được thực hiện bằng cách thụt lề một số dòng nhất định, chèn dòng mới, sắp xếp lại các phần tử, v.v.

Python đi kèm với mô-đun

root.attributes["-fullscreen", True]
883 trong thư viện tiêu chuẩn của nó, mô-đun này sẽ giúp bạn in các cấu trúc dữ liệu lớn đẹp mắt không vừa trên một dòng. Bởi vì nó in theo cách thân thiện với con người hơn, nhiều công cụ REPL phổ biến, bao gồm JupyterLab và IPython, sử dụng nó theo mặc định thay cho hàm
root.attributes["-fullscreen", True]
63 thông thường

Nếu bạn không quan tâm đến việc không có quyền truy cập vào hàm

root.attributes["-fullscreen", True]
63 ban đầu, thì bạn có thể thay thế nó bằng
root.attributes["-fullscreen", True]
886 trong mã của mình bằng cách nhập đổi tên

>>>

root.attributes["-fullscreen", True]
01

Cá nhân tôi muốn có cả hai chức năng trong tầm tay, vì vậy tôi muốn sử dụng một cái gì đó như

root.attributes["-fullscreen", True]
887 làm bí danh ngắn

root.attributes["-fullscreen", True]
02

Thoạt nhìn, hầu như không có bất kỳ sự khác biệt nào giữa hai chức năng và trong một số trường hợp hầu như không có

>>>

root.attributes["-fullscreen", True]
03

Đó là bởi vì

root.attributes["-fullscreen", True]
886 gọi
root.attributes["-fullscreen", True]
824 thay vì
root.attributes["-fullscreen", True]
99 thông thường để truyền kiểu, do đó bạn có thể đánh giá đầu ra của nó dưới dạng mã Python nếu bạn muốn. Sự khác biệt trở nên rõ ràng khi bạn bắt đầu cung cấp cho nó các cấu trúc dữ liệu phức tạp hơn

>>>

root.attributes["-fullscreen", True]
04

Hàm áp dụng định dạng hợp lý để cải thiện khả năng đọc, nhưng bạn có thể tùy chỉnh nó hơn nữa với một vài tham số. Ví dụ: bạn có thể giới hạn cấu trúc phân cấp được lồng sâu bằng cách hiển thị dấu chấm lửng bên dưới một mức nhất định

>>>

root.attributes["-fullscreen", True]
05

root.attributes["-fullscreen", True]
63 thông thường cũng sử dụng dấu chấm lửng nhưng để hiển thị cấu trúc dữ liệu đệ quy, tạo thành một chu trình, để tránh lỗi tràn ngăn xếp

>>>

root.attributes["-fullscreen", True]
06

Tuy nhiên,

root.attributes["-fullscreen", True]
886 rõ ràng hơn về nó bằng cách bao gồm danh tính duy nhất của một đối tượng tự tham chiếu

>>>

root.attributes["-fullscreen", True]
07

Phần tử cuối cùng trong danh sách là cùng một đối tượng với toàn bộ danh sách

root.attributes["-fullscreen", True]
886 tự động sắp xếp các khóa từ điển cho bạn trước khi in, cho phép so sánh nhất quán. Khi bạn đang so sánh các chuỗi, bạn thường không quan tâm đến thứ tự cụ thể của các thuộc tính được tuần tự hóa. Dù sao đi nữa, tốt nhất bạn nên so sánh các từ điển thực tế trước khi đăng nhiều kỳ hơn

Từ điển thường biểu thị dữ liệu JSON, được sử dụng rộng rãi trên Internet. Để tuần tự hóa chính xác một từ điển thành một chuỗi có định dạng JSON hợp lệ, bạn có thể tận dụng mô-đun

root.attributes["-fullscreen", True]
894. Nó cũng có khả năng in đẹp

>>>

root.attributes["-fullscreen", True]
08

Tuy nhiên, xin lưu ý rằng bạn cần tự xử lý việc in, vì đó không phải là việc bạn thường muốn làm. Tương tự, mô-đun

root.attributes["-fullscreen", True]
883 có thêm một hàm
root.attributes["-fullscreen", True]
896 trả về một chuỗi, trong trường hợp bạn phải làm gì đó ngoài việc in nó

Ngạc nhiên thay, chữ ký của

root.attributes["-fullscreen", True]
886 không giống chữ ký của hàm
root.attributes["-fullscreen", True]
63. Bạn thậm chí không thể chuyển nhiều hơn một đối số vị trí, điều này cho thấy mức độ tập trung của nó vào việc in cấu trúc dữ liệu

Thêm màu với chuỗi thoát ANSI

Khi máy tính cá nhân trở nên phức tạp hơn, chúng có đồ họa tốt hơn và có thể hiển thị nhiều màu sắc hơn. Tuy nhiên, các nhà cung cấp khác nhau có ý tưởng riêng về thiết kế API để kiểm soát nó. Điều đó đã thay đổi cách đây vài thập kỷ khi những người ở Viện Tiêu chuẩn Quốc gia Hoa Kỳ quyết định thống nhất nó bằng cách xác định mã thoát ANSI

Hầu hết các trình giả lập thiết bị đầu cuối ngày nay đều hỗ trợ tiêu chuẩn này ở một mức độ nào đó. Cho đến gần đây, hệ điều hành Windows là một ngoại lệ đáng chú ý. Do đó, nếu bạn muốn tính di động tốt nhất, hãy sử dụng thư viện

root.attributes["-fullscreen", True]
899 trong Python. Nó dịch mã ANSI sang các đối tác thích hợp của chúng trong Windows trong khi vẫn giữ chúng nguyên vẹn trong các hệ điều hành khác

Để kiểm tra xem thiết bị đầu cuối của bạn có hiểu một tập hợp con của chuỗi thoát ANSI hay không, chẳng hạn như liên quan đến màu sắc, bạn có thể thử sử dụng lệnh sau

Thiết bị đầu cuối mặc định của tôi trên Linux cho biết nó có thể hiển thị 256 màu riêng biệt, trong khi xterm chỉ cho tôi 8. Lệnh sẽ trả về số âm nếu màu không được hỗ trợ

Chuỗi thoát ANSI giống như một ngôn ngữ đánh dấu cho thiết bị đầu cuối. Trong HTML, bạn làm việc với các thẻ, chẳng hạn như

root.attributes["-fullscreen", True]
900 hoặc
root.attributes["-fullscreen", True]
901, để thay đổi giao diện của các phần tử trong tài liệu. Các thẻ này được trộn lẫn với nội dung của bạn nhưng bản thân chúng không hiển thị. Tương tự, mã thoát sẽ không hiển thị trong thiết bị đầu cuối miễn là nó nhận ra chúng. Nếu không, chúng sẽ xuất hiện ở dạng chữ như thể bạn đang xem mã nguồn của một trang web

Như tên gọi của nó, một chuỗi phải bắt đầu bằng ký tự Esc không in được, có giá trị ASCII là 27, đôi khi được ký hiệu là

root.attributes["-fullscreen", True]
902 . Bạn có thể sử dụng chữ số Python để nhanh chóng xác minh đó thực sự là cùng một số.

>>>

root.attributes["-fullscreen", True]
09

Ngoài ra, bạn có thể lấy nó bằng chuỗi thoát

root.attributes["-fullscreen", True]
904 trong trình bao

Các chuỗi thoát ANSI phổ biến nhất có dạng sau

ElementDescriptionVí dụ Esc ký tự thoát không in được
root.attributes["-fullscreen", True]
905
root.attributes["-fullscreen", True]
906mở dấu ngoặc vuông
root.attributes["-fullscreen", True]
906mã sốmột hoặc nhiều số được phân tách bằng
root.attributes["-fullscreen", True]
908
root.attributes["-fullscreen", True]
909mã ký tự chữ hoa hoặc chữ thường
root.attributes["-fullscreen", True]
910

Mã số có thể là một hoặc nhiều số được phân tách bằng dấu chấm phẩy, trong khi mã ký tự chỉ là một chữ cái. Ý nghĩa cụ thể của chúng được xác định theo tiêu chuẩn ANSI. Ví dụ: để đặt lại tất cả định dạng, bạn sẽ nhập một trong các lệnh sau, sử dụng mã số 0 và chữ cái

root.attributes["-fullscreen", True]
910

root.attributes["-fullscreen", True]
10

Ở đầu kia của quang phổ, bạn có các giá trị mã phức hợp. Để đặt nền trước và nền sau với các kênh RGB, với điều kiện là thiết bị đầu cuối của bạn hỗ trợ độ sâu 24 bit, bạn có thể cung cấp nhiều số

root.attributes["-fullscreen", True]
11

Bạn không chỉ có thể đặt màu văn bản bằng mã thoát ANSI. Ví dụ: bạn có thể xóa và cuộn cửa sổ đầu cuối, thay đổi nền của nó, di chuyển con trỏ xung quanh, làm cho văn bản nhấp nháy hoặc trang trí bằng gạch dưới

Trong Python, bạn có thể viết một hàm trợ giúp để cho phép gói các mã tùy ý thành một chuỗi

>>>

root.attributes["-fullscreen", True]
12

Điều này sẽ làm cho từ

root.attributes["-fullscreen", True]
912 xuất hiện ở phông chữ màu đỏ, in đậm và gạch chân

However, there are higher-level abstractions over ANSI escape codes, such as the mentioned

root.attributes["-fullscreen", True]
899 library, as well as tools for building user interfaces in the console

Xây dựng giao diện người dùng bảng điều khiển

Mặc dù không thể phủ nhận việc chơi với các mã thoát ANSI rất thú vị, nhưng trong thế giới thực, bạn muốn có nhiều khối xây dựng trừu tượng hơn để kết hợp giao diện người dùng. There are a few libraries that provide such a high level of control over the terminal, but

root.attributes["-fullscreen", True]
914 seems to be the most popular choice

Về cơ bản, nó cho phép bạn suy nghĩ về các tiện ích đồ họa độc lập thay vì một khối văn bản. Besides, you get a lot of freedom in expressing your inner artist, because it’s really like painting a blank canvas. Thư viện che giấu sự phức tạp của việc phải xử lý các thiết bị đầu cuối khác nhau. Ngoài ra, nó còn hỗ trợ tuyệt vời cho các sự kiện bàn phím, có thể hữu ích khi viết trò chơi điện tử

Làm thế nào về việc làm một trò chơi rắn cổ điển?

First, you need to import the

root.attributes["-fullscreen", True]
914 module. Since it modifies the state of a running terminal, it’s important to handle errors and gracefully restore the previous state. You can do this manually, but the library comes with a convenient wrapper for your main function

root.attributes["-fullscreen", True]
13

Note, the function must accept a reference to the screen object, also known as

root.attributes["-fullscreen", True]
916, that you’ll use later for additional setup

If you run this program now, you won’t see any effects, because it terminates immediately. However, you can add a small delay to have a sneak peek

root.attributes["-fullscreen", True]
14

This time the screen went completely blank for a second, but the cursor was still blinking. To hide it, just call one of the configuration functions defined in the module

root.attributes["-fullscreen", True]
15

Let’s define the snake as a list of points in screen coordinates

root.attributes["-fullscreen", True]
16

The head of the snake is always the first element in the list, whereas the tail is the last one. The initial shape of the snake is horizontal, starting from the top-left corner of the screen and facing to the right. While its y-coordinate stays at zero, its x-coordinate decreases from head to tail

To draw the snake, you’ll start with the head and then follow with the remaining segments. Each segment carries

root.attributes["-fullscreen", True]
917 coordinates, so you can unpack them

root.attributes["-fullscreen", True]
17

Again, if you run this code now, it won’t display anything, because you must explicitly refresh the screen afterward

root.attributes["-fullscreen", True]
18

You want to move the snake in one of four directions, which can be defined as vectors. Eventually, the direction will change in response to an arrow keystroke, so you may hook it up to the library’s key codes

root.attributes["-fullscreen", True]
19

How does a snake move? It turns out that only its head really moves to a new location, while all other segments shift towards it. In each step, almost all segments remain the same, except for the head and the tail. Assuming the snake isn’t growing, you can remove the tail and insert a new head at the beginning of the list

root.attributes["-fullscreen", True]
20

To get the new coordinates of the head, you need to add the direction vector to it. However, adding tuples in Python results in a bigger tuple instead of the algebraic sum of the corresponding vector components. One way to fix this is by using the built-in

root.attributes["-fullscreen", True]
918,
root.attributes["-fullscreen", True]
919, and
root.attributes["-fullscreen", True]
920 functions

The direction will change on a keystroke, so you need to call

root.attributes["-fullscreen", True]
921 to obtain the pressed key code. However, if the pressed key doesn’t correspond to the arrow keys defined earlier as dictionary keys, the direction won’t change

root.attributes["-fullscreen", True]
21

By default, however,

root.attributes["-fullscreen", True]
921 is a blocking call that would prevent the snake from moving unless there was a keystroke. Therefore, you need to make the call non-blocking by adding yet another configuration

root.attributes["-fullscreen", True]
22

You’re almost done, but there’s just one last thing left. If you now loop this code, the snake will appear to be growing instead of moving. That’s because you have to erase the screen explicitly before each iteration

Finally, this is all you need to play the snake game in Python

root.attributes["-fullscreen", True]
23

This is merely scratching the surface of the possibilities that the

root.attributes["-fullscreen", True]
914 module opens up. You may use it for game development like this or more business-oriented applications

Sống hết mình với những hình ảnh động thú vị

Not only can animations make the user interface more appealing to the eye, but they also improve the overall user experience. When you provide early feedback to the user, for example, they’ll know if your program’s still working or if it’s time to kill it

To animate text in the terminal, you have to be able to freely move the cursor around. You can do this with one of the tools mentioned previously, that is ANSI escape codes or the

root.attributes["-fullscreen", True]
914 library. However, I’d like to show you an even simpler way

If the animation can be constrained to a single line of text, then you might be interested in two special escape character sequences

  • Carriage return.
    root.attributes["-fullscreen", True]
    
    74
  • Backspace.
    root.attributes["-fullscreen", True]
    
    79

The first one moves the cursor to the beginning of the line, whereas the second one moves it only one character to the left. They both work in a non-destructive way without overwriting text that’s already been written

Let’s take a look at a few examples

You’ll often want to display some kind of a spinning wheel to indicate a work in progress without knowing exactly how much time’s left to finish

Many command line tools use this trick while downloading data over the network. You can make a really simple stop motion animation from a sequence of characters that will cycle in a round-robin fashion

root.attributes["-fullscreen", True]
24

The loop gets the next character to print, then moves the cursor to the beginning of the line, and overwrites whatever there was before without adding a newline. You don’t want extra space between positional arguments, so separator argument must be blank. Also, notice the use of Python’s raw strings due to backslash characters present in the literal

When you know the remaining time or task completion percentage, then you’re able to show an animated progress bar

First, you need to calculate how many hashtags to display and how many blank spaces to insert. Next, you erase the line and build the bar from scratch

root.attributes["-fullscreen", True]
25

As before, each request for update repaints the entire line

Tạo âm thanh với print[]

If you’re old enough to remember computers with a PC speaker, then you must also remember their distinctive beep sound, often used to indicate hardware problems. They could barely make any more noises than that, yet video games seemed so much better with it

Today you can still take advantage of this small loudspeaker, but chances are your laptop didn’t come with one. In such a case, you can enable terminal bell emulation in your shell, so that a system warning sound is played instead

Go ahead and type this command to see if your terminal can play a sound

This would normally print text, but the

root.attributes["-fullscreen", True]
927 flag enables the interpretation of backslash escapes. As you can see, there’s a dedicated escape sequence
root.attributes["-fullscreen", True]
928, which stands for “alert”, that outputs a special bell character. Some terminals make a sound whenever they see it

Tương tự, bạn có thể in ký tự này bằng Python. Perhaps in a loop to form some kind of melody. While it’s only a single note, you can still vary the length of pauses between consecutive instances. That seems like a perfect toy for Morse code playback

The rules are the following

  • Letters are encoded with a sequence of dot [·] and dash [–] symbols
  • A dot is one unit of time
  • A dash is three units of time
  • Individual symbols in a letter are spaced one unit of time apart
  • Symbols of two adjacent letters are spaced three units of time apart
  • Symbols of two adjacent words are spaced seven units of time apart

According to those rules, you could be “printing” an SOS signal indefinitely in the following way

root.attributes["-fullscreen", True]
26

In Python, you can implement it in merely ten lines of code

root.attributes["-fullscreen", True]
27

Maybe you could even take it one step further and make a command line tool for translating text into Morse code? Either way, I hope you’re having fun with this

Mocking Python print[] trong Bài kiểm tra đơn vị

Nowadays, it’s expected that you ship code that meets high quality standards. If you aspire to become a professional, you must learn how to test your code

Software testing is especially important in dynamically typed languages, such as Python, which don’t have a compiler to warn you about obvious mistakes. Defects can make their way to the production environment and remain dormant for a long time, until that one day when a branch of code finally gets executed

Sure, you have linters, type checkers, and other tools for static code analysis to assist you. But they won’t tell you whether your program does what it’s supposed to do on the business level

So, should you be testing

root.attributes["-fullscreen", True]
63? No. Xét cho cùng, đó là một chức năng tích hợp sẵn phải trải qua một bộ kiểm tra toàn diện. What you want to test, though, is whether your code is calling
root.attributes["-fullscreen", True]
63 at the right time with the expected parameters. Đó được gọi là một hành vi

You can test behaviors by mocking real objects or functions. In this case, you want to mock

root.attributes["-fullscreen", True]
63 to record and verify its invocations

Mocking in Python can be done twofold. First, you can take the traditional path of statically-typed languages by employing dependency injection. This may sometimes require you to change the code under test, which isn’t always possible if the code is defined in an external library

root.attributes["-fullscreen", True]
28

This is the same example I used in an earlier section to talk about function composition. Về cơ bản, nó cho phép thay thế

root.attributes["-fullscreen", True]
63 bằng một chức năng tùy chỉnh của cùng một giao diện. Để kiểm tra xem nó có in đúng thông báo hay không, bạn phải chặn nó bằng cách đưa vào một hàm giả lập

>>>

root.attributes["-fullscreen", True]
29

Gọi mô hình này làm cho nó lưu thông báo cuối cùng trong một thuộc tính mà bạn có thể kiểm tra sau này, chẳng hạn như trong câu lệnh

root.attributes["-fullscreen", True]
866

Trong một giải pháp hơi thay thế, thay vì thay thế toàn bộ hàm

root.attributes["-fullscreen", True]
63 bằng một trình bao bọc tùy chỉnh, bạn có thể chuyển hướng đầu ra tiêu chuẩn sang luồng ký tự giống như tệp trong bộ nhớ

>>>

root.attributes["-fullscreen", True]
30

Lần này, hàm gọi rõ ràng là

root.attributes["-fullscreen", True]
63, nhưng nó để lộ tham số
root.attributes["-fullscreen", True]
679 của nó ra thế giới bên ngoài

Tuy nhiên, một cách mô phỏng các đối tượng Pythonic hơn tận dụng mô-đun

root.attributes["-fullscreen", True]
937 tích hợp, sử dụng một kỹ thuật gọi là vá khỉ. Cái tên xúc phạm này bắt nguồn từ việc nó là một "mánh khóe bẩn thỉu" mà bạn có thể dễ dàng tự bắn vào chân mình. Nó kém thanh lịch hơn so với tiêm phụ thuộc nhưng chắc chắn nhanh chóng và tiện lợi

Bản vá khỉ làm gì là thay đổi triển khai một cách linh hoạt trong thời gian chạy. Một thay đổi như vậy có thể nhìn thấy trên toàn cầu, vì vậy nó có thể gây ra những hậu quả không mong muốn. Tuy nhiên, trên thực tế, việc vá lỗi chỉ ảnh hưởng đến mã trong thời gian thực hiện kiểm tra

Để mô phỏng

root.attributes["-fullscreen", True]
63 trong một trường hợp thử nghiệm, thông thường bạn sẽ sử dụng trình trang trí
root.attributes["-fullscreen", True]
939 và chỉ định mục tiêu để vá bằng cách tham chiếu đến nó bằng một tên đủ điều kiện, bao gồm tên mô-đun

root.attributes["-fullscreen", True]
31

Điều này sẽ tự động tạo mô hình cho bạn và đưa nó vào chức năng kiểm tra. Tuy nhiên, bạn cần khai báo rằng chức năng kiểm tra của bạn chấp nhận mô hình ngay bây giờ. Đối tượng mô phỏng bên dưới có rất nhiều phương thức và thuộc tính hữu ích để xác minh hành vi

Bạn có nhận thấy điều gì đặc biệt về đoạn mã đó không?

Mặc dù đã thêm một hàm giả vào hàm, nhưng bạn không gọi nó trực tiếp, mặc dù bạn có thể. Mô hình được đưa vào đó chỉ được sử dụng để đưa ra các xác nhận sau đó và có thể để chuẩn bị bối cảnh trước khi chạy thử nghiệm

Trong cuộc sống thực, chế nhạo giúp cô lập mã đang kiểm tra bằng cách loại bỏ các phụ thuộc như kết nối cơ sở dữ liệu. Bạn hiếm khi gọi các bản giả trong một bài kiểm tra, vì điều đó không có nhiều ý nghĩa. Thay vào đó, đó là những đoạn mã khác gián tiếp gọi mô hình của bạn mà bạn không biết

Đây là ý nghĩa của nó

root.attributes["-fullscreen", True]
32

Mã đang kiểm tra là một chức năng in lời chào. Mặc dù đây là một chức năng khá đơn giản, nhưng bạn không thể dễ dàng kiểm tra nó vì nó không trả về giá trị. Nó có tác dụng phụ

Để loại bỏ tác dụng phụ đó, bạn cần loại bỏ sự phụ thuộc. Bản vá cho phép bạn tránh thực hiện các thay đổi đối với chức năng ban đầu, điều này có thể vẫn là bất khả tri về

root.attributes["-fullscreen", True]
63. Nó nghĩ rằng nó đang gọi
root.attributes["-fullscreen", True]
63, nhưng trên thực tế, nó đang gọi một kẻ giả mạo mà bạn có toàn quyền kiểm soát

Có nhiều lý do để kiểm thử phần mềm. Một trong số họ đang tìm kiếm lỗi. Ví dụ, khi bạn viết bài kiểm tra, bạn thường muốn loại bỏ hàm

root.attributes["-fullscreen", True]
63 bằng cách chế nhạo nó. Tuy nhiên, nghịch lý thay, chính chức năng đó có thể giúp bạn tìm lỗi trong quá trình gỡ lỗi có liên quan mà bạn sẽ đọc trong phần tiếp theo

Bạn không thể vá lỗi câu lệnh

root.attributes["-fullscreen", True]
601 trong Python 2, bạn cũng không thể đưa nó vào làm phụ thuộc. Tuy nhiên, bạn có một vài lựa chọn khác

  • Sử dụng chuyển hướng luồng
  • Vá đầu ra tiêu chuẩn được xác định trong mô-đun
    root.attributes["-fullscreen", True]
    
    656
  • Nhập
    root.attributes["-fullscreen", True]
    
    63 từ mô-đun
    root.attributes["-fullscreen", True]
    
    605

Hãy kiểm tra từng cái một

Chuyển hướng luồng gần giống với ví dụ bạn đã thấy trước đó

>>>

root.attributes["-fullscreen", True]
33

Chỉ có hai sự khác biệt. Đầu tiên, cú pháp chuyển hướng luồng sử dụng chevron [

root.attributes["-fullscreen", True]
947] thay vì đối số
root.attributes["-fullscreen", True]
679. Sự khác biệt khác là nơi
root.attributes["-fullscreen", True]
949 được xác định. Bạn có thể nhập nó từ mô-đun
root.attributes["-fullscreen", True]
949 có tên tương tự hoặc
root.attributes["-fullscreen", True]
951 để triển khai nhanh hơn

Vá đầu ra tiêu chuẩn từ mô-đun

root.attributes["-fullscreen", True]
656 đúng như tên gọi của nó, nhưng bạn cần lưu ý một số vấn đề

root.attributes["-fullscreen", True]
34

Trước hết, hãy nhớ cài đặt mô-đun

root.attributes["-fullscreen", True]
937 vì nó không có sẵn trong thư viện chuẩn của Python 2

Thứ hai, câu lệnh

root.attributes["-fullscreen", True]
601 gọi phương thức
root.attributes["-fullscreen", True]
676 cơ bản trên đối tượng giả định thay vì gọi chính đối tượng đó. Đó là lý do tại sao bạn sẽ chạy các xác nhận đối với
root.attributes["-fullscreen", True]
956

Cuối cùng, một câu lệnh

root.attributes["-fullscreen", True]
601 không phải lúc nào cũng tương ứng với một lệnh gọi tới
root.attributes["-fullscreen", True]
958. Trên thực tế, bạn sẽ thấy ký tự xuống dòng được viết riêng

Tùy chọn cuối cùng bạn có là nhập

root.attributes["-fullscreen", True]
63 từ
root.attributes["-fullscreen", True]
960 và vá nó

root.attributes["-fullscreen", True]
35

Một lần nữa, nó gần giống với Python 3, nhưng hàm

root.attributes["-fullscreen", True]
63 được định nghĩa trong mô-đun
root.attributes["-fullscreen", True]
962 thay vì
root.attributes["-fullscreen", True]
963

in [] Gỡ lỗi

Trong phần này, bạn sẽ xem xét các công cụ có sẵn để gỡ lỗi trong Python, bắt đầu từ một hàm khiêm tốn

root.attributes["-fullscreen", True]
63, thông qua mô-đun
root.attributes["-fullscreen", True]
965, đến một trình gỡ lỗi chính thức. Sau khi đọc nó, bạn sẽ có thể đưa ra quyết định sáng suốt về cách nào phù hợp nhất trong một tình huống nhất định

truy tìm

Còn được gọi là gỡ lỗi in hoặc gỡ lỗi thượng cổ, đây là hình thức gỡ lỗi cơ bản nhất. Mặc dù hơi lỗi thời nhưng nó vẫn mạnh mẽ và có công dụng của nó

Ý tưởng là đi theo đường dẫn thực hiện chương trình cho đến khi chương trình dừng đột ngột hoặc đưa ra kết quả không chính xác để xác định chính xác lệnh có vấn đề. Bạn làm điều đó bằng cách chèn các câu lệnh in với các từ nổi bật ở những nơi được lựa chọn cẩn thận

Hãy xem ví dụ này, biểu hiện lỗi làm tròn

>>>

root.attributes["-fullscreen", True]
36

Như bạn có thể thấy, hàm này không trả về giá trị mong đợi của

root.attributes["-fullscreen", True]
966, nhưng bây giờ bạn biết điều đó bởi vì tổng hơi sai. Theo dõi trạng thái của các biến ở các bước khác nhau của thuật toán có thể cho bạn gợi ý về vấn đề

Trong trường hợp này, vấn đề nằm ở chỗ số dấu phẩy động được biểu diễn như thế nào trong bộ nhớ máy tính. Hãy nhớ rằng các số được lưu trữ ở dạng nhị phân. Giá trị thập phân của

root.attributes["-fullscreen", True]
966 hóa ra có dạng biểu diễn nhị phân vô hạn, được làm tròn

Để biết thêm thông tin về cách làm tròn số trong Python, bạn có thể xem Cách làm tròn số trong Python

Phương pháp này đơn giản, trực quan và sẽ hoạt động với hầu hết mọi ngôn ngữ lập trình hiện có. Chưa kể, đó là một bài tập tuyệt vời trong quá trình học tập

Mặt khác, một khi bạn nắm vững các kỹ thuật nâng cao hơn, thì rất khó để quay lại, vì chúng cho phép bạn tìm lỗi nhanh hơn nhiều. Truy tìm là một quy trình thủ công tốn nhiều công sức, có thể để lọt nhiều lỗi hơn nữa. Chu kỳ xây dựng và triển khai cần có thời gian. Afterward, you need to remember to meticulously remove all the

root.attributes["-fullscreen", True]
63 calls you made without accidentally touching the genuine ones

Besides, it requires you to make changes in the code, which isn’t always possible. Maybe you’re debugging an application running in a remote web server or want to diagnose a problem in a post-mortem fashion. Sometimes you simply don’t have access to the standard output

That’s precisely where logging shines

Logging

Let’s pretend for a minute that you’re running an e-commerce website. One day, an angry customer makes a phone call complaining about a failed transaction and saying he lost his money. He claims to have tried purchasing a few items, but in the end, there was some cryptic error that prevented him from finishing that order. Yet, when he checked his bank account, the money was gone

You apologize sincerely and make a refund, but also don’t want this to happen again in the future. How do you debug that? If only you had some trace of what happened, ideally in the form of a chronological list of events with their context

Whenever you find yourself doing print debugging, consider turning it into permanent log messages. This may help in situations like this, when you need to analyze a problem after it happened, in an environment that you don’t have access to

There are sophisticated tools for log aggregation and searching, but at the most basic level, you can think of logs as text files. Each line conveys detailed information about an event in your system. Usually, it won’t contain personally identifying information, though, in some cases, it may be mandated by law

Here’s a breakdown of a typical log record

root.attributes["-fullscreen", True]
37

As you can see, it has a structured form. Apart from a descriptive message, there are a few customizable fields, which provide the context of an event. Here, you have the exact date and time, the log level, the logger name, and the thread name

Log levels allow you to filter messages quickly to reduce noise. Ví dụ: nếu bạn đang tìm lỗi, bạn không muốn xem tất cả các cảnh báo hoặc thông báo gỡ lỗi. It’s trivial to disable or enable messages at certain log levels through the configuration, without even touching the code

With logging, you can keep your debug messages separate from the standard output. All the log messages go to the standard error stream by default, which can conveniently show up in different colors. However, you can redirect log messages to separate files, even for individual modules

Quite commonly, misconfigured logging can lead to running out of space on the server’s disk. To prevent that, you may set up log rotation, which will keep the log files for a specified duration, such as one week, or once they hit a certain size. Tuy nhiên, lưu trữ các nhật ký cũ hơn luôn là một cách thực hành tốt. Some regulations enforce that customer data be kept for as long as five years

Compared to other programming languages, logging in Python is simpler, because the

root.attributes["-fullscreen", True]
965 module is bundled with the standard library. You just import and configure it in as little as two lines of code

root.attributes["-fullscreen", True]
38

Bạn có thể gọi các hàm được xác định ở cấp độ mô-đun, được nối với trình ghi nhật ký gốc, nhưng thực tế phổ biến hơn là lấy một trình ghi nhật ký chuyên dụng cho từng tệp nguồn của bạn

root.attributes["-fullscreen", True]
39

Ưu điểm của việc sử dụng trình ghi nhật ký tùy chỉnh là kiểm soát chi tiết hơn. Chúng thường được đặt tên theo mô-đun mà chúng được xác định thông qua biến

root.attributes["-fullscreen", True]
970

Một lý do cuối cùng để chuyển từ chức năng

root.attributes["-fullscreen", True]
63 sang ghi nhật ký là sự an toàn của luồng. Trong phần sắp tới, bạn sẽ thấy rằng phần trước không hoạt động tốt với nhiều luồng thực thi

gỡ lỗi

Sự thật là cả truy tìm và ghi nhật ký đều không thể được coi là gỡ lỗi thực sự. Để thực hiện gỡ lỗi thực tế, bạn cần một công cụ gỡ lỗi, cho phép bạn thực hiện các thao tác sau

  • Bước qua mã một cách tương tác
  • Đặt điểm ngắt, bao gồm cả điểm dừng có điều kiện
  • Các biến nội quan trong bộ nhớ
  • Đánh giá các biểu thức tùy chỉnh trong thời gian chạy

Trình gỡ lỗi thô chạy trong thiết bị đầu cuối, không có gì ngạc nhiên khi được đặt tên là

root.attributes["-fullscreen", True]
972 cho “Trình gỡ lỗi Python”, được phân phối như một phần của thư viện chuẩn. Điều này làm cho nó luôn khả dụng, vì vậy nó có thể là lựa chọn duy nhất của bạn để thực hiện gỡ lỗi từ xa. Có lẽ đó là một lý do tốt để làm quen với nó

Tuy nhiên, nó không đi kèm với giao diện đồ họa nên việc sử dụng

root.attributes["-fullscreen", True]
972 có thể hơi phức tạp. Nếu bạn không thể chỉnh sửa mã, bạn phải chạy mã đó dưới dạng mô-đun và chuyển vị trí tập lệnh của bạn

root.attributes["-fullscreen", True]
40

Nếu không, bạn có thể thiết lập một điểm ngắt trực tiếp trong mã, điểm dừng này sẽ tạm dừng việc thực thi tập lệnh của bạn và đưa bạn vào trình gỡ lỗi. Cách cũ để làm điều này cần hai bước

>>>

root.attributes["-fullscreen", True]
41

Thao tác này sẽ hiển thị lời nhắc tương tác, thoạt nhìn có vẻ đáng sợ. Tuy nhiên, bạn vẫn có thể nhập Python nguyên gốc vào thời điểm này để kiểm tra hoặc sửa đổi trạng thái của các biến cục bộ. Ngoài ra, thực sự chỉ có một số lệnh dành riêng cho trình gỡ lỗi mà bạn muốn sử dụng để xem qua mã

Kể từ Python 3. 7, bạn cũng có thể gọi hàm

root.attributes["-fullscreen", True]
974 tích hợp sẵn, hàm này thực hiện tương tự nhưng theo cách nhỏ gọn hơn và có thêm một số chuông và còi

root.attributes["-fullscreen", True]
42

Hầu hết các phần có thể bạn sẽ sử dụng trình gỡ lỗi trực quan được tích hợp với trình chỉnh sửa mã. PyCharm có một trình gỡ lỗi tuyệt vời, tự hào có hiệu suất cao, nhưng bạn sẽ tìm thấy nhiều IDE thay thế có trình gỡ lỗi, cả trả phí và miễn phí

Gỡ lỗi không phải là viên đạn bạc thành ngữ. Đôi khi ghi nhật ký hoặc theo dõi sẽ là một giải pháp tốt hơn. Ví dụ: các lỗi khó tái tạo, chẳng hạn như điều kiện chủng tộc, thường là do khớp nối thời gian. Khi bạn dừng tại một điểm dừng, việc tạm dừng nhỏ đó trong quá trình thực thi chương trình có thể che dấu sự cố. Nó giống như nguyên tắc Heisenberg. bạn không thể đo lường và quan sát lỗi cùng một lúc

Các phương pháp này không loại trừ lẫn nhau. Họ bổ sung cho nhau

In chỉ an toàn

Trước đây, tôi đã đề cập sơ qua về vấn đề an toàn luồng, khuyến nghị sử dụng

root.attributes["-fullscreen", True]
965 thay vì chức năng
root.attributes["-fullscreen", True]
63. Nếu bạn vẫn đang đọc điều này, thì bạn phải cảm thấy thoải mái với khái niệm chủ đề

An toàn luồng có nghĩa là một đoạn mã có thể được chia sẻ an toàn giữa nhiều luồng thực thi. Chiến lược đơn giản nhất để đảm bảo an toàn luồng là chỉ chia sẻ các đối tượng bất biến. Nếu các luồng không thể sửa đổi trạng thái của một đối tượng, thì sẽ không có nguy cơ phá vỡ tính nhất quán của nó

Một phương pháp khác tận dụng bộ nhớ cục bộ, làm cho mỗi luồng nhận bản sao của cùng một đối tượng. Bằng cách đó, các luồng khác không thể thấy các thay đổi được thực hiện đối với luồng đó trong luồng hiện tại

Nhưng điều đó không giải quyết được vấn đề, phải không? . Cách phổ biến nhất để đồng bộ hóa quyền truy cập đồng thời vào một tài nguyên như vậy là khóa nó. Điều này cho phép truy cập ghi độc quyền vào một hoặc đôi khi một vài luồng tại một thời điểm

Tuy nhiên, khóa đắt tiền và làm giảm thông lượng đồng thời, vì vậy các phương tiện khác để kiểm soát quyền truy cập đã được phát minh, chẳng hạn như các biến nguyên tử hoặc thuật toán so sánh và hoán đổi

In không an toàn theo luồng trong Python. Hàm

root.attributes["-fullscreen", True]
63 giữ tham chiếu đến đầu ra tiêu chuẩn, là biến toàn cục được chia sẻ. Về lý thuyết, do không có khóa nên việc chuyển đổi ngữ cảnh có thể xảy ra trong khi gọi đến
root.attributes["-fullscreen", True]
958, đan xen các đoạn văn bản từ nhiều cuộc gọi
root.attributes["-fullscreen", True]
63

Tuy nhiên, trong thực tế, điều đó không xảy ra. Cho dù bạn có cố gắng thế nào, việc ghi vào đầu ra tiêu chuẩn dường như là nguyên tử. Vấn đề duy nhất mà đôi khi bạn có thể quan sát thấy là việc ngắt dòng bị lộn xộn

root.attributes["-fullscreen", True]
43

Để mô phỏng điều này, bạn có thể tăng khả năng chuyển đổi ngữ cảnh bằng cách đặt phương thức

root.attributes["-fullscreen", True]
676 cơ bản ở chế độ ngủ trong một khoảng thời gian ngẫu nhiên. Thế nào?

root.attributes["-fullscreen", True]
44

Trước tiên, bạn cần lưu trữ phương thức gốc

root.attributes["-fullscreen", True]
676 trong một biến mà bạn sẽ ủy thác sau này. Sau đó, bạn cung cấp triển khai giả của mình, sẽ mất tối đa một giây để thực thi. Mỗi luồng sẽ thực hiện một vài cuộc gọi
root.attributes["-fullscreen", True]
63 với tên và một chữ cái. A, B và C

Nếu bạn đã đọc phần mô phỏng trước đó, thì bạn có thể đã biết tại sao việc in lại hoạt động sai như vậy. Tuy nhiên, để làm cho nó rõ ràng, bạn có thể nắm bắt các giá trị được đưa vào hàm

root.attributes["-fullscreen", True]
983 của mình. Bạn sẽ nhận thấy rằng bạn nhận được một trình tự hơi khác mỗi lần

root.attributes["-fullscreen", True]
45

Mặc dù bản thân

root.attributes["-fullscreen", True]
958 là một phép toán nguyên tử, nhưng một lần gọi hàm
root.attributes["-fullscreen", True]
63 có thể mang lại nhiều hơn một lần ghi. Ví dụ: ngắt dòng được viết riêng biệt với phần còn lại của văn bản và chuyển đổi ngữ cảnh diễn ra giữa các lần viết đó

Bạn có thể làm cho ký tự xuống dòng trở thành một phần không thể thiếu của tin nhắn bằng cách xử lý thủ công

root.attributes["-fullscreen", True]
46

Điều này sẽ khắc phục đầu ra

root.attributes["-fullscreen", True]
47

Tuy nhiên, lưu ý rằng hàm

root.attributes["-fullscreen", True]
63 vẫn tiếp tục thực hiện lệnh gọi riêng cho hậu tố trống, điều này chuyển thành lệnh
root.attributes["-fullscreen", True]
987 vô dụng

root.attributes["-fullscreen", True]
48

Một phiên bản thực sự an toàn cho luồng của hàm

root.attributes["-fullscreen", True]
63 có thể trông như thế này

root.attributes["-fullscreen", True]
49

Bạn có thể đặt chức năng đó trong một mô-đun và nhập nó vào nơi khác

root.attributes["-fullscreen", True]
50

Bây giờ, mặc dù thực hiện hai lần ghi cho mỗi yêu cầu

root.attributes["-fullscreen", True]
63, nhưng chỉ một luồng được phép tương tác với luồng, trong khi phần còn lại phải đợi

root.attributes["-fullscreen", True]
51

Tôi đã thêm nhận xét để cho biết khóa đang giới hạn quyền truy cập vào tài nguyên được chia sẻ như thế nào

Ngược lại, mô-đun

root.attributes["-fullscreen", True]
965 được thiết kế an toàn cho luồng, được phản ánh bởi khả năng hiển thị tên luồng trong thông báo được định dạng

>>>

root.attributes["-fullscreen", True]
52

Đó là một lý do khác khiến bạn có thể không muốn sử dụng hàm

root.attributes["-fullscreen", True]
63 mọi lúc

Đối tác in Python

Đến bây giờ, bạn đã biết rất nhiều điều cần biết về

root.attributes["-fullscreen", True]
63. Tuy nhiên, chủ đề sẽ không hoàn chỉnh nếu không nói một chút về các đối tác của nó. Trong khi
root.attributes["-fullscreen", True]
63 là về đầu ra, thì có các hàm và thư viện cho đầu vào

Được xây dựng trong

Python đi kèm với một chức năng tích hợp sẵn để chấp nhận đầu vào từ người dùng, được gọi là

root.attributes["-fullscreen", True]
994. Nó chấp nhận dữ liệu từ luồng đầu vào tiêu chuẩn, thường là bàn phím

>>>

root.attributes["-fullscreen", True]
53

Hàm luôn trả về một chuỗi, vì vậy bạn có thể cần phân tích cú pháp cho phù hợp

root.attributes["-fullscreen", True]
54

Tham số dấu nhắc là hoàn toàn tùy chọn, vì vậy sẽ không có gì hiển thị nếu bạn bỏ qua nó, nhưng chức năng vẫn hoạt động

>>>

root.attributes["-fullscreen", True]
55

Tuy nhiên, việc đưa ra lời kêu gọi hành động mang tính mô tả giúp trải nghiệm người dùng tốt hơn rất nhiều

Yêu cầu người dùng nhập mật khẩu bằng

root.attributes["-fullscreen", True]
994 là một ý tưởng tồi vì nó sẽ hiển thị ở dạng văn bản gốc khi họ nhập mật khẩu. Trong trường hợp này, bạn nên sử dụng hàm
root.attributes["-fullscreen", True]
996 để che các ký tự đã nhập. Chức năng này được định nghĩa trong một mô-đun có cùng tên, cũng có sẵn trong thư viện tiêu chuẩn

>>>

root.attributes["-fullscreen", True]
56

Mô-đun

root.attributes["-fullscreen", True]
997 có một chức năng khác để lấy tên người dùng từ một biến môi trường

>>>

root.attributes["-fullscreen", True]
57

Các hàm tích hợp của Python để xử lý đầu vào tiêu chuẩn khá hạn chế. Đồng thời, có rất nhiều gói của bên thứ ba cung cấp các công cụ tinh vi hơn nhiều

bên thứ ba

Có các gói Python bên ngoài cho phép xây dựng các giao diện đồ họa phức tạp đặc biệt để thu thập dữ liệu từ người dùng. Một số tính năng của họ bao gồm

  • Định dạng và kiểu dáng nâng cao
  • Tự động phân tích cú pháp, xác thực và vệ sinh dữ liệu người dùng
  • Một phong cách khai báo xác định bố cục
  • Tự động hoàn thành tương tác
  • hỗ trợ chuột
  • Các vật dụng được xác định trước như danh sách kiểm tra hoặc menu
  • Lịch sử có thể tìm kiếm của các lệnh đã nhập
  • Đánh dấu cú pháp

Trình diễn các công cụ như vậy nằm ngoài phạm vi của bài viết này, nhưng bạn có thể muốn dùng thử chúng. Cá nhân tôi đã biết về một số trong số đó thông qua Python Bytes Podcast. Họ đây rồi

  • root.attributes["-fullscreen", True]
    
    998
  • root.attributes["-fullscreen", True]
    
    999
  • root.attributes["-fullscreen", True]
    
    700
  • root.attributes["-fullscreen", True]
    
    701

Tuy nhiên, điều đáng nói là một công cụ dòng lệnh có tên là

root.attributes["-fullscreen", True]
702 bổ sung miễn phí khả năng chỉnh sửa dòng mạnh mẽ cho các tập lệnh Python của bạn. Bạn không phải làm bất cứ điều gì để nó hoạt động

Giả sử bạn đã viết một giao diện dòng lệnh hiểu ba hướng dẫn, bao gồm một hướng dẫn để thêm số

root.attributes["-fullscreen", True]
58

Thoạt nhìn, nó giống như một lời nhắc điển hình khi bạn chạy nó

root.attributes["-fullscreen", True]
59

Nhưng ngay khi bạn mắc lỗi và muốn sửa nó, bạn sẽ thấy không có phím chức năng nào hoạt động như mong muốn. Ví dụ: nhấn vào mũi tên Trái sẽ dẫn đến điều này thay vì di chuyển con trỏ trở lại.

root.attributes["-fullscreen", True]
60

Bây giờ, bạn có thể gói cùng một tập lệnh bằng lệnh

root.attributes["-fullscreen", True]
702. Bạn không chỉ làm cho các phím mũi tên hoạt động mà còn có thể tìm kiếm trong lịch sử liên tục của các lệnh tùy chỉnh của mình, sử dụng tính năng tự động hoàn thành và chỉnh sửa dòng bằng phím tắt

root.attributes["-fullscreen", True]
61

Điều đó không tuyệt sao?

Phần kết luận

Bây giờ bạn đã được trang bị một lượng kiến ​​thức về hàm

root.attributes["-fullscreen", True]
63 trong Python, cũng như nhiều chủ đề xung quanh. Bạn hiểu sâu về nó là gì và nó hoạt động như thế nào, liên quan đến tất cả các yếu tố chính của nó. Nhiều ví dụ đã cho bạn cái nhìn sâu sắc về sự phát triển của nó từ Python 2

Ngoài ra, bạn đã học cách

  • Tránh những lỗi phổ biến với
    root.attributes["-fullscreen", True]
    
    63 trong Python
  • Xử lý các dòng mới, mã hóa ký tự và bộ đệm
  • Viết văn bản vào tập tin
  • Giả lập chức năng
    root.attributes["-fullscreen", True]
    
    63 trong các bài kiểm tra đơn vị
  • Xây dựng giao diện người dùng nâng cao trong thiết bị đầu cuối

Bây giờ bạn đã biết tất cả những điều này, bạn có thể tạo các chương trình tương tác giao tiếp với người dùng hoặc tạo dữ liệu ở các định dạng tệp phổ biến. Bạn có thể nhanh chóng chẩn đoán các sự cố trong mã của mình và tự bảo vệ mình khỏi chúng. Cuối cùng nhưng không kém phần quan trọng, bạn biết cách thực hiện trò chơi rắn cổ điển

Nếu bạn vẫn khao khát biết thêm thông tin, có câu hỏi hoặc chỉ đơn giản là muốn chia sẻ suy nghĩ của mình, thì hãy liên hệ trong phần bình luận bên dưới

Lệnh Python nào dùng để xuất văn bản ra màn hình?

Python print[] .

Từ khóa trong Python để hiển thị bất kỳ đầu ra nào trên màn hình là gì?

Đầu ra Python . Trong đoạn mã trên, hàm print[] đang lấy một tham số duy nhất. Ở đây, đối tượng - [các] giá trị sẽ được in. print[] function displays the string enclosed inside the single quotation. In the above code, the print[] function is taking a single parameter. Here, object - value[s] to be printed.

Cách chính xác để xuất văn bản trong Python là gì?

Cách cơ bản để thực hiện đầu ra là câu lệnh in . Để kết thúc dòng in bằng một dòng mới, hãy thêm câu lệnh in không có bất kỳ đối tượng nào.

Hàm Python nào được sử dụng để hiển thị vào thiết bị đầu ra?

Python print[] in đối tượng đã cho trên màn hình hoặc các thiết bị đầu ra tiêu chuẩn khác.

Chủ Đề