Hướng dẫn what is print (\ r ) in python? - print (\ r) trong python là gì?

Tôi đã thực hiện một trình tải xuống:

Show
#!/usr/bin/env python
#-*- coding:utf-8 -*-

from __future__ import print_function, division, absolute_import, unicode_literals
import os
import argparse
try:
    from urllib2 import urlopen
except ImportError:
    from urllib.request import urlopen

# {{ Argument parser
parser = argparse.ArgumentParser(
    prog='downloader',
    description='a featureful downloader'
)

parser.add_argument(
    '-o',
    dest='outputfile'
)

parser.add_argument(
    '-r',
    dest='remotefile'
)

downloader = parser.parse_args()
# }}

# {{ default local filename
if downloader.outputfile:
    default_output_file = downloader.outputfile
else:
    default_output_file = os.path.split(downloader.remotefile)[-1]
# }}

u = urlopen(downloader.remotefile)
meta = u.info()
file_size  = int(dict(meta.items())['Content-Length'])
print("Downloading: %s Bytes: %s" % (default_output_file, file_size))

with open(default_output_file, 'wb') as f:
    file_size_dl = 0
    block_sz = 8192
    while True:
        buffer = u.read(block_sz)
        if not buffer:
            break

        file_size_dl += len(buffer)
        f.write(buffer)
        status = r"%10d  [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)
        status = status + chr(8)*(len(status)+1)
        print(status)

Một mẫu chạy của tập lệnh này sẽ là:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso

Và đầu ra mẫu sẽ là:

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]

Lưu ý rằng khi vòng lặp đi, đầu ra được in trên một dòng riêng biệt. Tôi biết tôi có thể sử dụng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
63 (trả lại vận chuyển) để làm điều đó. Nhưng tôi có sự nhầm lẫn ở đâu và làm thế nào để sử dụng nó.

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để làm sâu sắc thêm sự hiểu biết của bạn: hàm python in (): vượt xa những điều cơ bản This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: The Python print() Function: Go Beyond the Basics

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ề

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64. Nó đã giúp bạn viết
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
65 One-Liner 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 lê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, tất cả những gì cần biết về chức năng Python, ____164, thì bạn đã bỏ lỡ rất nhiều!

Hãy đọ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 tăng tốc với việc sử dụng Python

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 một cách hiệu quả. Tuy nhiên, chuẩn bị cho một lần lặn sâu khi bạn đi qua các phần. Bạn có thể ngạc nhiên khi cung cấp bao nhiêu
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64!

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

  • Tránh những sai lầm phổ biến với Python từ
    python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    64
  • Đối phó với Newlines, mã hóa nhân vật và bộ đệm
  • Viết văn bản vào các tệp
  • Mock
    python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    64 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

Nếu bạn là một người mới bắt đầu hoàn chỉnh, thì bạn sẽ được hưởng lợi nhiều nhất từ ​​việc đọc phần đầu tiên của hướng dẫn này, minh họa các yếu tố cần thiết của việc in ấn trong Python. Nếu không, hãy thoải mái 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 để nhảy vào bằng cách nhìn vào một vài ví dụ thực tế về in ấn trong Python. Đến cuối phần này, bạn sẽ biết mọi cách có thể gọi

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64. Hoặc, trong Lingo Lingo, bạn nói rằng bạn sẽ quen thuộc với chữ ký chức năng.function signature.

Gọi python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso 64

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 chỉ yêu cầu một vài tổ hợp phím:

Bạn không vượt qua bất kỳ đối số nào, nhưng bạn vẫn cần đặt dấu ngoặc đơn ở cuối, điều này bảo Python thực sự thực hiện chức năng thay vì chỉ đề cập đến nó bằng tên.

Điều này sẽ tạo ra một ký tự mới vô hình, từ đó 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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 nhiều lần như thế này để thêm không gian dọc. Nó giống như thể bạn đã nhấn enter trên bàn phím của mình trong một trình xử lý văn bản.Enter on your keyboard in a word processor.

Một ký tự mới là một ký tự điều khiển đặc biệt được sử dụng để chỉ ra phần cuối của một dòng (EOL). Nó thường không có một biểu diễn rõ ràng trên màn hình, nhưng một số trình chỉnh sửa văn bản có thể hiển thị các ký tự không thể in như vậy với ít đồ họa.newline character is a special control character used to indicate the end of a line (EOL). It usually doesn’t have a visible representation on the screen, but some text editors can display such non-printable characters with little graphics.

Từ ngữ nhân vật có phần của một người hiểu 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, đại diện cho Newlines với 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 thực sự di động.

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
75 tích hợp 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 chuỗi

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
63 theo sau là
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
77:Windows and DOS represent the newline as a sequence of
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
63 followed by
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
77:

>>>

>>> import os
>>> os.linesep
'\r\n'

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
77 duy nhất:Unix, Linux, and recent versions of macOS, it’s a single
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
77 character:

>>>

>>> import os
>>> os.linesep
'\n'

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
77 duy nhất:Mac OS X, however, sticks to its own “think different” philosophy by choosing yet another representation:

>>>

>>> import os
>>> os.linesep
'\r'

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
77 duy nhất:escape character sequence. Such sequences allow for representing control characters, which would be otherwise invisible on screen.

Tuy nhiên, Mac OS X cổ điển gắn bó với triết lý của riêng mình về vấn đề khác nhau bằng cách chọn một đại diện khác:

  • python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    80: Backslash
    backslash
  • python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    81: Backspace
    backspace
  • python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    82: Tab
    tab
  • python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    63: Trở về vận chuyển (CR)
    carriage return (CR)
  • python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    77: Newline, còn được gọi là Line Feed (LF)
    newline, also known as line feed (LF)

Hai phần cuối gợi nhớ đến các 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ẽ tiến lê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 một dấu gạch chéo ngược trước một ký tự 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ỉ là những người đặc biệt.ASCII character codes, you’ll see that putting a backslash in front of a character changes its meaning completely. However, not all characters allow for this–only the special ones.

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
85 tích hợp:

>>>

>>> ord('r')
114
>>> ord('\r')
13

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 trống 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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 mà không có đối số dẫn đến một dòng trống, là một dòng chỉ bao gồm ký tự dòng mới. Don Tiết nhầm lẫn điều này với một dòng trống, không chứa bất kỳ nhân vật nào, thậm chí không phải là dòng mới!blank line, which is a line comprised solely of the newline character. Don’t confuse this with an empty line, which doesn’t contain any characters at all, not even the newline!

Bạn có thể sử dụng các chữ Python từ Chuỗi để trực quan hóa hai điều này:

'\n'  # Blank line
''    # Empty line

Người đầu tiên là một nhân vật dài, trong khi người thứ hai không có nội dung.

Trong một kịch bản phổ biến hơn, bạn đã muốn truyền đạt một số thông báo cho người dùng cuối. Có một vài cách để đạt được điều này.

Đầu tiên, bạn có thể chuyển một chuỗi trực tiếp theo nghĩa đen đến

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64:

>>>

>>> print('Please wait while the program is loading...')

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 trống 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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 mà không có đối số dẫn đến một dòng trống, là một dòng chỉ bao gồm ký tự dòng mới. Don Tiết nhầm lẫn điều này với một dòng trống, không chứa bất kỳ nhân vật nào, thậm chí không phải là dòng mới! in Python can be enclosed either in single quotes (
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
88) or double quotes (
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
89). According to the official PEP 8 style guide, you should just pick one and keep using it consistently. There’s no difference, unless you need to nest one in another.

Bạn có thể sử dụng các chữ Python từ Chuỗi để trực quan hóa hai điều này:

"My favorite book is "Python Tricks""  # Wrong!

Người đầu tiên là một nhân vật dài, trong khi người thứ hai không có nội dung.

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
0

Trong một kịch bản phổ biến hơn, bạn đã muốn truyền đạt một số thông báo cho người dùng cuối. Có một vài cách để đạt được điều này.

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
1

Đầu tiên, bạn có thể chuyển một chuỗi trực tiếp theo nghĩa đen đến

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
2

Điều này sẽ in thông điệp nguyên văn lên màn hình.

Chuỗi chữ trong Python có thể được đặt trong các trích dẫn đơn (

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
88) hoặc trích dẫn kép (
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
89). Theo hướng dẫn kiểu 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 phải làm tổ trong cái khác.

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
3

Ví dụ, bạn có thể sử dụng các trích dẫn kép cho chữ theo nghĩa đen và cũng bao gồm các trích dẫn kép bên trong nó, bởi vì đó là sự mơ hồ của người phiên dịch Python:

Những gì bạn muốn làm là kèm theo văn bản, trong đó có chứa hai trích dẫn, trong các trích dẫn đơn:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
4

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

Ngoài ra, bạn có thể sử dụng các chuỗi ký tự Escape được đề cập trước đó, để làm cho Python đối xử với các trích dẫn kép nội bộ đó theo nghĩa đen như là một phần của chuỗi theo nghĩa đen:

Thoát khỏi 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 nhiều ký tự dấu gạch chéo ngược ở dạng nghĩa đen.

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

Lưu ý cách mỗi nhân vật dấu gạch chéo ngược cần phải được thoát ra với một dấu gạch chéo ngược khác.docstrings.

Đ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 bị xáo trộn do sử dụng nặng các ký tự đặc biệt:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
6

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
90 hoặc
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
91 trước khi trích dẫn mở đầu, và bây giờ bạn kết thúc với điều này:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
7

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
5

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
8

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

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
9

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 trống 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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 mà không có đối số dẫn đến một dòng trống, là một dòng chỉ bao gồm ký tự dòng mới. Don Tiết nhầm lẫn điều này với một dòng trống, không chứa bất kỳ nhân vật nào, thậm chí không phải là dòng mới!

>>>

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
0

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 trống giữa ký tự dấu gạch chéo ngược và một chữ cái!

>>>

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
1

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 trống giữa ký tự dấu gạch chéo ngược và một chữ cái!

>>>

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
2

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 trống giữa ký tự dấu gạch chéo ngược và một chữ cái!

>>>

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
3

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 trống giữa ký tự dấu gạch chéo ngược và một chữ cái!

>>>

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
4

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ề một vấn đề bằng cách hiển thị một dấu vết.

Như với bất kỳ chức năng nào, nó không quan trọng cho dù bạn vượt qua một nghĩa đen, một biến hay một biểu thức. Tuy nhiên, không giống như nhiều chức năng khác,

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 sẽ chấp nhận bất cứ điều gì bất kể loại của nó.

Cho đến nay, bạn chỉ nhìn vào chuỗi, nhưng làm thế nào về các loại dữ liệu khác? Hãy để thử các loại văn bản của các loại tích hợp khác nhau và xem những gì ra mắt:

>>>

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
5

Xem ra cho hằng số

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
98, mặc dù. Mặc dù được sử dụng để chỉ ra sự vắng mặt của một giá trị, nhưng nó sẽ hiển thị là
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
99 thay vì một chuỗi trống:

Làm thế nào để

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 biết cách làm việc với tất cả các loại khác nhau này? Chà, câu trả lời ngắn gọn là nó không có. Nó hoàn toàn gọi
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
01 đằng sau hậu trường để gõ bất kỳ đối tượng nào vào một chuỗi. Sau đó, nó xử lý các chuỗi một cách thống nhất.

Sau đó trong 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 như các lớp của bạn.

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 với 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 cố định hoặc định dạng lên màn hình. Tiểu mục tiếp theo sẽ mở rộng trên định dạng tin nhắn một chút.

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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
6

Đó là vì

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 không phải là một chức năng hồi đó, 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à dự phòng. Nó sẽ gây hại khi bao gồm họ khi họ chỉ bị bỏ qua. Điều đó có nghĩa là bạn nên sử dụng câu lệnh
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 như thể nó là một chức năng? Tuyệt đối không!

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

>>>

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
7

Khung 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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03. Nếu biểu thức của bạn chỉ chứa một mục, thì nó như thể bạn không bao gồm các dấu ngoặc.

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

>>>

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
8

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

>>>

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
9

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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 với dấu ngoặc trong Python 2. Mặc dù, hoàn toàn chính xác, bạn có thể làm việc xung quanh việc này với sự trợ giúp của nhập
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
07, mà bạn sẽ đọc thêm về phần có liên quan.

Tách nhiều đối số

