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

Python in không xuống dòng: Những điều bạn cần biết

Kiểm soát đầu ra của print trong Python để tránh tự động xuống dòng. Tìm hiểu cách ghi đè hành vi xuống dòng mặc định bằng tham số end, mô-đun sys và phép nối chuỗi.
· 7 phút đọc

Khám phá cùng AI

Hàm print() trong Python thường được dùng để hiển thị đầu ra trên bảng điều khiển. Mặc định, print() của Python sẽ thêm một ký tự xuống dòng ở cuối đầu ra, khiến lần in tiếp theo bắt đầu trên một dòng mới. 

Dù hành vi này tiện lợi trong một số trường hợp, bạn cũng cần hiểu những tình huống muốn in mà không thêm dòng mới. Trong hướng dẫn này, chúng ta sẽ xem cách dùng tham số end, mô-đun sys và phép nối chuỗi để in mà không thêm dòng mới.

Trước khi bắt đầu, tôi khuyến nghị bạn học khóa Introduction to Python của DataCamp để nắm vững kiến thức cơ bản về Python cho khoa học dữ liệu và phân tích. Ngoài ra, hãy xem hướng dẫn A Comprehensive Guide on How to Line Break in Python của chúng tôi để tìm hiểu hành vi ngược lại, tức là dùng \n để thêm ngắt dòng trong chuỗi và câu lệnh print().

Cách in không xuống dòng trong Python

Để in mà không thêm dòng mới trong Python, bạn có thể dùng tham số end trong hàm print(). Nếu đặt end là chuỗi rỗng, đầu ra sẽ tiếp tục trên cùng một dòng.

# Print without newline
print("Hello", end=" ")
print("World", end=" ")
Hello World

Lưu ý rằng chúng ta dùng hai hàm print() ở đây. Điều này có thể lạ với người mới bắt đầu, nhưng lại là một kỹ thuật quan trọng. Mỗi lần gọi print() vẫn có thể kiểm soát đầu ra riêng bằng tham số end. Trong ví dụ này, đặt end=” “ sẽ thêm một khoảng trắng sau mỗi chuỗi thay vì xuống dòng, cho phép câu lệnh print() thứ hai tiếp tục trên cùng một dòng.

Cách làm này đặc biệt hữu ích khi bạn cần in nhiều đoạn văn bản hoặc biến theo thời gian, nhưng muốn tất cả xuất hiện trên cùng một dòng với định dạng cụ thể (như khoảng trắng hoặc dấu câu ở giữa).

Vì sao cần in không xuống dòng trong Python?

Trong Python, in không xuống dòng nghĩa là kiểm soát đầu ra sao cho không thêm ký tự xuống dòng \n sau mỗi lần gọi print(). Hiểu cách ghi đè hành vi này rất quan trọng để tạo đầu ra có kiểm soát. Dưới đây là một số ví dụ nơi cần đầu ra liên tục.

  • Chỉ báo tiến độ: Cập nhật tiến độ hoặc thanh tiến trình cần đầu ra liên tục để theo dõi theo thời gian thực.
  • Ghi log: Ghi log và giám sát cũng cần in trên các dòng liên tục để dễ đọc hơn.
  • Ứng dụng console tương tác: Hiển thị một số đầu ra của người dùng trên cùng một dòng giúp cải thiện trải nghiệm.

Nếu bạn muốn chuyển trọng tâm từ việc kiểm soát đầu ra trên console sang cách thêm, quản lý và loại bỏ ký tự xuống dòng trong văn bản và tệp, hãy xem hướng dẫn Python New Line: Methods for Code Formatting để biết kỹ thuật và ví dụ.

In không xuống dòng: Python 2 so với Python 3

Để đảm bảo bạn in đầu ra mà không thêm dòng mới, bạn có thể dùng tham số end hoặc các phương pháp khác để ghi đè hành vi mặc định của hàm print(). 

Dùng tham số end trong Python 3

Trong Python phiên bản 3, bạn nên thêm tham số end vào mỗi lần gọi hàm print() để in mà không thêm dòng mới. Nếu đặt end là chuỗi rỗng, đầu ra sẽ tiếp tục trên cùng một dòng, như trong ví dụ dưới đây.

Bạn cũng có thể đặt tham số end thành một ký tự hoặc chuỗi khác. Ví dụ dưới đây minh họa cách điều chỉnh tham số end trong nhiều lần gọi print() để kiểm soát cách định dạng đầu ra.

# Print without newline
print("Hello ", end="World!")
print(" Learn DataCamp Python tutorial.")
Hello World! Learn DataCamp Python tutorial.

Ví dụ sau minh họa việc dùng tham số end với chuỗi rỗng để in cập nhật tiến độ mà không xuống dòng. Trong ví dụ này, \r đưa con trỏ về đầu dòng, cho phép cập nhật đầu ra ngay tại chỗ.

 # Import the time module, which provides time-related functions like sleep()
import time
# Loop over a range of numbers from 1 to 5 (inclusive)
for i in range(1, 6):
    # Print a loading message with a percentage that updates on the same line
    print(f"\rLoading... {i*20}%", end="")
    # Pause the execution for 1 second to simulate a loading delay
    time.sleep(1)
print("\nDone!")
Loading... 20%
Loading... 40%
Loading... 60%
Loading... 80%
Loading... 100%
Done!

Khi chạy đoạn mã trên trong môi trường Python, bạn sẽ thấy phần trăm tải được cập nhật mỗi giây trên cùng một dòng, tạo thành một chỉ báo tiến độ đơn giản. Hãy xem khóa học Writing Functions in Python của chúng tôi nếu bạn cần trợ giúp viết hàm, như ví dụ ở trên.

