Python có in ra thiết bị xuất chuẩn không?

Tóm lược. Bộ đệm đầu ra của Python là quá trình lưu trữ đầu ra của mã của bạn trong bộ nhớ đệm. Khi bộ đệm đầy, đầu ra sẽ được hiển thị trên màn hình đầu ra tiêu chuẩn. Bộ đệm được bật theo mặc định và bạn có thể sử dụng một trong các phương pháp sau để tắt tính năng này

  • Thực thi mã Python bằng công tắc dòng lệnh -u, ví dụ như python -u code.py
  • Sử dụng từ khóa flush
  • Sử dụng sys.stdout.flush()
  • Quấn
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 
    0 trong
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 
    1 và đặt kích thước bộ đệm thành 0
  • Đặt
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 
    2 thành một chuỗi không trống

Vấn đề. Đưa ra một chương trình Python;

Tổng quan về bộ đệm đầu ra Python

Python có in ra thiết bị xuất chuẩn không?

Trước khi tìm hiểu bộ đệm trong ngữ cảnh của Python, chúng ta nên suy nghĩ về ý nghĩa của bộ đệm trong cuộc sống thực? . Khi bạn ở trong một tình huống căng thẳng, bạn tìm đến ai hoặc điều gì như một lựa chọn để giảm bớt căng thẳng? . Vì vậy, họ là "bộ đệm" của tôi chống lại căng thẳng

Theo định nghĩa từ điển, vùng đệm là người hoặc vật làm giảm chấn động hoặc tạo thành rào cản giữa những người hoặc vật không tương thích hoặc đối kháng. Đây chính xác là những gì một bộ đệm thực hiện khi nói đến một ngôn ngữ lập trình như Python (mặc dù nó không phải là một người trong trường hợp này)

Về mặt khoa học máy tính, có thể coi bộ đệm là lớp trung gian đảm bảo dữ liệu được truyền từ vị trí này sang vị trí khác trong hệ thống một cách hiệu quả hơn. Ví dụ: nếu bạn đang tải xuống tệp 100 MB và 1 MB được ghi vào đĩa cứng tại một thời điểm, điều đó có nghĩa là nó sẽ yêu cầu tổng cộng 100 lần ghi trên đĩa. Tuy nhiên, một bộ đệm có thể đảm bảo rằng mỗi lần 10 MB được ghi vào đĩa và theo cách này, chỉ cần 10 lần ghi đĩa

Ưu điểm và nhược điểm

Từ tình huống trên, chúng ta đã biết cách bộ đệm có thể hoạt động như một tài nguyên trung gian và giảm số lần ghi đĩa, từ đó nâng cao hiệu quả ghi và quản lý bộ nhớ. Tuy nhiên, khi nói đến ngôn ngữ lập trình, bộ đệm cũng có nhược điểm. Chúng tôi không thể thấy đầu ra trong thời gian thực. Điều này không tạo ra nhiều sự khác biệt trong trường hợp các chương trình đơn giản hoặc ngắn nhưng trong các chương trình phức tạp và dài đòi hỏi nhiều tính toán, điều này có thể trở thành một nhược điểm lớn vì chúng ta có thể cần một đầu ra chi tiết hơn thay vì toàn bộ đầu ra được hiển thị tại

Thí dụ. Hãy xem xét chương trình sau đây mà chúng ta sẽ so sánh các đầu ra có bộ đệm và không có bộ đệm

for buffer in range(20):
    print(buffer, end=" ")

Chúng tôi biết rằng Đầu ra là một dãy số từ 0 đến 19, nghĩa là

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 

Nhưng chúng tôi quan tâm nhiều hơn đến việc hiểu bản chất của đầu ra. Nếu tính năng đệm được bật, bạn sẽ nhận được đầu ra ngay lập tức trên màn hình sau khi đợi 19 giây. Tuy nhiên, khi tắt tính năng đệm, các số sẽ được hiển thị lần lượt sau mỗi 2 giây