Bạn đã thấy

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 được gọi mà không có bất kỳ đối số nào để tạo một dòng trống và sau đó được gọi với một đối số duy nhất để hiển thị một thông báo được định dạng hoặc cố định.

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 tiện dụng trong một trường hợp phổ biến về định dạng tin nhắn, nơi bạn muốn tham gia một vài yếu tố cùng nhau.positional arguments, including zero, one, or more arguments. That’s very handy in a common case of message formatting, where you’d want to join a few elements together.

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

>>>

>>> import os
>>> os.linesep
'\r\n'
0

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

>>>

>>> import os
>>> os.linesep
'\r\n'
1

Ngược lại, các đối số được truyền mà không có tên được xác định bởi vị trí của chúng. Đó là lý do tại sao các đối số vị trí cần tuân theo nghiêm ngặt thứ tự áp đặt bởi chữ ký chức năng:positional arguments need to follow strictly the order imposed by the function signature:

>>>

>>> import os
>>> os.linesep
'\r\n'
2

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 cho phép số lượng đối số vị trí tùy ý nhờ tham số
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
10.

Hãy để một cái nhìn vào ví dụ này:

>>>

>>> import os
>>> os.linesep
'\r\n'
3

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 đã kết hợp 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 kết thúc với một thông điệp bị đè bẹp như
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
12.

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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
01 trên mỗi đối số trước khi tham gia cùng nhau. Nếu bạn nhớ lại từ tiểu mục trước, một sự kết hợp ngây thơ có thể dễ dàng dẫn đến lỗi do các loại không tương thích:

>>>

>>> import os
>>> os.linesep
'\r\n'
4

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 xác định bốn đối số từ khóa 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
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
15 từ trình thông dịch tương tác.keyword arguments, which are optional since they all have default values. You can view their brief documentation by calling
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
15 from the interactive interpreter.

Hãy tập trung vào

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
16 ngay bây giờ. Nó là viết tắt của dấu phân cách và được gán một không gian duy nhất (
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
17) theo mặc định. Nó xác định giá trị để tham gia các yếu tố với.separator and is assigned a single space (
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
17) by default. It determines the value to join elements with.

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
98, nhưng cái sau có tác dụng tương tự như không gian mặc định:

>>>

>>> import os
>>> os.linesep
'\r\n'
5

Nếu bạn muốn triệt tiêu hoàn toàn bộ phân cách, bạn phải vượt qua một chuỗi trống (

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
19) thay vào đó: thay vào đó:

>>>

>>> import os
>>> os.linesep
'\r\n'
6

Bạn có thể muốn

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 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 vượt qua ký tự dòng mới được mô tả trước đó:

>>>

>>> import os
>>> os.linesep
'\r\n'
7

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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
16 sẽ là in một cái gì đó như đường dẫn tệp:

>>>

>>> import os
>>> os.linesep
'\r\n'
8

Hãy nhớ rằng bộ phân cách xuất hiện giữa các yếu tố, không phải xung quanh chúng, vì vậy bạn cần tính đến điều đó bằng cách này hay cách khác:

>>>

>>> import os
>>> os.linesep
'\r\n'
9

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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
22) 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 hàng đầu.

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

>>>

>>> import os
>>> os.linesep
'\n'
0

Điều này sẽ xử lý các trường hợp cạnh như thoát khỏi 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ổ thiết bị đầ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. Sau đó trong phần này, bạn sẽ thấy cách sử dụng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 để viết văn bản vào các tệp trực tiếp từ Python.

Cuối cùng, tham số

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
16 chỉ bị ràng buộc với một ký tự. Bạn có thể tham gia các yếu tố với các chuỗi có độ dài bất kỳ:

>>>

>>> import os
>>> os.linesep
'\n'
1

Trong các tiểu mục 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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64.

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

>>>

>>> import os
>>> os.linesep
'\n'
2

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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03:

>>>

>>> import os
>>> os.linesep
'\n'
3

Ngoài ra, không có cách nào để thay đổi bộ phân cách mặc định của các phần tử được nối trong Python 2, vì vậy một cách giải quyết là sử dụng phép nội suy chuỗi như vậy:

>>>

>>> import os
>>> os.linesep
'\n'
4

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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
27 được đặt lại từ Python 3.

Ngăn chặn phá vỡ dòng

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 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 chạy dài hoặc nhắc nhở người dùng cho đầu vào. 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:

>>> import os
>>> os.linesep
'\n'
5

Nhiều ngôn ngữ lập trình phơi bày các hàm tương tự như

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 thông qua các thư viện tiêu chuẩn của chúng, nhưng họ cho phép bạn quyết định có nên 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 nối thêm
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
77 ở cuối chuỗi theo nghĩa đen.

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ữThí dụ
Perl
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
31
C
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
32
C ++
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
33

Ngược lại, chức năng Python từ

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 luôn thêm
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
77 mà không cần hỏi, bởi vì đó là những gì 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,
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
36, điều này chỉ ra những gì sẽ kết thúc dòng.

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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
36 gần như giống hệt với
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
16 mà bạn đã thấy trước đó:

  • Nó phải là một chuỗi hoặc
    python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    98.
  • Nó có thể là tùy ý dài.
  • Nó có giá trị mặc định là
    Downloading: ubuntu.iso Bytes: 832569344
          8192  [0.00%]
         16384  [0.00%]
         24576  [0.00%]
         32768  [0.00%]
         40960  [0.00%]
         49152  [0.01%]
         57344  [0.01%]
         65536  [0.01%]
         73728  [0.01%]
         81920  [0.01%]
         90112  [0.01%]
         98304  [0.01%]
        106496  [0.01%]
        114688  [0.01%]
        122880  [0.01%]
        131072  [0.02%]
        139264  [0.02%]
        147456  [0.02%]
        155648  [0.02%]
        163840  [0.02%]
    
    40.
  • Nếu bằng
    python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    98, nó sẽ có hiệu ứng tương tự như giá trị mặc định.
  • Nếu bằng một chuỗi trống (
    Downloading: ubuntu.iso Bytes: 832569344
          8192  [0.00%]
         16384  [0.00%]
         24576  [0.00%]
         32768  [0.00%]
         40960  [0.00%]
         49152  [0.01%]
         57344  [0.01%]
         65536  [0.01%]
         73728  [0.01%]
         81920  [0.01%]
         90112  [0.01%]
         98304  [0.01%]
        106496  [0.01%]
        114688  [0.01%]
        122880  [0.01%]
        131072  [0.02%]
        139264  [0.02%]
        147456  [0.02%]
        155648  [0.02%]
        163840  [0.02%]
    
    19), thì nó sẽ triệt tiêu dòng mới.

Bây giờ bạn đã hiểu những gì xảy ra dưới mui xe khi bạn gọi

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 mà không có tranh luận. Vì bạn không cung cấp bất kỳ đối số vị trí nào cho chức năng, nên không có gì để tham gia, và vì vậy bộ phân cách mặc định không được sử dụng. Tuy nhiên, giá trị mặc định của
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
36 vẫn được áp dụng và một dòng trống hiển thị.

Để 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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
36:

>>> import os
>>> os.linesep
'\n'
6

Mặc dù đây là hai cuộc gọi

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 riêng biệt, có thể thực hiện 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:

>>> import os
>>> os.linesep
'\n'
7

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64, cùng một dòng sẽ xuất hiện trên màn hình như:

>>> import os
>>> os.linesep
'\n'
8

Như với

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
16, bạn có thể sử dụng
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
36 để tham gia các đoạn riêng lẻ vào một đốm văn bản lớn với một dấu phân cách tùy chỉnh. Tuy nhiên, thay vì tham gia nhiều đối số, nó sẽ nối văn bản từ mỗi cuộc gọi chức năng vào cùng một dòng:

>>> import os
>>> os.linesep
'\n'
9

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

>>> import os
>>> os.linesep
'\r'
0

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

>>> import os
>>> os.linesep
'\r'
1

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

>>> import os
>>> os.linesep
'\r'
2

Không có gì để ngăn bạn sử dụng nhân vật Newline với một số phần đệm thêm xung quanh nó:

>>> import os
>>> os.linesep
'\r'
3

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

>>> import os
>>> os.linesep
'\r'
4

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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
36 sẽ chấp nhận chuỗi tùy ý.

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64.

Ngăn chặn một dòng phá vỡ trong Python 2 yêu cầu bạn nối một dấu phẩy kéo theo biểu thức:

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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
52 thay vì
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
53 trong Python 3. Bạn có thể kiểm tra điều này với đoạn mã sau:

>>> import os
>>> os.linesep
'\r'
5

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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
54 và
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
55:

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 từ
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
07 hoặc rơi vào mô -đun
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
58:

>>> import os
>>> os.linesep
'\r'
6

Điều này sẽ in đúng đầu ra mà không cần thêm khoảng trống:

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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
58 cho phép bạn kiểm soát những gì được in vào đầu ra tiêu chuẩn, mã trở nên lộn xộn hơn một chút.

In vào một tệp

Dù bạn có tin hay không,

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 không biết cách biến tin nhắn thành văn bản trên màn hình của bạn và thật lòng mà nói, nó không cần. Đó là một công việc cho các lớp mã cấp thấp hơn, hiểu byte và biết cách đẩy chúng xung quanh.

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 là một sự trừu tượng đối với các lớp này, cung cấp một giao diện thuận tiện chỉ đơn thuần là ủy thác việc in thực tế cho một luồng hoặc đối tượng giống như tệp. Một 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ớ.file-like object. A stream can be any file on your disk, a network socket, or perhaps an in-memory buffer.

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

  1. Downloading: ubuntu.iso Bytes: 832569344
          8192  [0.00%]
         16384  [0.00%]
         24576  [0.00%]
         32768  [0.00%]
         40960  [0.00%]
         49152  [0.01%]
         57344  [0.01%]
         65536  [0.01%]
         73728  [0.01%]
         81920  [0.01%]
         90112  [0.01%]
         98304  [0.01%]
        106496  [0.01%]
        114688  [0.01%]
        122880  [0.01%]
        131072  [0.02%]
        139264  [0.02%]
        147456  [0.02%]
        155648  [0.02%]
        163840  [0.02%]
    
    62: Đầu vào tiêu chuẩn
    standard input
  2. Downloading: ubuntu.iso Bytes: 832569344
          8192  [0.00%]
         16384  [0.00%]
         24576  [0.00%]
         32768  [0.00%]
         40960  [0.00%]
         49152  [0.01%]
         57344  [0.01%]
         65536  [0.01%]
         73728  [0.01%]
         81920  [0.01%]
         90112  [0.01%]
         98304  [0.01%]
        106496  [0.01%]
        114688  [0.01%]
        122880  [0.01%]
        131072  [0.02%]
        139264  [0.02%]
        147456  [0.02%]
        155648  [0.02%]
        163840  [0.02%]
    
    63: Đầu ra tiêu chuẩn
    standard output
  3. Downloading: ubuntu.iso Bytes: 832569344
          8192  [0.00%]
         16384  [0.00%]
         24576  [0.00%]
         32768  [0.00%]
         40960  [0.00%]
         49152  [0.01%]
         57344  [0.01%]
         65536  [0.01%]
         73728  [0.01%]
         81920  [0.01%]
         90112  [0.01%]
         98304  [0.01%]
        106496  [0.01%]
        114688  [0.01%]
        122880  [0.01%]
        131072  [0.02%]
        139264  [0.02%]
        147456  [0.02%]
        155648  [0.02%]
        163840  [0.02%]
    
    64: Lỗi tiêu chuẩn
    standard error

Đầu ra tiêu chuẩn là những gì bạn thấy trong thiết bị đầu cuối khi bạn 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: is what you see in the terminal when you run various command-line programs including your own Python scripts:

>>> import os
>>> os.linesep
'\r'
7

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 sẽ mặc định viết 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 trao đổi
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
63 cho luồng tệp, để bất kỳ đầu ra nào kết thúc trong tệp đó thay vì màn hình:

>>> import os
>>> os.linesep
'\r'
8

Rằng được gọi là chuyển hướng luồng.

Lỗi tiêu chuẩn tương tự như

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
63 ở chỗ nó cũng hiển thị trên màn hình. Tuy nhiên, nó có một luồng riêng biệt, có mục đích đăng nhập các thông báo lỗi cho 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 màu sắc khác nhau để phân biệt giữa các thông báo được in thành

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
63 và
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
64:

Hướng dẫn what is print ( r ) in python? - print ( r) trong python là gì?
Chạy cửa sổ công cụ trong pycharm

Trong khi cả

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
63 và
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
64 chỉ có ghi,
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
62 chỉ đọc được. Bạn có thể nghĩ về đầu vào tiêu chuẩn là bàn phím của mình, nhưng giống như với hai cái còn lại, bạn có thể trao đổi
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
62 cho một tệp để đọc dữ liệu từ đó.

Trong Python, bạn có thể truy cập tất cả các luồng tiêu chuẩn thông qua mô-đun

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
58 tích hợp:

>>>

>>> import os
>>> os.linesep
'\r'
9

Như bạn có thể thấy, các giá trị được xác định trước này giống với các đối tượng giống như tệp với các thuộc tính

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
75 và
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
76 cũng như các phương thức
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
77 và
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
78 trong số nhiều phương thức khác.

Theo mặc định,

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 được liên kết với
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
80 thông qua đối số
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
81 của nó, nhưng bạn có thể thay đổi điều đó. Sử dụng đối số từ khóa đó để chỉ ra một tệp được mở ở chế độ ghi hoặc nối, để các tin nhắn đi thẳng vào nó:

>>> ord('r')
114
>>> ord('\r')
13
0

Điều này sẽ làm cho mã của bạn miễn dịch với chuyển hướng truyền phát ở cấp hệ điều hành, điều này có thể hoặc không mong muốn.

Để biết thêm thông tin về việc làm việc với các tệp trong Python, bạn có thể kiểm tra đọc và ghi các tệp bằng Python (Hướng dẫn).

Lưu ý rằng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 không có quyền kiểm soát mã hóa ký tự. Nó có trách nhiệm của Stream Stream để mã hóa các chuỗi unicode thành chính xác. Trong hầu hết các trường hợp, bạn đã thắng được tự đặt mã hóa, bởi vì UTF-8 mặc định là những gì bạn muốn. Nếu bạn thực sự cần, có lẽ đối với các hệ thống kế thừa, bạn có thể sử dụng đối số
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
76 của
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
84:

>>> ord('r')
114
>>> ord('\r')
13
1

Thay vì một tệp thực hiện có ở đâu đó trong hệ thống tệp của bạn, bạn có thể cung cấp một tệp giả, sẽ nằm trong bộ nhớ máy tính của bạn. Bạn sẽ sử dụng kỹ thuật này sau này để chế giễu

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 trong các bài kiểm tra đơn vị:

>>>

>>> ord('r')
114
>>> ord('\r')
13
2

Nếu bạn đến điểm này, thì bạn sẽ chỉ còn lại một đối số từ khóa trong

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64, mà bạn sẽ thấy trong tiểu mục tiếp theo. Nó có lẽ ít được sử dụng nhất trong tất cả chúng. Tuy nhiên, có những lúc nó hoàn toàn cần thiết.

Có một cú pháp đặc biệt trong Python 2 để thay thế

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
80 mặc định bằng một tệp tùy chỉnh trong câu lệnh
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03:

>>> ord('r')
114
>>> ord('\r')
13
3

Bởi vì các chuỗi và byte được biểu thị bằng cùng loại

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
89 trong Python 2, câu lệnh
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 có thể xử lý dữ liệu nhị phân chỉ tốt:

>>> ord('r')
114
>>> ord('\r')
13
4

Mặc dù, có một vấn đề với mã hóa nhân vật. Hàm

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
84 trong Python 2 thiếu tham số
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
76, điều này thường dẫn đến
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
93 đáng sợ:

>>>

>>> ord('r')
114
>>> ord('\r')
13
5

Lưu ý cách các ký tự không latin phải được thoát trong cả hai chữ Unicode và chuỗi để tránh lỗi cú pháp. Hãy xem ví dụ này:

>>> ord('r')
114
>>> ord('\r')
13
6

Ngoài ra, bạn có thể chỉ định mã hóa mã nguồn theo PEP 263 ở đầu tệp, nhưng đó không phải là cách thực hành tốt nhất do các vấn đề về tính di động:

>>> ord('r')
114
>>> ord('\r')
13
7

Đặt cược tốt nhất của bạn là mã hóa chuỗi unicode ngay trước khi in nó. Bạn có thể làm điều này theo cách thủ công:

>>> ord('r')
114
>>> ord('\r')
13
8

Tuy nhiên, một tùy chọn thuận tiện hơn là sử dụng mô-đun

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
94 tích hợp:

>>> ord('r')
114
>>> ord('\r')
13
9

Nó sẽ quan tâm đến việc thực hiện các chuyển đổi phù hợp khi bạn cần đọc hoặc ghi tệp.

Buffering python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso 64 cuộc gọi

Trong tiểu mục trước, bạn đã học được rằng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 đại biểu in ra một đối tượng giống như tệp như
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
80. Tuy nhiên, một số luồng, bộ đệm một số hoạt động I/O nhất định để tăng cường hiệu suất, có thể cản trở. Hãy cùng xem một ví dụ.

Hãy tưởng tượng bạn đang viết một bộ đếm thời gian đếm ngược, sẽ nối thời gian còn lại vào cùng một dòng mỗi giây:

Nỗ lực đầu tiên của bạn có thể trông giống như thế này:

'\n'  # Blank line
''    # Empty line
0

Miễn là biến

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
98 lớn hơn 0, mã tiếp tục nối thêm văn bản mà không có dòng mới và sau đó đi ngủ trong một giây. Cuối cùng, khi đếm ngược kết thúc, nó in
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
99 và chấm dứt dòng.

Thật bất ngờ, thay vì đếm ngược mỗi giây, chương trình không hoạt động lãng phí trong ba giây, và sau đó đột nhiên in toàn bộ dòng cùng một lúc:

Hướng dẫn what is print ( r ) in python? - print ( r) trong python là gì?

Điều đó bởi vì các bộ đệm hệ điều hành tiếp theo 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 bị ảnh hưởng
  2. Line-buffered
  3. Block-buffered

Không bị ảnh hưởng là tự giải thích, nghĩa là không có bộ đệm đang diễn ra và tất cả các văn bản đều có hiệu lực ngay lập tức. Một luồng đệm dòng chờ đợi trước khi bắn bất kỳ cuộc gọi I/O nào cho đến khi ngắt dòng xuất hiện ở đâu đó trong bộ đệm, trong khi đó, một buff được chặn chỉ cho phép bộ đệm lấp đầy lên một kích thước nhất định bất kể nội dung của nó. Đầu ra tiêu chuẩn là cả đệm và đệm khối, tùy thuộc vào sự kiện nào đến trước. is self-explanatory, that is, no buffering is taking place, and all writes have immediate effect. A line-buffered stream waits before firing any I/O calls until a line break appears somewhere in the buffer, whereas a block-buffered one simply allows the buffer to fill up to a certain size regardless of its content. Standard output is both line-buffered and block-buffered, depending on which event comes first.

Bộ đệm giúp giảm số lượng cuộc gọi I/O đắt tiền. Ví dụ, hãy suy nghĩ về việc gửi tin nhắn qua một 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 tổ hợp 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ác đơn đặt hàng có cường độ lớn hơn tải trọng của nó. Thật là một chi phí! Sẽ có ý nghĩa để đợi cho đến khi ít nhất một vài ký tự được gõ và sau đó gửi chúng lại với nhau. Đó là nơi mà bộ đệm bước vào.

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 để xóa mạnh luồng mà không cần chờ một ký tự mới trong bộ đệm bằng cờ
>>> import os
>>> os.linesep
'\r\n'
01 của nó:

'\n'  # Blank line
''    # Empty line
1

Đó là tất cả. Việc đếm ngược của bạn sẽ hoạt động như mong đợi bây giờ, nhưng don lồng nhận lời của tôi cho nó. Đi trướ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ề việc gọi

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 bao gồm tất cả các tham số của nó. Bạn biết mục đích của họ và khi nào nên sử dụng chúng. Hiểu chữ ký chỉ là khởi đầu, tuy nhiên. Trong các phần sắp tới, bạn sẽ thấy lý do tại sao.

Có một cách dễ dàng để xóa luồng trong Python 2, bởi vì câu lệnh

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 không cho phép nó tự nó. Bạn cần phải có một tay cầm của lớp cấp thấp hơn, đây là đầu ra tiêu chuẩn và gọi trực tiếp với nó:

'\n'  # Blank line
''    # Empty line
2

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

>>> import os
>>> os.linesep
'\r\n'
04 cho trình thông dịch Python hoặc bằng cách thiết lập biến môi trường
>>> import os
>>> os.linesep
'\r\n'
05:

'\n'  # Blank line
''    # Empty line
3

Lưu ý rằng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 đã được đưa vào Python 2 và được cung cấp thông qua mô -đun
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
07. Thật không may, nó không đi kèm với tham số
>>> import os
>>> os.linesep
'\r\n'
01:

>>>

'\n'  # Blank line
''    # Empty line
4

Lưu ý cách các ký tự không latin phải được thoát trong cả hai chữ Unicode và chuỗi để tránh lỗi cú pháp. Hãy xem ví dụ này:docstring of the

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 function. You can display docstrings of various objects in Python using the built-in
>>> import os
>>> os.linesep
'\r\n'
10 function.

Ngoài ra, bạn có thể chỉ định mã hóa mã nguồn theo PEP 263 ở đầu tệp, nhưng đó không phải là cách thực hành tốt nhất do các vấn đề về tính di động:

Đặt cược tốt nhất của bạn là mã hóa chuỗi unicode ngay trước khi in nó. Bạn có thể làm điều này theo cách thủ công:

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

>>> import os
>>> os.linesep
'\r\n'
11, có sẵn trong thư viện tiêu chuẩn. Các bộ dữ liệu có tên có một biểu diễn văn bản gọn gàng ra khỏi hộp:

>>>

'\n'  # Blank line
''    # Empty line
5

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

>>> import os
>>> os.linesep
'\r\n'
12, cuối cùng bạn sẽ cần xác định một lớp. Hãy xem ví dụ này:

'\n'  # Blank line
''    # Empty line
6

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

>>> import os
>>> os.linesep
'\r\n'
12 và cố gắng in nó, bạn sẽ nhận được đầu ra kỳ quái này, khá khác so với tương đương
>>> import os
>>> os.linesep
'\r\n'
11:

>>>

'\n'  # Blank line
''    # Empty line
7

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

>>> import os
>>> os.linesep
'\r\n'
12, cuối cùng bạn sẽ cần xác định một lớp. Hãy xem ví dụ này:

'\n'  # Blank line
''    # Empty line
8

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

>>> import os
>>> os.linesep
'\r\n'
12 và cố gắng in nó, bạn sẽ nhận được đầu ra kỳ quái này, khá khác so với tương đương
>>> import os
>>> os.linesep
'\r\n'
11:

Nó 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ột mô -đun mà chúng được xác định. Bạn sẽ sửa nó một chút, nhưng chỉ cho hồ sơ, như một cách giải quyết nhanh chóng, bạn có thể kết hợp

>>> import os
>>> os.linesep
'\r\n'
11 và một lớp tùy chỉnh thông qua kế thừa:

Lớp

>>> import os
>>> os.linesep
'\r\n'
12 của bạn vừa trở thành một loại
>>> import os
>>> os.linesep
'\r\n'
11 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 so với một

>>> import os
>>> os.linesep
'\r\n'
11 đơn giản, bởi vì bạn không chỉ được in ngay 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 có thể thay đổi giá trị của họ một khi được tạo ra.

>>>

'\n'  # Blank line
''    # Empty line
9

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

>>> import os
>>> os.linesep
'\r\n'
12, cuối cùng bạn sẽ cần xác định một lớp. Hãy xem ví dụ này:magic methods within the class body, which you typically implement. If it doesn’t find one, then it falls back to the ugly default representation. Those magic methods are, in order of search:

  1. >>> import os
    >>> os.linesep
    '\r\n'
    
    24
  2. >>> import os
    >>> os.linesep
    '\r\n'
    
    25

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

>>> import os
>>> os.linesep
'\r\n'
12 và cố gắng in nó, bạn sẽ nhận được đầu ra kỳ quái này, khá khác so với tương đương
>>> import os
>>> os.linesep
'\r\n'
11:

Nó 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ột mô -đun mà chúng được xác định. Bạn sẽ sửa nó một chút, nhưng chỉ cho hồ sơ, như một cách giải quyết nhanh chóng, bạn có thể kết hợp

>>> import os
>>> os.linesep
'\r\n'
11 và một lớp tùy chỉnh thông qua kế thừa:

>>>

>>> print('Please wait while the program is loading...')
0

Lớp

>>> import os
>>> os.linesep
'\r\n'
12 của bạn vừa trở thành một loại
>>> import os
>>> os.linesep
'\r\n'
11 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 so với một

>>> import os
>>> os.linesep
'\r\n'
11 đơn giản, bởi vì bạn không chỉ được in ngay 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 có thể thay đổi giá trị của họ một khi được tạo ra.

Thật đúng là việc thiết kế các loại dữ liệu bất biến là mong muố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 học thông thường một lần nữa.

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 hoàn toàn gọi hàm
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
01 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
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
01 theo cách thủ công đối với một trường hợp của lớp
>>> import os
>>> os.linesep
'\r\n'
12 thông thường mang lại kết quả tương tự như in nó:

>>> print('Please wait while the program is loading...')
1

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
01, lần lượt, tìm kiếm một trong hai phương pháp ma thuật trong thân lớp, mà bạn thường thực hiện. Nếu nó không tìm thấy một, thì nó sẽ trở lại với biểu diễn mặc định xấu xí. Những phương pháp ma thuật đó, theo thứ tự tìm kiếm:

Cái đầu tiên được khuyến nghị trả lại một văn bản ngắn, 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 hiển thị 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.character sets. UTF-8 is the most widespread and safest encoding, while

>>> import os
>>> os.linesep
'\r\n'
36 is a special constant to express funky characters, such as
>>> import os
>>> os.linesep
'\r\n'
37, as escape sequences in plain ASCII, such as
>>> import os
>>> os.linesep
'\r\n'
38.

Tuy nhiên, một cái khác nên 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, nó sẽ trả về mã Python hợp lệ, để bạn có thể chuyển trực tiếp đến

>>> import os
>>> os.linesep
'\r\n'
26:charset must correspond to the one used by the terminal. For example, default encoding in DOS and Windows is CP 852 rather than UTF-8, so running this can result in a
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
93 or even garbled output:

>>>

>>> print('Please wait while the program is loading...')
2

Lưu ý rằng việc sử dụng một chức năng tích hợp khác,

>>> import os
>>> os.linesep
'\r\n'
27, luôn cố gắng gọi
>>> import os
>>> os.linesep
'\r\n'
28 trong một đối tượng, nhưng lại trở lại biểu diễn mặc định nếu nó không tìm thấy phương thức đó.

>>>

>>> print('Please wait while the program is loading...')
3

Python cung cấp cho bạn rất nhiều tự do khi xác định các loại dữ liệu của riêng bạn nếu không có loại nào tích hợp đá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 và các lớp dữ liệu được đặt tên, cung cấp các biểu diễn chuỗi trông tố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, đối với sự linh hoạt nhất, bạn sẽ phải xác định một lớp và ghi đè các phương thức ma thuật của nó được mô tả ở trên.

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 bởi vì không có phương pháp ma thuật ____331 trong Python 3 nữa. Bạn có thể tự hỏi mình nếu nó có thể chuyển đổi một đối tượng thành biểu diễn chuỗi byte của nó chứ không phải là một chuỗi unicode trong Python 3. Nó có thể, với một phương thức

>>> import os
>>> os.linesep
'\r\n'
43 đặc biệt chỉ làm điều đó:

>>>

>>> print('Please wait while the program is loading...')
4

Sử dụng chức năng

>>> import os
>>> os.linesep
'\r\n'
44 tích hợp trên một thể hiện giao cuộc gọi đến phương thức
>>> import os
>>> os.linesep
'\r\n'
45 được xác định trong lớp tương ứng.

Hiểu Python python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso 64

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 khá tốt vào thời điểm này, nhưng biết nó sẽ cho phép bạn sử dụng nó một cách hiệu quả và có ý thức hơn. Sau khi đọc phần này, bạn sẽ hiểu cách in trong Python đã được cải thiện trong những năm qua.how to use
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 quite well at this point, but knowing what it is will allow you to use it even more effectively and consciously. After reading this section, you’ll understand how printing in Python has improved over the years.

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

Bạn đã thấy rằng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 là một chức năng trong Python 3. Cụ thể hơn, nó là một chức năng tích hợp, có nghĩa là bạn không cần phải nhập nó từ bất cứ đâu:

>>>

>>> print('Please wait while the program is loading...')
5

Sử dụng chức năng

>>> import os
>>> os.linesep
'\r\n'
44 tích hợp trên một thể hiện giao cuộc gọi đến phương thức
>>> import os
>>> os.linesep
'\r\n'
45 được xác định trong lớp tương ứng.

>>>

>>> print('Please wait while the program is loading...')
6

Sử dụng chức năng

>>> import os
>>> os.linesep
'\r\n'
44 tích hợp trên một thể hiện giao cuộc gọi đến phương thức
>>> import os
>>> os.linesep
'\r\n'
45 được xác định trong lớp tương ứng.redefine
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 so that it doesn’t append a trailing newline. At the same time, you wanted to rename the original function to something like
>>> import os
>>> os.linesep
'\r\n'
50:

>>>

>>> print('Please wait while the program is loading...')
7

Sử dụng chức năng

>>> import os
>>> os.linesep
'\r\n'
44 tích hợp trên một thể hiện giao cuộc gọi đến phương thức
>>> import os
>>> os.linesep
'\r\n'
45 được xác định trong lớp tương ứng.

Hiểu Python

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64

>>>

>>> print('Please wait while the program is loading...')
8

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 khá tốt vào thời điểm này, nhưng biết nó sẽ cho phép bạn sử dụng nó một cách hiệu quả và có ý thức hơn. Sau khi đọc phần này, bạn sẽ hiểu cách in trong Python đã được cải thiện trong những năm qua.

In là một chức năng trong Python 3documentation using the editor of your choice, without having to remember some weird syntax for performing a certain task.

Bạn đã thấy rằng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 là một chức năng trong Python 3. Cụ thể hơn, nó là một chức năng tích hợp, có nghĩa là bạn không cần phải nhập nó từ bất cứ đâu:extend. Adding a new feature to a function is as easy as adding another keyword argument, whereas changing the language to support that new feature is much more cumbersome. Think of stream redirection or buffer flushing, for example.

Nó luôn luôn có sẵn trong không gian tên toàn cầu để bạn có thể gọi 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 tiêu chuẩn:composability. Functions are so-called first-class objects or first-class citizens in Python, which is a fancy way of saying they’re values just like strings or numbers. This way, you can assign a function to a variable, pass it to another function, or even return one from another.

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 isn’t different in this regard. For instance, you can take advantage of it for dependency injection:

>>> print('Please wait while the program is loading...')
9

Bằng cách này, bạn có thể tránh va chạm tên với các chức năng tùy chỉnh. Hãy nói rằng bạn muốn xác định lại

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 để nó không nối tiếp một dòng mới. Đồng thời, bạn muốn đổi tên hàm gốc thành một cái gì đó như
>>> import os
>>> os.linesep
'\r\n'
50:

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 tùy chỉnh trong phần chế giễu sau này. Ngoài ra, lưu ý rằng bạn sẽ không thể ghi đè lên
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 ngay từ đầu nếu đó là một chức năng.

>>>

"My favorite book is "Python Tricks""  # Wrong!
0

Mặt khác,

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 không phải là một chức năng 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 khác ngoài
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
98:partial functions to achieve the desired effect. It’s an advanced concept borrowed from the functional programming paradigm, so you don’t need to go too deep into that topic for now. However, if you’re interested in this topic, I recommend taking a look at the
>>> import os
>>> os.linesep
'\r\n'
63 module.

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 số loại tác dụng phụ, cuối cùng là một sự thay đổi của một quốc gia toàn cầu. Trong trường hợp của

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64, tác dụng phụ đó đang hiển thị một thông báo về đầu ra tiêu chuẩn hoặc ghi vào một tệp.expressions, in particular, lambda expressions. Instead of defining a full-blown function to replace
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 with, you can make an anonymous lambda expression that calls it:

>>>

"My favorite book is "Python Tricks""  # Wrong!
1

Bởi vì

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 là một hàm, nó có một chữ ký được xác định rõ 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 soạn thảo 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 nhiệm vụ nhất định.

Bên cạnh đó, các chức năng dễ dàng hơn để mở rộng. 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ư việc 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. Hãy nghĩ về chuyển hướng luồng hoặc xả đệm, ví dụ.

>>>

"My favorite book is "Python Tricks""  # Wrong!
2

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 là một hàm là khả năng kết hợp. Các chức năng được gọi là các đối tượng hạng nhất hoặc các công dân hạng nhất trong Python, đó là một cách lạ mắt để nói rằng chúng 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ó cho một hàm khác hoặc thậm chí trả lại một hàm khác.
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 là khác nhau về vấn đề này. Chẳng hạn, bạn có thể tận dụng nó để tiêm phụ thuộc:

Như bạn có thể thấy, các chức năng cho phép một giải pháp thanh lịch và 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 cách không có

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 như một chức năng gây ra nhiều đau đầu.

Downloading: ubuntu.iso Bytes: 832569344 8192 [0.00%] 16384 [0.00%] 24576 [0.00%] 32768 [0.00%] 40960 [0.00%] 49152 [0.01%] 57344 [0.01%] 65536 [0.01%] 73728 [0.01%] 81920 [0.01%] 90112 [0.01%] 98304 [0.01%] 106496 [0.01%] 114688 [0.01%] 122880 [0.01%] 131072 [0.02%] 139264 [0.02%] 147456 [0.02%] 155648 [0.02%] 163840 [0.02%] 03 là một tuyên bố trong Python 2

Một tuyên bố là một hướng dẫn có thể gợi lên một tác dụng phụ khi được thực thi nhưng không bao giờ đánh giá đến 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ư sau:statement is an instruction that may evoke a side-effect when executed but never evaluates to a value. In other words, you wouldn’t be able to print a statement or assign it to a variable like this:

"My favorite book is "Python Tricks""  # Wrong!
3

Đó là một lỗi cú pháp trong Python 2.

Dưới đây là một vài ví dụ nữa về các tuyên bố trong Python:

  • Bài tập:
    >>> import os
    >>> os.linesep
    '\r\n'
    
    68
    >>> import os
    >>> os.linesep
    '\r\n'
    
    68
  • Có điều kiện:
    >>> import os
    >>> os.linesep
    '\r\n'
    
    69
    >>> import os
    >>> os.linesep
    '\r\n'
    
    69
  • Vòng lặp:
    >>> import os
    >>> os.linesep
    '\r\n'
    
    70
    >>> import os
    >>> os.linesep
    '\r\n'
    
    70
  • Khẳng định:
    >>> import os
    >>> os.linesep
    '\r\n'
    
    71
    :
    >>> import os
    >>> os.linesep
    '\r\n'
    
    71

Các câu lệnh thường bao gồm các từ khóa dành riêng như

>>> import os
>>> os.linesep
'\r\n'
69,
>>> import os
>>> os.linesep
'\r\n'
73 hoặc
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 có ý nghĩa cố định trong ngôn ngữ. Bạn có thể sử dụng chúng để đặt tên cho các biến của bạn hoặc các ký hiệu khác. Đó là lý do tại sao việc xác định lại hoặc chế giễu tuyên bố
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 không thể có trong Python 2. Bạn đã bị mắc kẹt với những gì bạn nhận được.

Hơn nữa, bạn có thể in từ các chức năng ẩn danh, bởi vì các câu lệnh được chấp nhận trong các biểu thức Lambda:

>>>

"My favorite book is "Python Tricks""  # Wrong!
4

Cú pháp của tuyên bố

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 là mơ hồ. Đô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 tùy chọn:

>>>

"My favorite book is "Python Tricks""  # Wrong!
5

Cú pháp của tuyên bố

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 là mơ hồ. Đô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 tùy chọn:

>>>

"My favorite book is "Python Tricks""  # Wrong!
6

Cú pháp của tuyên bố

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 là mơ hồ. Đô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 tùy chọn:

>>>

"My favorite book is "Python Tricks""  # Wrong!
7

Cú pháp của tuyên bố

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 là mơ hồ. Đô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 tùy chọn:

>>>

"My favorite book is "Python Tricks""  # Wrong!
8

Cú pháp của tuyên bố

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 là mơ hồ. Đô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 tùy chọn:

>>>

"My favorite book is "Python Tricks""  # Wrong!
9

Cú pháp của tuyên bố

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 là mơ hồ. Đô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 tùy chọn:

Vào những lúc khác, họ thay đổi cách in thông báo:

Sự kết hợp chuỗi có thể tăng

>>> import os
>>> os.linesep
'\r\n'
77 do các loại không tương thích, ví dụ như bạn phải xử lý thủ công: ví dụ:

So sánh điều này với mã tương tự trong Python 3, tận dụng trình tự giải nén:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
00

Có bất kỳ đối số từ khóa nào cho các nhiệm vụ phổ biến như xả 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ả chức năng

>>> import os
>>> os.linesep
'\r\n'
10 tích hợp cũng hữu ích liên quan đến câu lệnh
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03:

Trailing Newline Remove không hoạt động hoàn toàn đúng, bởi vì nó thêm một không gian không mong muốn. Bạn có thể soạn thảo nhiều câu

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 cùng nhau, và trên hết, bạn phải siêng năng hơn về mã hóa ký tự.

Danh sách các vấn đề tiếp tục. Nếu bạn tò mò, bạn có thể quay trở 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.

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
01

Cú pháp của tuyên bố

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 là mơ hồ. Đô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 tùy chọn:

Vào những lúc khác, họ thay đổi cách in thông báo:

Sự kết hợp chuỗi có thể tăng

>>> import os
>>> os.linesep
'\r\n'
77 do các loại không tương thích, ví dụ như bạn phải xử lý thủ công: ví dụ:

So sánh điều này với mã tương tự trong Python 3, tận dụng trình tự giải nén:

Có bất kỳ đối số từ khóa nào cho các nhiệm vụ phổ biến như xả 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ả chức năng

>>> import os
>>> os.linesep
'\r\n'
10 tích hợp cũng hữu ích liên quan đến câu lệnh
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03:

Trailing Newline Remove không hoạt động hoàn toàn đúng, bởi vì nó thêm một không gian không mong muốn. Bạn có thể soạn thảo nhiều câu

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 cùng nhau, và trên hết, bạn phải siêng năng hơn về mã hóa ký tự.

Danh sách các vấn đề tiếp tục. Nếu bạn tò mò, bạn có thể quay trở 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.

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 gốc, thì bạn có thể thay thế nó bằng
>>> import os
>>> os.linesep
'\r\n'
91 trong mã của mình bằng cách sử dụng đổi tên nhập khẩu:

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
02

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

>>> import os
>>> os.linesep
'\r\n'
92 như một bí danh ngắn:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
03

Thoạt nhìn, có hầu như không có 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ó: không có gì:

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
04

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

>>> import os
>>> os.linesep
'\r\n'
92 như một bí danh ngắn:

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
05

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

>>> import os
>>> os.linesep
'\r\n'
92 như một bí danh ngắn:

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
06

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

>>> import os
>>> os.linesep
'\r\n'
92 như một bí danh ngắn:

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
07

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

>>> import os
>>> os.linesep
'\r\n'
92 như một bí danh ngắn:

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
08

Thoạt nhìn, có hầu như không có 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ó: không có gì:

Điều đó bởi vì

>>> import os
>>> os.linesep
'\r\n'
91 gọi
>>> import os
>>> os.linesep
'\r\n'
27 thay vì thông thường
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
01 để đúc loại, để 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 cho nó ăn các cấu trúc dữ liệu phức tạp hơn:

Chức năng á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 một hệ thống phân cấp được lồng sâu bằng cách hiển thị dấu chấm lửng dưới một cấp độ nhất định:

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
09

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 thông thường cũng sử dụng các hình elip nhưng để hiển thị các cấu trúc dữ liệu đệ quy, tạo thành một chu kỳ, để tránh lỗi Overflow Lỗi:

Tuy nhiên,

>>> import os
>>> os.linesep
'\r\n'
91 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:

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.

>>> import os
>>> os.linesep
'\r\n'
91 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 so sánh các chuỗi, bạn thường không quan tâm đến một thứ tự cụ thể của các thuộc tính nối tiếp. Dù sao, nó luôn luôn tốt nhất để so sánh từ điển thực tế trước khi tuần tự hóa.

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

>>> import os
>>> os.linesep
'\r\n'
99. Nó cũng có khả năng in đẹp:

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

>>> import os
>>> os.linesep
'\r\n'
88 có chức năng
>>> import os
>>> os.linesep
'\n'
01 bổ sung trả về một chuỗi, trong trường hợp bạn phải làm một cái gì đó khác ngoài việc in nó.

Đáng ngạc nhiên, chữ ký của

>>> import os
>>> os.linesep
'\r\n'
91 không giống như hàm
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64. Bạn thậm chí có thể vượt qua nhiều hơn một đối số vị trí, cho thấy nó tập trung vào các cấu trúc dữ liệu in.

Thêm màu sắc với trình tự thoát ANSI

Khi máy tính cá nhân trở nên tinh vi 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 một vài thập kỷ trước khi người dân tạ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.Esc character, whose ASCII value is 27, sometimes denoted as

>>> import os
>>> os.linesep
'\n'
07 in hexadecimal or
>>> import os
>>> os.linesep
'\n'
08 in octal. You may use Python number literals to quickly verify it’s indeed the same number:

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
10

Hầu hết các trình giả lập thiết bị đầu cuối ngày nay 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

>>> import os
>>> os.linesep
'\n'
04 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ữ nguyên chúng 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 không, ví dụ, 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ỉ cung cấp cho tôi 8. Lệnh sẽ trả về một số âm nếu màu sắc không được hỗ trợ.Trình tự 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ư
>>> import os
>>> os.linesep
'\n'
05 hoặc
>>> import os
>>> os.linesep
'\n'
06, để thay đổi cách các yếu tố nhìn 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 chúng không thể nhìn thấy bản thân. Tương tự, các mã Escape won đã xuất hiện trong thiết bị đầu cuối miễn là nó nhận ra chúng. Mặt khác, họ sẽ xuất hiện ở dạng theo nghĩa đen như thể bạn đang xem nguồn gốc của một trang web.
Đúng như tên gọi của nó, một chuỗi phải bắt đầu với ký tự ESC không thể in, có giá trị ASCII là 27, đôi khi được ký hiệu là
>>> import os
>>> os.linesep
'\n'
07 trong thập lục phân hoặc
>>> import os
>>> os.linesep
'\n'
08 trong octal. Bạn có thể sử dụng các chữ số Python để nhanh chóng xác minh nó thực sự là cùng một số:
Ngoài ra, bạn có thể có được nó với chuỗi thoát
>>> import os
>>> os.linesep
'\n'
09 trong vỏ:
Trình tự thoát ANSI phổ biến nhất có dạng sau:Yếu tố
Sự mô tảThí dụSự mô tả
Thí dụThoát raNhân vật thoát hiểm không thể in
>>> import os
>>> os.linesep
'\n'
10
>>> import os
>>> os.linesep
'\n'
11
Mở khung vuông

Mã sốnumeric code can be one or more numbers separated with a semicolon, while the character code is just one letter. Their specific meaning is defined by the ANSI standard. For example, to reset all formatting, you would type one of the following commands, which use the code zero and the letter

>>> import os
>>> os.linesep
'\n'
15:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
11

Ở đầu kia của phổ, bạn có các giá trị mã ghép. Để đặt nền trước và nền với các kênh RGB, cho rằng 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ố:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
12

Nó không chỉ là màu văn bản mà bạn có thể đặt 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í nó bằng một gạch chân.

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:

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
13

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

>>> import os
>>> os.linesep
'\n'
17 xuất hiện trong phông chữ màu đỏ, đậm và gạch chân:

Hướng dẫn what is print ( r ) in python? - print ( r) trong python là gì?

Tuy nhiên, có những trừu tượng cao hơn so với các mã thoát ANSI, chẳng hạn như thư viện

>>> import os
>>> os.linesep
'\n'
04 đã đề cập, cũng như các công cụ để xây dựng giao diện người dùng trong bảng điều khiển.

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

Trong khi chơi với các mã Escape ANSI không thể phủ nhận một tấn niềm vui, trong thế giới thực, bạ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. Có một vài thư viện cung cấp mức độ kiểm soát cao như vậy đối với thiết bị đầu cuối, nhưng

>>> import os
>>> os.linesep
'\n'
19 dường như là lựa chọn phổ biến nhất.

Chủ yếu, nó cho phép bạn suy nghĩ về các tiện ích đồ họa độc lập thay vì một đốm văn bản. Bên cạnh đó, bạn có được rất nhiều sự tự do trong việc thể hiện nghệ sĩ bên trong của mình, bởi vì nó thực sự thích vẽ một tấm vải trống. Thư viện che giấu sự phức tạp của việc phải đối phó với các thiết bị đầu cuối khác nhau. Ngoài ra, nó có sự hỗ trợ tuyệt vời cho các sự kiện bàn phím, có thể hữu ích cho việc viết trò chơi video.

Làm thế nào về việc làm một trò chơi rắn retro? Hãy để tạo ra một trình giả lập Snake Python:

Hướng dẫn what is print ( r ) in python? - print ( r) trong python là gì?

Đầu tiên, bạn cần nhập mô -đun

>>> import os
>>> os.linesep
'\n'
19. Vì nó sửa đổi trạng thái của một thiết bị đầu cuối đang chạy, nên điều quan trọng là phải xử lý các lỗi và khôi phục lại trạng thái trước đó. Bạn có thể làm điều này theo cách thủ công, nhưng thư viện đi kèm với một trình bao bọc thuận tiện cho chức năng chính của bạn:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
14

Lưu ý, hàm phải chấp nhận tham chiếu đến đối tượng màn hình, còn được gọi là

>>> import os
>>> os.linesep
'\n'
21, mà bạn sẽ sử dụng sau để thiết lập bổ sung.

Nếu bạn chạy chương trình này ngay bây giờ, bạn đã giành được bất kỳ hiệu ứng nào, vì nó chấm dứt ngay lập tức. Tuy nhiên, bạn có thể thêm một độ trễ nhỏ để có một cái nhìn lén:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
15

Lần này, màn hình hoàn toàn trống rỗng trong một giây, nhưng con trỏ vẫn nhấp nháy. Để ẩn nó, chỉ cần gọi một trong các hàm cấu hình được xác định trong mô -đun:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
16

Hãy để xác định con rắn là danh sách các điểm trong tọa độ màn hình:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
17

Đầu của con rắn luôn là yếu tố đầu tiên trong danh sách, trong khi đuôi là phần cuối cùng. Hình dạng ban đầu của con rắn nằm ngang, bắt đầu từ góc trên cùng bên trái của màn hình và hướng sang phải. Trong khi tọa độ y của nó ở lại bằng 0, tọa độ X của nó giảm từ đầu đến đuôi.

Để vẽ con rắn, bạn sẽ bắt đầu với cái đầu và sau đó làm theo các đoạn còn lại. Mỗi phân đoạn mang theo tọa độ

>>> import os
>>> os.linesep
'\n'
22, vì vậy bạn có thể giải nén chúng:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
18

Một lần nữa, nếu bạn chạy mã này ngay bây giờ, nó đã giành được hiển thị bất cứ thứ gì, bởi vì bạn phải làm mới rõ ràng màn hình sau đó:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
19

Bạn muốn di chuyển con rắn theo một trong bốn hướng, có thể được định nghĩa là vectơ. Cuối cùng, hướng sẽ thay đổi để đáp ứng với một phím kẽ mũi tên, do đó bạn có thể kết nối nó với các mã khóa của thư viện:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
20

Làm thế nào để một con rắn di chuyển? Nó chỉ ra rằng chỉ có đầu của nó thực sự di chuyển đến một vị trí mới, trong khi tất cả các phân khúc khác thay đổi về phía nó. Trong mỗi bước, hầu hết tất cả các phân đoạn vẫn giữ nguyên, ngoại trừ đầu và đuôi. Giả sử con rắn đang phát triển, bạn có thể tháo đuôi và chèn một đầu mới ở đầu danh sách:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
21