Khám phá hành vi xuống dòng trong Python 2

Trong Python 2, câu lệnh print khác và mặc định thêm dòng mới. Bạn có thể thêm dấu phẩy ở cuối câu lệnh print để in mà không xuống dòng.

# Print without newline
print "Hello",
print "World"
Hello World

Điểm hạn chế của cách này là thêm khoảng trắng thừa giữa các mục được in, khác với Python 3 nơi bạn có thể kiểm soát ký tự được thêm vào đầu ra.

Các kỹ thuật Python khác để in không xuống dòng

Python cung cấp một số phương pháp nâng cao để in mà không xuống dòng. Các phương pháp này chủ yếu dùng để kiểm soát đầu ra cho các tình huống in phức tạp.

Kết hợp tham số end và sep

Hai tham số end và sep có thể dùng cùng nhau để định dạng phức tạp hơn. Trong các trường hợp như vậy, tham số sep thường kiểm soát cách phân tách nhiều mục khi truyền vào hàm print(). Ví dụ dưới đây phân tách các chuỗi khác nhau bằng dấu phẩy thông qua tham số sep.

# Print without newline
print("Hello", "World", sep=", ", end="!")
Hello, World!

Kết hợp tham số end và sep hữu ích trong các tình huống như định dạng dữ liệu dạng bảng hoặc tạo chỉ báo tiến độ để cải thiện trải nghiệm người dùng nhờ trình bày dữ liệu tốt hơn.

Sử dụng mô-đun sys

Hàm sys.stdout.write() từ mô-đun sys cung cấp cách in mà không tự động thêm dòng mới. Phương pháp in này thường quan trọng khi cần kiểm soát đầu ra chính xác, như thiết kế chỉ báo tiến độ và hiển thị log theo thời gian thực.

Ví dụ dưới đây cho thấy cách in không xuống dòng bằng mô-đun sys. Lưu ý rằng chúng tôi dùng hàm sys.stdout.flush() để xả bộ đệm đầu ra thủ công nhằm đảm bảo văn bản được hiển thị ngay. Cách tiếp cận này quan trọng khi hiển thị vòng lặp và các ứng dụng thời gian thực.

# Import the sys module
import sys
# Print without new line
sys.stdout.write("Hello, ")
sys.stdout.write("World!")
sys.stdout.flush()
Hello, World!

Phép nối chuỗi như một cách tiếp cận thay thế

Phép nối chuỗi cũng có thể được dùng để ghép nhiều đầu ra trước khi in, tránh cần nhiều câu lệnh print() và đảm bảo không có dòng mới được thêm giữa các đầu ra. Ví dụ dưới đây minh họa cách nối chuỗi để in đầu ra trong một câu lệnh duy nhất.

# Print without new line using string concatenation
output = "Hello" + " " + "World." + " Learn Python."
print(output)
Hello World. Learn Python.

Kết luận

In không xuống dòng hữu ích khi hiển thị đầu ra trên một dòng liên tục. Tùy phiên bản Python, có những cách in khác nhau mà không thêm dòng mới.

Nếu bạn muốn cải thiện kỹ năng Python, tôi khuyến nghị khóa Python Toolbox của DataCamp, dạy về iterator và vòng lặp, những nội dung đã được gợi mở trong bài viết này. Các lộ trình nghề nghiệp Python Developer và Data Analyst with Python sẽ giúp bạn bắt kịp xu hướng khi xây dựng các kỹ năng thực tiễn gắn với công việc của nhà khoa học dữ liệu hoặc nhà phân tích.

Allan Ouko

Tác giả

Allan Ouko

Biên tập viên kỹ thuật về Khoa học dữ liệu với kinh nghiệm thực tế trong phân tích dữ liệu, trí tuệ doanh nghiệp và khoa học dữ liệu. Tôi viết nội dung thực tiễn, tập trung vào ngành về SQL, Python, Power BI, Databricks và kỹ thuật dữ liệu, dựa trên công việc phân tích trong thế giới thực. Bài viết của tôi kết nối chiều sâu kỹ thuật với tác động kinh doanh, giúp các chuyên gia chuyển đổi dữ liệu thành những quyết định vững chắc.

Câu hỏi thường gặp về Python

Làm thế nào để in không xuống dòng trong Python?

Bạn có thể thêm tham số end với chuỗi rỗng trong hàm print() để in mà không thêm dòng mới.

Hành vi mặc định của hàm print() là gì?

Mặc định, hàm print() sẽ thêm một dòng mới sau mỗi đầu ra.

Phương pháp in không xuống dòng trong Python có hỗ trợ ở Python 2 và 3 không?

Trong Python 3, bạn có thể dùng tham số end trong hàm print() để in không xuống dòng. Trong Python 2, bạn phải thêm dấu phẩy sau câu lệnh print để in không xuống dòng.

Vì sao tôi bị thêm khoảng trắng thừa trong đầu ra sau khi dùng dấu phẩy phân tách trong Python 2?

Trong Python 2, một khoảng trắng thừa mặc định được thêm giữa các mục được in sau khi dùng dấu phẩy để in không xuống dòng. Tôi khuyến nghị dùng các phương pháp thay thế khác để kiểm soát ký tự được thêm vào đầu ra.

Việc in không xuống dòng có ảnh hưởng đến hiệu năng không?

In không xuống dòng hầu như không ảnh hưởng đến hiệu năng. Bạn có thể dùng sys.stdout.write() từ mô-đun sys để cải thiện hiệu năng khi xử lý dữ liệu lớn.

Chủ đề

Liên quan