大家好!今天我們來聊聊Python裏最 “平平無奇” 卻又無處不在的print()函數。
作為Python開發者,我們幾乎每天都在用它,但你真的瞭解它的所有玩法嗎?
其實很多時候,我們只用了它 10% 的功力。
今天,我們就來扒一扒 print 函數的“隱秘角落”。
掌握了它的幾個參數,保證讓你在同事眼中瞬間變身 Python 資深玩家!
1. 基礎玩法:不僅僅是打印一個字符串
如果你把鼠標懸停在 print 函數上,你會發現它的第一個參數其實是 *args(或者叫 *objects)。
那個星號 * 意味着它是 “貪婪” 的--你可以給它塞進一個,甚至無數個對象。
比如:
# 普通玩家
print("毛肚")
print("鴨腸")
print("雪花肥牛")
# 進階玩家:一次性打印多個
print("毛肚", "鴨腸", "雪花肥牛")
# 輸出:毛肚 鴨腸 雪花肥牛
更酷的是,如果你有一個列表,你可以直接通過解包(Unpacking)把它“炸”開傳給 print:
hotpot_list = ["蝦滑", "寬粉", "娃娃菜"]
print(hotpot_list)
# 輸出:['蝦滑', '寬粉', '娃娃菜']
# 加上星號 * 進行解包
print(*hotpot_list)
# 輸出:蝦滑 寬粉 娃娃菜
加上*號,列表的方括號沒了,逗號也沒了,直接變成了清爽的空格分隔。
2. 拒絕千篇一律的空格:sep 參數
細心的你可能發現了,上面打印多個元素時,默認是用空格隔開的。
如果你想打印一個日期,或者生成一個 CSV 格式的字符串,空格就顯得很尷尬了。
這時候,sep(separator 分隔符)參數閃亮登場。
比如:格式化日期
year = 2026
month = 1
day = 15
# 默認情況
print(year, month, day)
# 輸出:2026 1 15 (不太好看)
# 使用 sep 參數
print(year, month, day, sep="-")
# 輸出:2026-1-15 (這就對了!)
或者生成一個豎線分割的標題樣式:
print("Python", "Java", "C++", sep=" | ")
# 輸出:Python | Java | C++
只要你願意,分隔符可以是任何字符,甚至是一段話。
3. 控制結尾的藝術:end 參數
默認情況下,print 函數是個“急性子”,每打印完一次,它都會自動幫我們敲一個回車換行(\n)。
這就是為什麼我們連續寫三個 print,它們會顯示在三行。
但有時候,我們想把兩句話連在一起,或者在同一行輸出內容,這時就需要 end 參數出馬了。
print("兇手其實是", end="......")
print("管家!")
# 輸出:兇手其實是......管家!
這樣,兩行代碼的輸出無縫銜接在了一起。
注意: 如果你把 end 設置為空字符串或者非換行符,記得在最後適當地加一個換行,否則你的終端提示符可能會尷尬地擠在文字後面。
4. 偷偷記筆錄:file 參數
這是很多初學者最容易忽略的參數。
print 默認是將內容輸出到 sys.stdout(也就是你的屏幕/控制枱),但其實,它完全可以把內容“打印”到文件裏。
這就相當於你自己寫了一個迷你版的日誌記錄器(Logger),非常適合快速調試或記錄腳本運行結果。
# 打開一個文件用於追加內容
with open("摸魚日誌.txt", "a", encoding="utf-8") as f:
print("10:00 - 喝了一杯咖啡", file=f)
print("10:30 - 刷了一會兒推特", file=f)
print("11:00 - 盯着屏幕發呆", file=f)
print("日誌記錄完畢,請查看 摸魚日誌.txt")
運行完這段代碼,控制枱只會顯示最後一句提示,而你的 “摸魚記錄” 已經悄悄保存在了 txt 文件裏。
雖然對於大型項目我們推薦用 logging 模塊,但在這個腳本寫的小工具裏,用 file 參數簡直不要太方便。
5. 拒絕卡頓,實時刷新:flush 參數
最後這個參數 flush,常常讓新手摸不着頭腦。
計算機為了效率,通常會有 “緩衝區” 的概念。
當你 print 東西時,它不一定會立刻顯示在屏幕上,而是攢夠了一波再一起吐出來(特別是當你沒有換行的時候)。
這會導致有時候你寫了代碼,屏幕卻像卡死了一樣半天沒反應。
如果你想做一個倒計時或者進度條,就需要將 flush 設置為 True,強制計算機:“別攢了,立刻給我顯示出來!”
import time
print("正在入侵系統", end="")
for i in range(5):
print(".", end="", flush=True) # 關鍵在這裏!
time.sleep(0.5)
print("\n入侵成功!")
如果你不加 flush=True,你可能會發現屏幕卡頓了 2.5 秒,然後一次性蹦出五個點。
加上之後,你就能看到那種 “嘟...嘟...嘟...” 的動態加載效果了。
6. 總結
雖然在 90% 的日常開發中,我們只需要最簡單的 print(x),但編程的樂趣往往隱藏在剩下的 10% 裏。
*args:讓你可以一次打印多個寶貝,或者解包列表。sep:讓你自定義元素之間的膠水。end:讓你控制話有沒有説完(換不換行)。file:讓你把話悄悄説給文件聽。flush:讓你拒絕延遲,即刻兑現。
掌握了這些,下次有機會就給同事露一手!
Happy Coding!