Bạn có thể thử điều này trong trình bao tương tác của chúng tôi

Bài tập. Bạn quan sát hành vi nào?

Làm cách nào để vô hiệu hóa bộ đệm đầu ra trong Python?

Theo mặc định, bộ đệm đầu ra được bật trong Python. Chúng ta hãy xem các cách khác nhau để chúng ta có thể vô hiệu hóa bộ đệm đầu ra trong python

Phương pháp 1. Chạy Python với đối số dòng lệnh -u

Nếu bạn muốn bỏ qua bộ đệm cho toàn bộ chương trình thì giải pháp đơn giản nhất để thực hiện việc này là chạy chương trình của bạn bằng giao diện dòng lệnh và sử dụng công tắc -u để bỏ qua bộ đệm. Cú pháp để vô hiệu hóa bộ đệm thông qua dòng lệnh là

python -u filename.py

đầu ra

Python có in ra thiết bị xuất chuẩn không?

Phương pháp 2. Sử dụng từ khóa Flush

Nếu bạn muốn bỏ qua bộ đệm cho các dòng mã cụ thể của mình, chuyển từ khóa flush làm đối số cho câu lệnh in là một lựa chọn tốt. Theo mặc định, đối số tuôn ra được đặt là

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 
5. Để đảm bảo rằng bộ đệm đầu ra bị vô hiệu hóa, đối số tuôn ra phải được đặt thành
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 
6

Chúng ta hãy xem ví dụ sau để hiểu cú pháp và cách sử dụng của từ khóa flush

________số 8_______

đầu ra

Python có in ra thiết bị xuất chuẩn không?

Phương pháp 3. sử dụng sys. tiêu chuẩn. tuôn ra()

Sử dụng sys.stdout.flush() buộc chương trình xóa bộ đệm. Do đó, mọi thứ trong bộ đệm sẽ được hiển thị trên đầu ra tiêu chuẩn ngay lập tức

Chúng ta hãy xem cách hoạt động của sys.stdout.flush() trong chương trình sau

import time
import sys


for buffer in range(20):
    print(buffer, end=" ")
    sys.stdout.flush()
    time.sleep(2)

đầu ra

Python có in ra thiết bị xuất chuẩn không?

Phương pháp 4. gói hệ thống. thiết bị xuất chuẩn bằng cách sử dụng TextIOWrapper và đặt kích thước bộ đệm = 0

Một cách tiếp cận khác để vô hiệu hóa bộ đệm đầu ra trong python là mở

python -u filename.py
0 ở chế độ ghi với kích thước bộ đệm được đặt thành 0 (không có bộ đệm) và sau đó gói nó bằng TextIOWrapper để đảm bảo rằng bạn nhận được luồng TextIO chứ không phải đối tượng tệp nhị phân. Ngoài ra, bạn phải đảm bảo kích hoạt write_through để loại bỏ tất cả bộ đệm

Chúng ta hãy xem đoạn mã sau để hiểu rõ hơn về lời giải thích trên

# open the stdout file descriptor in write mode and set 0 as the buffer size: unbuffered
import io
import os
import sys
import time

try:
    # open stdout in binary mode, then wrap it in a TextIOWrapper and enable write_through
    sys.stdout = io.TextIOWrapper(open(sys.stdout.fileno(), 'wb', 0), write_through=True)
    # for flushing on newlines only use :
    # sys.stdout.reconfigure(line_buffering=True)
except TypeError:
    # In case you are on Python 2
    sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

print("Enter a Line: ")
line = sys.stdin.readline()
for i in line:
    print(i, end=" ")
    time.sleep(2)

đầu ra

Python có in ra thiết bị xuất chuẩn không?

Phương pháp 5. Đặt biến môi trường Python PYTHONUNBUFFERED

Khi biến

python -u filename.py
1 được đặt thành một chuỗi không trống, nó tương đương với tùy chọn dòng lệnh -u

Phần kết luận