Để có được các tọa độ mới của đầu, bạn cần thêm vectơ hướng vào nó. Tuy nhiên, việc thêm các bộ dữ liệu trong Python dẫn đến một tuple lớn hơn thay vì tổng đại số của các thành phần vectơ tương ứng. Một cách để khắc phục điều này là bằng cách sử dụng các hàm

>>> import os
>>> os.linesep
'\n'
23,
>>> import os
>>> os.linesep
'\n'
24 và
>>> import os
>>> os.linesep
'\n'
25 tích hợp.

Hướng sẽ thay đổi trên một phím phím, vì vậy bạn cần gọi

>>> import os
>>> os.linesep
'\n'
26 để có được mã khóa được nhấn. Tuy nhiên, nếu phím được nhấn không tương ứng với các phím mũi tên được xác định trước đó là các phím từ điển, thì hướng giành được thay đổi:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
22

Tuy nhiên, theo mặc định,

>>> import os
>>> os.linesep
'\n'
26 là một cuộc gọi chặn sẽ ngăn con rắn di chuyển trừ khi có phím kẽ. Do đó, bạn cần thực hiện cuộc gọi không chặn bằng cách thêm một cấu hình khác:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
23

Bạn gần như đã hoàn thành, nhưng ở đó, chỉ còn một điều cuối cùng. Nếu bây giờ bạn lặp lại mã này, con rắn sẽ dường như đang phát triển thay vì di chuyển. Điều đó bởi vì bạn phải xóa màn hình một cách rõ ràng trước mỗi lần lặp.

Cuối cùng, đây là tất cả những gì bạn cần để chơi trò chơi rắn trong Python:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
24

Điều này chỉ đơn thuần là làm trầy xước bề mặt của các khả năng mà mô -đun

>>> import os
>>> os.linesep
'\n'
19 mở ra. Bạn có thể sử dụng nó để phát triển trò chơi như thế này hoặc các ứng dụng hướng đến doanh nghiệp.

Sống nó với hình ảnh động tuyệt vời

Hoạt hình không chỉ có thể làm cho giao diện người dùng trở nên hấp dẫn hơn đối với mắt mà còn cải thiện trải nghiệm người dùng tổng thể. Ví dụ, khi bạn cung cấp phản hồi sớm cho người dùng, họ sẽ biết liệu chương trình của bạn có còn hoạt động hay không, nếu thời gian để giết nó.

Để làm động văn bản trong thiết bị đầu cuối, bạn phải có thể tự do di chuyển con trỏ xung quanh. Bạn có thể làm điều này với một trong các công cụ được đề cập trước đây, đó là mã thoát ANSI hoặc thư viện

>>> import os
>>> os.linesep
'\n'
19. Tuy nhiên, tôi đã muốn cho bạn thấy một cách thậm chí đơn giản hơn.

Nếu hoạt hình có thể bị hạn chế với một dòng văn bản, thì bạn có thể quan tâm đến hai chuỗi ký tự thoát đặc biệt:

  • Trở về vận chuyển:
    python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    63
    python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    63
  • Backspace:
    python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    81
    python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    81

Cái đầu tiên di chuyển con trỏ sang đầu dòng, trong khi cái thứ hai di chuyển nó chỉ một ký tự sang trái. Cả hai đều làm việc theo cách không phá hủy mà không ghi đè văn bản mà đã được viết.

Hãy cùng xem một vài ví dụ.

Bạn thường muốn hiển thị một số loại bánh xe quay để chỉ ra một công việc đang tiến triển mà không biết chính xác thời gian còn lại để hoàn thành:spinning wheel to indicate a work in progress without knowing exactly how much time’s left to finish:

Hướng dẫn what is print ( r ) in python? - print ( r) trong python là gì?

Nhiều công cụ dòng lệnh sử dụng thủ thuật này trong khi tải xuống dữ liệu qua mạng. Bạn có thể tạo một hình ảnh động chuyển động dừng thực sự đơn giản từ một chuỗi các nhân vật sẽ đạp xe theo kiểu vòng tròn:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
25

Vòng lặp có được ký tự tiếp theo để in, sau đó di chuyển con trỏ sang đầu dòng và ghi đè lên bất cứ thứ gì trước đây mà không cần thêm một dòng mới. Bạn không muốn có thêm không gian giữa các đối số vị trí, vì vậy đối số phân tách phải trống. Ngoài ra, hãy chú ý việc sử dụng các chuỗi thô của Python, do các ký tự dấu gạch chéo ngược có mặt trong nghĩa đen.

Khi bạn biết tỷ lệ phần trăm hoàn thành thời gian hoặc nhiệm vụ còn lại, thì bạn có thể hiển thị một thanh tiến trình hoạt hình:

Hướng dẫn what is print ( r ) in python? - print ( r) trong python là gì?

Đầu tiên, bạn cần tính toán số lượng hashtag để hiển thị và số lượng không gian trống cần chèn. Tiếp theo, bạn xóa dòng và xây dựng thanh từ đầu:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
26

Như trước đây, mỗi yêu cầu để cập nhật lặp lại toàn bộ dòng.

Tạo ra âm thanh với python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso 64

Nếu bạn đủ tuổi để nhớ máy tính có loa PC, thì bạn cũng phải nhớ âm thanh tiếng bíp đặc biệt của chúng, thường được sử dụng để chỉ ra các vấn đề về phần cứng. Họ hầu như không thể tạo ra bất kỳ tiếng ồn nào hơn thế, nhưng các trò chơi video có vẻ tốt hơn rất nhiều với nó.

Hôm nay bạn vẫn có thể tận dụng loa nhỏ này, nhưng rất có thể máy tính xách tay của bạn đã không đi kèm với một. Trong trường hợp như vậy, bạn có thể kích hoạt mô phỏng chuông đầu cuối trong vỏ của mình, để phát ra âm thanh cảnh báo hệ thống được phát.terminal bell emulation in your shell, so that a system warning sound is played instead.

Đi trước và nhập lệnh này để xem liệu thiết bị đầu cuối của bạn có thể phát âm thanh không:

Điều này thường sẽ in văn bản, nhưng cờ

>>> import os
>>> os.linesep
'\n'
33 cho phép giải thích các lần thoát khỏi dấu gạch chéo ngược. Như bạn có thể thấy, có một chuỗi thoát chuyên dụng
>>> import os
>>> os.linesep
'\n'
34, viết tắt của cảnh báo cảnh báo, điều đó xuất hiện một nhân vật chuông đặc biệt. Một số thiết bị đầu cuối tạo ra một âm thanh bất cứ khi nào họ nhìn thấy nó.

Tương tự, bạn có thể in nhân vật này bằng Python. Có lẽ trong một vòng lặp để tạo thành một số loại giai điệu. Mặc dù nó chỉ có một ghi chú duy nhất, bạn vẫn có thể thay đổi chiều dài tạm dừng giữa các trường hợp liên tiếp. Đó có vẻ như là một món đồ chơi hoàn hảo cho phát lại mã Morse!

Các quy tắc như sau:

  • Các chữ cái được mã hóa với một chuỗi các ký hiệu DOT (·) và Dash ( -).dot (·) and dash (–) symbols.
  • Một dấu chấm là một đơn vị thời gian.dot is one unit of time.
  • Một dấu gạch ngang là ba đơn vị thời gian.dash is three units of time.
  • Các biểu tượng riêng lẻ trong một chữ cái cách nhau một đơn vị thời gian.symbols in a letter are spaced one unit of time apart.
  • Biểu tượng của hai chữ cái liền kề được đặt cách nhau ba đơn vị thời gian.letters are spaced three units of time apart.
  • Biểu tượng của hai từ liền kề được đặt cách nhau bảy đơn vị thời gian.words are spaced seven units of time apart.

Theo các quy tắc đó, bạn có thể là một tín hiệu SOS một tín hiệu vô thời hạn theo cách sau:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
27

Trong Python, bạn có thể thực hiện nó chỉ trong mười dòng mã:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
28

Có lẽ bạn thậm chí có thể tiến thêm một bước và tạo một công cụ dòng lệnh để dịch văn bản thành mã Morse? Dù bằng cách nào, tôi hy vọng bạn có thể vui vẻ với điều này!

Chế giễu Python python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso 64 trong các bài kiểm tra đơn vị

Ngày nay, nó dự kiến ​​rằng bạn vận chuyển mã đáp ứng các tiêu chuẩn chất lượng cao. Nếu bạn khao khát trở thành một chuyên gia, bạn phải học cách kiểm tra mã của bạn.

Kiểm tra phần mềm đặc biệt quan trọng trong các ngôn ngữ được đánh máy động, chẳng hạn như Python, mà don don có một trình biên dịch để cảnh báo bạn về những sai lầm rõ ràng. Các khiếm khuyết có thể tìm đường đến môi trường sản xuất và không hoạt động trong một thời gian dài, cho đến một ngày đó khi một nhánh mã cuối cùng được thực thi.

Chắc chắn, bạn có lớp lót, trình kiểm tra nhập và các công cụ khác để phân tích mã tĩnh để hỗ trợ bạn. Nhưng họ đã giành chiến thắng cho bạn biết liệu chương trình của bạn có thực hiện những gì mà nó phải làm ở cấp độ kinh doanh hay không.

Vì vậy, bạn có nên thử nghiệm

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64? Rốt cuộc, nó là một chức năng tích hợp mà phải trải qua một bộ thử nghiệm toàn diện. Tuy nhiên, điều bạn muốn kiểm tra là liệu mã của bạn có gọi
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 vào đúng thời điểm với các tham số dự kiến ​​hay không. Rằng được biết đến như một hành vi.behavior.

Bạn có thể kiểm tra các hành vi bằng cách chế giễu các đối tượng hoặc chức năng thực. Trong trường hợp này, bạn muốn chế giễu

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 để ghi lại và xác minh các yêu cầu của nó.

Chế giễu trong Python có thể được thực hiện gấp đôi. Đầu tiên, bạn có thể đi theo con đường truyền thống của các ngôn ngữ được gõ tĩnh bằng cách sử dụng tiêm phụ thuộc. Điều này đôi khi có thể yêu cầu bạn thay đổi mã được kiểm tra, điều này luôn luôn có thể nếu mã được xác định trong thư viện bên ngoài:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
29

Đây là ví dụ tương tự tôi đã sử dụng trong một phần trước để nói về thành phần chức năng. Về cơ bản, nó cho phép thay thế

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 với 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 không, bạn phải chặn nó bằng cách tiêm chức năng bị chế giễu:

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
30

Gọi cái giả 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, ví dụ trong một câu lệnh

>>> import os
>>> os.linesep
'\r\n'
71.

Trong một giải pháp thay thế một chút, thay vì thay thế toàn bộ chức năng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 bằng trình bao bọc tùy chỉnh, bạn có thể chuyển hướng đầu ra tiêu chuẩn đến một luồng ký tự giống như tệp trong bộ nhớ:

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
31

Gọi cái giả 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, ví dụ trong một câu lệnh

>>> import os
>>> os.linesep
'\r\n'
71.

Trong một giải pháp thay thế một chút, thay vì thay thế toàn bộ chức năng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 bằng trình bao bọc tùy chỉnh, bạn có thể chuyển hướng đầu ra tiêu chuẩn đến một luồng ký tự giống như tệp trong bộ nhớ:

Lần này, chức năng gọi rõ ràng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64, nhưng nó phơi bày tham số ____281 của nó với thế giới bên ngoài.

Tuy nhiên, một cách chế giễu các đối tượng pythonic hơn tận dụng mô-đun

>>> import os
>>> os.linesep
'\n'
44 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ừ nó là một bản hack bẩn thỉu mà bạn có thể dễ dàng tự bắn vào chân mình. Nó ít thanh lịch hơn so với tiêm phụ thuộc nhưng chắc chắn nhanh chóng và thuận tiện.

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
32

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

Để chế giễu

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 trong trường hợp thử nghiệm, bạn thường sử dụng trình trang trí
>>> import os
>>> os.linesep
'\n'
46 và chỉ định mục tiêu để vá bằng cách đề cập đến nó với một tên đủ điều kiện, bao gồm cả tên mô -đun:

Điều này sẽ tự động tạo chế độ giả cho bạn và đưa nó vào chức năng thử nghiệm. Tuy nhiên, bạn cần tuyên bố rằng chức năng kiểm tra của bạn chấp nhận một chế độ giả ngay bây giờ. Đối tượng giả cơ bản 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ù tiêm một chế độ giả vào chức năng, nhưng bạn không gọi nó trực tiếp, mặc dù bạn có thể. Điều đó đã được tiêm giả 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.

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
33

