自Python3.0起,Python中的print關(guān)鍵字被移除,想要便捷地打印字符串,可以使用print()函數(shù)。
雖然Python2.7支持了
print()函數(shù),但是卻沒有移除type(print)是會報錯的。In [1]: type(print) File "<ipython-input-1-961b0c77d407>", line 1 type(print) ^ SyntaxError: invalid syntax
print關(guān)鍵字和函數(shù)的使用對比
打印一個對象
關(guān)鍵字版本:
print x
函數(shù)版本:
print(x)
打印多個對象
關(guān)鍵字版本:
print x, y, z
函數(shù)版本:
print(x, y, z)
設(shè)置重定向
關(guān)鍵字版本:
print >> sys.stderr, "xxx"
with open("test.log", "w") as f:
print >> f, "test line"
函數(shù)版本:
print(x, file=sys.stderr)
with open("test.log", "w") as f:
print("test line", file=f)
設(shè)置分隔符
關(guān)鍵字版本:
print x, y # 分隔符只能是單個空格
函數(shù)版本:
print(x, y, step=",") # 通過step設(shè)置想要的分隔符,默認仍然是單個空格
設(shè)置結(jié)束符
關(guān)鍵字版本:
print x
print x, # 結(jié)束符只能是單個空格或者換行符
函數(shù)版本:
print(x, end="\n") #通過end設(shè)置想要的結(jié)束符
設(shè)置刷新輸出流
關(guān)鍵字版本:
print x # 因為只能以換行符結(jié)束,所以默認每次執(zhí)行print語句都刷新輸出流
函數(shù)版本:
print(x, flush=False) #通過flush設(shè)置是否刷新輸出流,一旦輸出流中包含換行符就馬上刷新輸出流。需要注意默認的結(jié)束符是換行符,所以實際上默認也是直接刷新輸出流
利用print函數(shù)實現(xiàn)一個命令行動畫
print_load.py
import time
def load():
for i in range(1, 101):
print('{0:>3d}% '.format(i)+'#'*i+'-'*(100-i), end='', flush=True)
print('\x08'*106, end='') # 這是顯示文本式動畫的訣竅所在:使用退格符(或者\r)把光標(biāo)移回來
time.sleep(0.1)
print(' ' * 106 + '\x08' * 106, end='') # 使用空格清除狀態(tài)消息,把光標(biāo)移回開頭
if __name__ == '__main__':
load()
運行命令python3 print_load.py將會看到不斷加載進度的命令行動畫
print函數(shù)替換關(guān)鍵字的原因
這一切可以在2006年被提出的PEP3105中找到。
- 打印功能是唯一一個使用關(guān)鍵字實現(xiàn)的應(yīng)用程序級別的功能。在Python的世界里,關(guān)鍵字通常是功能實現(xiàn)的最后的手段。
- 使用
print()可以實現(xiàn)更復(fù)雜的打印輸出格式(雖然format函數(shù)也提供格式化功能)。并且重定向文件時表示得更清晰易懂。 - 相比關(guān)鍵字,函數(shù)的迭代更加方便,兼容性更佳。
-
print關(guān)鍵字的分隔符不能變換,這點極其不便。 -
print()以函數(shù)的形式呈現(xiàn),是一個概念上的巨大飛躍。這意味著我們可以輕易聯(lián)想到,將字符串輸出到sys.stdout或其他文件來理解它,工作流程類似于文件讀寫。