Tôi hy vọng bài viết này đã giúp bạn có cái nhìn tổng quan về bộ đệm đầu ra của Python và các phương pháp để vô hiệu hóa nó. Mời các bạn theo dõi để biết thêm nhiều bài viết thú vị

Đi đâu từ đây?

Đủ lý thuyết. Hãy thực hành một số

Các lập trình viên được trả sáu con số trở lên vì họ có thể giải quyết vấn đề hiệu quả hơn bằng cách sử dụng trí thông minh máy móc và tự động hóa

Để trở nên thành công hơn trong việc viết mã, hãy giải quyết nhiều vấn đề thực tế hơn cho người thực. Đó là cách bạn trau dồi những kỹ năng bạn thực sự cần trong thực tế. Rốt cuộc, việc sử dụng lý thuyết học tập mà không ai cần là gì?

Bạn xây dựng các kỹ năng mã hóa có giá trị cao bằng cách làm việc trên các dự án mã hóa thực tế

Bạn có muốn ngừng học với các dự án đồ chơi và tập trung vào các dự án mã thực tế giúp bạn kiếm tiền và giải quyết các vấn đề thực sự cho mọi người không?

🚀 Nếu câu trả lời của bạn là CÓ. , cân nhắc trở thành nhà phát triển Python tự do. Đó là cách tốt nhất để tiếp cận nhiệm vụ cải thiện kỹ năng Python của bạn—ngay cả khi bạn là người mới hoàn toàn

Nếu bạn chỉ muốn tìm hiểu về cơ hội làm việc tự do, vui lòng xem hội thảo trên web miễn phí của tôi “Cách xây dựng kỹ năng Python có thu nhập cao của bạn” và tìm hiểu cách tôi phát triển công việc viết mã của mình trực tuyến cũng như cách bạn có thể làm được—từ sự thoải mái của bạn

Tham gia hội thảo trên web miễn phí ngay bây giờ

Python có in ra thiết bị xuất chuẩn không?

Shubham Sayon

Tôi là một người tạo nội dung và Blogger Python chuyên nghiệp. Tôi đã xuất bản nhiều bài báo và tạo các khóa học trong một khoảng thời gian. Hiện tại tôi đang làm việc với tư cách là một freelancer toàn thời gian và tôi có kinh nghiệm trong các lĩnh vực như Python, AWS, DevOps và Networking

Bản in Python có tuôn ra không?

Phương thức in của Pythons dưới dạng thuộc tính độc quyền cụ thể là flush cho phép người dùng quyết định xem anh ta có muốn đầu ra của mình được lưu vào bộ đệm hay không. Giá trị mặc định của giá trị này là Sai có nghĩa là đầu ra sẽ được lưu vào bộ đệm. Nếu bạn thay đổi nó thành true, đầu ra sẽ được viết dưới dạng một chuỗi ký tự nối tiếp nhau.

Bản in Python có in ra thiết bị xuất chuẩn không?

print() và Standard Out. Mọi chương trình đang chạy đều có một vùng đầu ra văn bản được gọi là "tiêu chuẩn" hoặc đôi khi chỉ là "thiết bị xuất chuẩn". Hàm print() của Python nhận dữ liệu python chẳng hạn như số nguyên và chuỗi, rồi in các giá trị đó ra tiêu chuẩn .

Bản in có đi đến thiết bị xuất chuẩn không?

StdOut xóa đầu ra tiêu chuẩn sau mỗi lệnh gọi print() để văn bản sẽ xuất hiện ngay lập tức trong thiết bị đầu cuối.

đầu ra tuôn ra có nghĩa là gì?

Xuất đầu ra trên luồng được đệm có nghĩa là truyền tất cả các ký tự tích lũy vào tệp . Có nhiều trường hợp khi đầu ra được lưu vào bộ đệm trên luồng được tự động xóa. Khi bạn cố gắng thực hiện đầu ra và bộ đệm đầu ra đã đầy.