Trong cuộc sống thực, chế giễu giúp cô lập mã được 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 Mocks trong một bài kiểm tra, bởi vì điều đó không có ý nghĩa gì. Thay vào đó, nó có các đoạn mã khác gọi là giả của bạn một cách gián tiếp mà không biết nó.

Ở đây, điều đó có nghĩa là gì:

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

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64. Nó nghĩ rằng nó gọi là
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64, nhưng trong thực tế, nó gọi là một chế độ giả mà bạn có thể kiểm soát hoàn toàn.

  • Có nhiều lý do để thử nghiệm phần mềm. Một trong số đó là tìm kiếm lỗi. Khi bạn viết các bài kiểm tra, bạn thường muốn loại bỏ chức năng
    python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    64, ví dụ, bằng cách chế giễu nó. Tuy nhiên, nghịch lý là chức năng tương tự có thể giúp bạn tìm thấy lỗi trong quá trình gỡ lỗi liên quan đến bạn sẽ đọc trong phần tiếp theo.
  • Bạn có thể có con khỉ vá bản tuyên bố
    Downloading: ubuntu.iso Bytes: 832569344
          8192  [0.00%]
         16384  [0.00%]
         24576  [0.00%]
         32768  [0.00%]
         40960  [0.00%]
         49152  [0.01%]
         57344  [0.01%]
         65536  [0.01%]
         73728  [0.01%]
         81920  [0.01%]
         90112  [0.01%]
         98304  [0.01%]
        106496  [0.01%]
        114688  [0.01%]
        122880  [0.01%]
        131072  [0.02%]
        139264  [0.02%]
        147456  [0.02%]
        155648  [0.02%]
        163840  [0.02%]
    
    03 trong Python 2, bạn cũng không thể tiêm nó như một sự phụ thuộc. Tuy nhiên, bạn có một vài tùy chọn khác:
  • Sử dụng chuyển hướng luồng.

Bản vá đầu ra tiêu chuẩn được xác định trong mô -đun

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
58.

Nhập

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 từ mô -đun
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
07.

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
34

Gọi cái giả 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, ví dụ trong một câu lệnh

>>> import os
>>> os.linesep
'\r\n'
71.

Việc vá đầu ra tiêu chuẩn từ mô -đun

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
58 chính xác là những gì nó nghe, nhưng bạn cần phải biết một vài gotchas:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
35

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

>>> import os
>>> os.linesep
'\n'
44 vì nó không có sẵn trong thư viện tiêu chuẩn trong Python 2.

Thứ hai, câu lệnh

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 gọi phương thức
Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
78 bên dưới trên đối tượng bị chế giễu 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 chống lại
>>> import os
>>> os.linesep
'\n'
63.

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

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
03 không phải lúc nào cũng tương ứng với một cuộc gọi đến
>>> import os
>>> os.linesep
'\n'
65. Trên thực tế, bạn sẽ thấy nhân vật Newline được viết riêng.

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 từ
>>> import os
>>> os.linesep
'\n'
67 và vá nó:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
36

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 được xác định trong mô -đun
>>> import os
>>> os.linesep
'\n'
69 thay vì
>>> import os
>>> os.linesep
'\n'
70.

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso 64 Gỡ lỗi

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 khiêm tốn, thông qua mô -đun
>>> import os
>>> os.linesep
'\n'
73, đến một trình gỡ lỗi hoàn toàn. Sau khi đọc nó, bạn sẽ có thể đưa ra quyết định có giáo dục về việc nào trong số họ là 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 Caveman, nó 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ó việc sử dụng.print debugging or caveman debugging, it’s the most basic form of debugging. While a little bit old-fashioned, it’s still powerful and has its uses.

Ý tưởng là đi theo con đường thực hiện chương trình cho đến khi nó dừng đột ngột hoặc đưa ra kết quả không chính xác, để xác định hướng dẫn chính xác với một 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:

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
37

Như bạn có thể thấy, hàm này không trả về giá trị dự kiến ​​của

>>> import os
>>> os.linesep
'\n'
74, nhưng bây giờ bạn đã biết nó vì số tiền này là một chút. Truy tìm 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 một gợi ý về vấn đề này.

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

>>> import os
>>> os.linesep
'\n'
74 hóa ra có một biểu diễn nhị phân vô hạn, được làm tròn.floating point numbers are represented in computer memory. Remember that numbers are stored in binary form. Decimal value of
>>> import os
>>> os.linesep
'\n'
74 turns out to have an infinite binary representation, which gets rounded.

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

Phương pháp này đơn giản và trực quan và sẽ hoạt động trong hầu hết mọi ngôn ngữ lập trình ngoài kia. Chưa kể, nó 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 thành thạo các kỹ thuật nâng cao hơn, nó khó có thể quay lại, bởi vì chúng cho phép bạn tìm lỗi nhanh hơn nhiều. Truy tìm là một quá trình thủ công tốn nhiều công sức, có thể cho phép nhiều lỗi hơn nữa. Chu kỳ xây dựng và triển khai cần có thời gian. Sau đó, bạn cần nhớ loại bỏ một cách tỉ mỉ tất cả các cuộc gọi

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 bạn đã thực hiện mà không vô tình chạm vào những cuộc gọi chính hãng.

Bên cạnh đó, nó đòi hỏi bạn phải thực hiện các thay đổi trong mã, điều này luôn luôn có thể. Có thể bạn đang gỡ lỗi một ứng dụng đang chạy trong một máy chủ web từ xa hoặc muốn chẩn đoán vấn đề theo kiểu sau khi chết. Đôi khi bạn chỉ đơn giản là không có quyền truy cập vào đầu ra tiêu chuẩn.post-mortem fashion. Sometimes you simply don’t have access to the standard output.

Đó chính xác là nơi ghi nhật ký tỏa sáng.

Đăng nhập

Hãy để giả vờ trong một phút rằng bạn đang điều hành một trang web thương mại điện tử. Một ngày nọ, một khách hàng tức giận gọi điện thoại phàn nàn về một giao dịch thất bại và nói rằng anh ta đã mất tiền. Anh ta tuyên bố đã thử mua một vài mặt hàng, nhưng cuối cùng, có một số lỗi khó hiểu đã ngăn anh ta hoàn thành thứ tự đó. Tuy nhiên, khi anh ta kiểm tra tài khoản ngân hàng của mình, tiền đã biến mất.

Bạn xin lỗi chân thành và hoàn lại tiền, nhưng cũng không muốn điều này xảy ra một lần nữa trong tương lai. Làm thế nào để bạn gỡ lỗi điều đó? Nếu chỉ có bạn có một số dấu vết của những gì đã xảy ra, lý tưởng nhất là dưới dạng một danh sách thời gian của các sự kiện với bối cảnh của họ.

Bất cứ khi nào bạn thấy mình đang thực hiện gỡ lỗi in, hãy xem xét biến nó thành các tin nhắn nhật ký vĩnh viễn. Điều này có thể giúp trong các tình huống như thế này, khi bạn cần phân tích một vấn đề sau khi nó xảy ra, trong một môi trường mà bạn không có quyền truy cập.

Có các công cụ tinh vi để tập hợp và tìm kiếm nhật ký, nhưng ở cấp độ cơ bản nhất, bạn có thể nghĩ về nhật ký dưới dạng tệp văn bản. Mỗi dòng truyền tải thông tin chi tiết về một sự kiện trong hệ thống của bạn. Thông thường, nó đã thắng được chứa thông tin nhận dạng cá nhân, mặc dù, trong một số trường hợp, nó có thể được ủy quyền theo luật.

Ở đây, một sự cố của một bản ghi nhật ký điển hình:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
38

Như bạn có thể thấy, nó có một hình thức có cấu trúc. Ngoài một thông điệp mô tả, có một vài trường có thể tùy chỉnh, cung cấp bối cảnh của một sự kiện. Ở đây, bạn có ngày và thời gian chính xác, mức nhật ký, tên logger và tên luồng.

Các cấp độ nhật ký cho phép bạn lọc tin nhắn nhanh chóng để giảm tiếng ồn. Ví dụ, nếu bạn đang tìm kiếm một lỗi, bạn không muốn xem tất cả các cảnh báo hoặc tin nhắn gỡ lỗi. Nó tầm thường để vô hiệu hóa hoặc bật tin nhắn ở một số mức nhật ký nhất định thông qua cấu hình mà không cần chạm vào mã.

Với việc ghi nhật ký, bạn có thể giữ các thông báo gỡ lỗi của mình tách biệt với đầu ra tiêu chuẩn. Tất cả các thông báo nhật ký đi đến luồng lỗi tiêu chuẩn theo mặc định, có thể thuận tiện hiển thị với các màu khác nhau. Tuy nhiên, bạn có thể chuyển hướng tin nhắn nhật ký sang các tệp riêng biệt, ngay cả đối với các mô -đun riêng lẻ!

Khá phổ biến, việc ghi nhật ký bị cấu hình sai có thể dẫn đến việc hết dung lượng trên đĩa máy chủ. Để ngăn chặn điều đó, bạn có thể thiết lập vòng quay nhật ký, sẽ giữ các tệp nhật ký trong một thời lượng được chỉ định, chẳng hạn như một tuần hoặc khi chúng đạt kích thước nhất định. Tuy nhiên, nó luôn luôn là một thực hành tốt để lưu trữ các bản ghi cũ hơn. Một số quy định thực thi rằng dữ liệu khách hàng được lưu giữ trong năm năm!log rotation, which will keep the log files for a specified duration, such as one week, or once they hit a certain size. Nevertheless, it’s always a good practice to archive older logs. Some regulations enforce that customer data be kept for as long as five years!

So với các ngôn ngữ lập trình khác, việc đăng nhập Python đơn giản hơn, bởi vì mô -đun

>>> import os
>>> os.linesep
'\n'
73 được gói với thư viện tiêu chuẩn. Bạn chỉ cần nhập và định cấu hình nó chỉ bằng hai dòng mã:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
39

Bạn có thể gọi các chức năng được xác định ở cấp mô -đun, được nối với bộ ghi gốc, nhưng nhiều thông thường hơn là có được một bộ ghi chuyên dụng cho mỗi tệp nguồn của bạn:root logger, but more the common practice is to obtain a dedicated logger for each of your source files:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
40

Ưu điểm của việc sử dụng logger tùy chỉnh là kiểm soát hạt mịn hơn. Họ thường được đặt tên theo mô -đun mà chúng được xác định thông qua biến

>>> import os
>>> os.linesep
'\n'
78.

Một lý do cuối cùng để chuyển từ hàm

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 sang ghi nhật ký là an toàn của luồng. Trong phần sắp tới, bạn sẽ thấy rằng trước đây không chơi tốt với nhiều chủ đề thực thi.

Gỡ lỗi

Sự thật là không theo dõi cũng như ghi nhật ký có 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 như sau:

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

Một trình gỡ lỗi thô thiển chạy trong thiết bị đầu cuối, không có tên là

>>> import os
>>> os.linesep
'\n'
80 cho Trình gỡ lỗi Python, được phân phối như một phần của thư viện tiêu chuẩn. Điều này làm cho nó luôn luôn có sẵn, 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ó.
>>> import os
>>> os.linesep
'\n'
80
for “The Python Debugger,” is distributed as part of the standard library. This makes it always available, so it may be your only choice for performing remote debugging. Perhaps that’s a good reason to get familiar with it.

Tuy nhiên, nó không đi kèm với một giao diện đồ họa, vì vậy sử dụng

>>> import os
>>> os.linesep
'\n'
80 có thể hơi khó khăn. Nếu bạn có thể chỉnh sửa mã, bạn phải chạy nó như một mô -đun và vượt qua vị trí tập lệnh của bạn:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
41

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

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
42

Điều này cho thấy một lời nhắc tương tác, có thể trông đáng sợ lúc đầu. Tuy nhiên, bạn vẫn có thể gõ Python bản địa tại 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, còn có một số ít các lệnh dành riêng cho trình gỡ lỗi mà bạn muốn sử dụng để bước qua mã.

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

>>> import os
>>> os.linesep
'\n'
82 tích hợp, thực hiện điều tương tự, nhưng theo cách nhỏ gọn hơn và với một số chuông và còi bổ sung:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
43

Bạn có thể 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ã cho hầu hết các phần. 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 rất nhiều IDE thay thế với các trình gỡ lỗi, cả được trả tiền và miễn phí.

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

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

In an toàn chủ đề

Tôi đã chạm vào một thời gian ngắn về vấn đề an toàn chủ đề trước đây, đề xuất

>>> import os
>>> os.linesep
'\n'
73 qua chức năng
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64. Nếu bạn vẫn đang đọc điều này, thì bạn phải thoải mái với khái niệm về chủ đề.

An toàn chủ đề có nghĩa là một đoạn mã có thể được chia sẻ một cách 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 chủ đề là chỉ chia sẻ các đối tượng bất biến. Nếu các chủ đề có thể sửa đổi một trạng thái đối tượng, thì không có nguy cơ phá vỡ tính nhất quán của nó.immutable objects only. If threads can’t modify an object’s state, then there’s no risk of breaking its consistency.

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 được bản sao của cùng một đối tượng. Bằng cách đó, các chủ đề khác có thể thấy những thay đổi được thực hiện trong chủ đề hiện tại.local memory, which makes each thread receive its own copy of the same object. That way, other threads can’t see the changes made to it in the current thread.

Nhưng điều đó không giải quyết được vấn đề, phải không? Bạn thường muốn các chủ đề của bạn hợp tác bằng cách có thể biến đổi một nguồn lực chung. 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à bằng cách khóa nó. Điều này cung cấp quyền 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.locking it. This gives exclusive write access to one or sometimes a few threads at a time.

Tuy nhiên, khóa là tốn kém và giảm thông lượng đồng thời, do đó, các phương tiện khác để kiểm soát 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.atomic variables or the compare-and-swap algorithm.

In in không an toàn cho Python. Hàm

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 giữ một tham chiếu đến đầu ra tiêu chuẩn, là một biến toàn cầu được chia sẻ. Về lý thuyết, vì không có khóa, một công tắc ngữ cảnh có thể xảy ra trong cuộc gọi đến
>>> import os
>>> os.linesep
'\n'
65, đan xen các bit văn bản từ nhiều cuộc gọi
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64.

Trong thực tế, tuy nhiên, điều đó không xảy ra. Cho dù bạn cố gắng thế nào, viết 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 là với các lần phá vỡ dòng lộn xộn:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
44

Để 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 thực hiện phương pháp

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
78 cơ bản đi ngủ trong một khoảng thời gian ngẫu nhiên. Làm sao? Bằng cách chế giễu nó, mà bạn đã biết từ một phần trước đó:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
45

Đầu tiên, bạn cần lưu trữ phương thức

Downloading: ubuntu.iso Bytes: 832569344
      8192  [0.00%]
     16384  [0.00%]
     24576  [0.00%]
     32768  [0.00%]
     40960  [0.00%]
     49152  [0.01%]
     57344  [0.01%]
     65536  [0.01%]
     73728  [0.01%]
     81920  [0.01%]
     90112  [0.01%]
     98304  [0.01%]
    106496  [0.01%]
    114688  [0.01%]
    122880  [0.01%]
    131072  [0.02%]
    139264  [0.02%]
    147456  [0.02%]
    155648  [0.02%]
    163840  [0.02%]
78 ban đầu trong một biến, mà bạn sẽ ủy thác cho sau này. Sau đó, bạn cung cấp triển khai giả mạo của bạn, sẽ mất đến một giây để thực hiện. Mỗi luồng sẽ thực hiện một vài cuộc gọi
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 với tên và một chữ cái: A, B và C.

Nếu bạn đọc phần chế giễu trước đây, thì bạn có thể đã có ý tưởng về lý do tại sao in các hành vi sai trái 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

>>> import os
>>> os.linesep
'\n'
91 của bạn. Bạn sẽ nhận thấy rằng bạn nhận được một chuỗi hơi khác nhau mỗi lần:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
46

Mặc dù bản thân

>>> import os
>>> os.linesep
'\n'
65 là một hoạt động nguyên tử, một cuộc gọi duy nhất đến hàm
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 có thể mang lại nhiều hơn một lần ghi. Ví dụ, các lần ngắt dòng được viết tách biệt với phần còn lại của văn bản và việc 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ự mới trở thành một phần không thể thiếu của thông điệp bằng cách xử lý nó theo cách thủ công:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
47

Điều này sẽ sửa chữa đầu ra:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
48

Tuy nhiên, lưu ý rằng chức năng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 vẫn tiếp tục thực hiện một cuộc gọi riêng cho hậu tố trống, điều này chuyển sang hướng dẫn vô dụng
>>> import os
>>> os.linesep
'\n'
95:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
49

Một phiên bản thực sự an toàn của chức năng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 có thể trông như thế này:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
50

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
51

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64, chỉ có 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 chờ:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
52

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

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

>>> import os
>>> os.linesep
'\n'
73 an toàn theo luồng theo thiết kế, đượ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:

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
53

Đó là một lý do khác tại sao bạn có thể không muốn sử dụng chức năng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 mọi lúc.

Cá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ề

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64! Tuy nhiên, chủ đề này sẽ hoàn thành mà không nói về các đối tác của nó một chút. Trong khi
python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 là về đầu ra, có các chức năng và thư viện cho đầu vào.

Built-In

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

>>> import os
>>> os.linesep
'\r'
02. 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:

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
54

Đó là một lý do khác tại sao bạn có thể không muốn sử dụng chức năng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 mọi lúc.

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
55

Các đối tác in Python

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
56

Đó là một lý do khác tại sao bạn có thể không muốn sử dụng chức năng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 mọi lúc.

Các đối tác in Python

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
57

Đó là một lý do khác tại sao bạn có thể không muốn sử dụng chức năng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 mọi lúc.

>>>

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
58

Đó là một lý do khác tại sao bạn có thể không muốn sử dụng chức năng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 mọi lúc.

Third-Party

Các đối tác in Python

  • Đị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 tác tự động hoàn thành
  • Hỗ trợ chuột
  • Các tiện ích được xác định trước như danh sách kiểm tra hoặc menu
  • Lịch sử tìm kiếm của các lệnh gõ
  • Cú pháp làm nổi bật

Chứng minh 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 thử chúng. Cá nhân tôi đã biết về một số trong số đó thông qua podcast Byte Python. Họ đây rồi:

  • >>> import os
    >>> os.linesep
    '\r'
    
    06
  • >>> import os
    >>> os.linesep
    '\r'
    
    07
  • >>> import os
    >>> os.linesep
    '\r'
    
    08
  • >>> import os
    >>> os.linesep
    '\r'
    
    09

Tuy nhiên, nó đáng để đề cập đến một công cụ dòng lệnh gọi là

>>> import os
>>> os.linesep
'\r'
10 có thêm khả năng chỉnh sửa dòng mạnh mẽ vào các tập lệnh Python của bạn miễn phí. Bạn không cần phải làm bất cứ điều gì cho nó để làm việc!

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

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
59

Thoạt nhìn, nó có vẻ như là một lời nhắc điển hình khi bạn chạy nó:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
60

Nhưng ngay khi bạn mắc lỗi và muốn sửa nó, bạn sẽ thấy rằng không có khóa chức năng nào hoạt động như mong đợi. Chẳng hạn, đánh vào mũi tên trái dẫn đến điều này thay vì di chuyển con trỏ trở lại:Left arrow, for example, results in this instead of moving the cursor back:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
61

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

>>> import os
>>> os.linesep
'\r'
10. Bạn không chỉ có các phím mũi tên hoạt động mà còn có thể tìm kiếm thông qua lịch sử liên tục của các lệnh tùy chỉnh, sử dụng tự động hoàn thành và chỉnh sửa dòng bằng các phím tắt:

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
62

Có phải là tuyệt vời không?

Sự kết luận

Bây giờ bạn được trang bị một cơ thể kiến ​​thức về chức năng

python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
64 trong Python, cũng như nhiều chủ đề xung quanh. Bạn có một sự hiểu biết sâu sắc về nó là gì và cách thức hoạt động của nó, 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ự tiến hóa của nó từ Python 2.

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

  • Tránh những sai lầm phổ biến với
    python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    64 trong Python
  • Đối phó với Newlines, mã hóa nhân vật và bộ đệm
  • Viết văn bản vào các tệp
  • Chế giễu chức năng
    python3 downloader.py -o ubuntu.iso -r http://releases.ubuntu.com/13.04/ubuntu-13.04-desktop-i386.iso
    
    64 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ả đ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 vấn đề trong mã của mình và bảo vệ chính 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 còn khát nước để biết thêm thông tin, có câu hỏi hoặc đơn giản là muốn chia sẻ suy nghĩ của bạn, thì hãy thoải mái tiếp cận trong phần bình luận bên dưới.

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để làm sâu sắc thêm sự hiểu biết của bạn: hàm python in (): vượt xa những điều cơ bản This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: The Python print() Function: Go Beyond the Basics

Việc sử dụng \ r trong Python là gì?

\ n cũng là một nhân vật thoát ra tạo ra một dòng mới. Trở lại vận chuyển hoặc \ r là một tính năng rất độc đáo của Python. \ r sẽ chỉ hoạt động khi bạn đã chuyển con trỏ của mình sang đầu chuỗi hoặc dòng.

Việc sử dụng hàm in () trong Python là gì?

Hàm python print () như tên cho thấy được sử dụng để in (các) đối tượng Python trong Python làm đầu ra tiêu chuẩn. Đối tượng (S): Nó có thể là bất kỳ đối tượng Python nào như chuỗi, danh sách, tuple, v.v. Nhưng trước khi in, tất cả các đối tượng được chuyển đổi thành chuỗi.

Trở về vận chuyển (R) trong Python là gì?

Trở về vận chuyển (R) trong Python là gì? Nó giúp chúng tôi di chuyển con trỏ ở đầu dòng mà không di chuyển con trỏ đến dòng mới. Các cách để sử dụng lợi nhuận vận chuyển, chúng tôi sẽ hiển thị tất cả các loại mà chúng tôi có thể sử dụng ‘R, trong Python.

Làm cách nào để chạy mã R trong tập lệnh Python?

Làm việc với R trong Python Phương pháp làm việc với R trong tập lệnh là sử dụng trường hợp robjects.r, cho phép chúng tôi sử dụng bảng điều khiển R. Trong trường hợp bạn đang tự hỏi làm thế nào chính xác hoạt động, nó là vì mô -đun RPY2 đang chạy ở hậu trường R nhúng. Trong khi phương pháp này có thể hoạt động cho một dòng mã duy nhất.

In là gì ('\ r') trong Python?

'\ r' có nghĩa là "đi đến đầu dòng".Đặt nó ở nơi bạn cần nó.go to the beginning of the line". Put it where you need it.

R () trong Python là gì?

R có nghĩa là chuỗi sẽ được coi là một chuỗi thô, điều đó có nghĩa là tất cả các mã thoát sẽ bị bỏ qua.Ví dụ: '\ n' sẽ được coi là một nhân vật mới, trong khi r '\ n' sẽ được coi là các ký tự \ theo sau là n.the string is to be treated as a raw string, which means all escape codes will be ignored. For an example: '\n' will be treated as a newline character, while r'\n' will be treated as the characters \ followed by n .

%D in in trong python là gì?

%D làm gì trong Python?Toán tử %D được sử dụng làm trình giữ chỗ để chỉ định các giá trị số nguyên, số thập phân hoặc số.Nó cho phép chúng tôi in các số trong chuỗi hoặc các giá trị khác.Toán tử %D được đặt trong đó số nguyên sẽ được chỉ định.Số điểm nổi được chuyển đổi tự động thành các giá trị thập phân.used as a placeholder to specify integer values, decimals, or numbers. It allows us to print numbers within strings or other values. The %d operator is put where the integer is to be specified. Floating-point numbers are converted automatically to decimal values.

Kết thúc r làm gì trong Python?

Sử dụng Trở lại vận chuyển "\ r" để in trên cùng một dòng Sử dụng in cú pháp (chuỗi, end = "\ r") để làm cho dòng stdout tiếp theo bắt đầu ở đầu dòng hiện tại.Do đó, chuỗi được ghi đè bởi câu lệnh in () sau.print over the same line Use the syntax print(string, end = "\r") to make the next stdout line begin at the beginning of the current line. As a result, string is overwritten by the following print() statement.