在python 2中,print是乙個語句(statement);而在python 3中變成了函式(function)。很多python使用者都會問,為什麼python 3將print變成了函式呢?本文就是python核心開發者brett cannon對此的解釋。
今年初python決定遷移到github,就是由brett cannon徵求python社群的意見後作出的。他對此也作出了解釋。在python 2中,print語句最簡單的使用形式就是
print a
,這相當於執行了sys.stdout.write(str(a) + '\n')
。如果你以逗號為分隔符,傳遞額外的引數(argument),這些引數會被傳遞至str()
函式,最終列印時每個引數之間會空一格。例如,print a, b, c
相當於sys.stdout.write(' '.join(map(str, [a, b, c])) + '\n')
。如果print語句的最後再加上乙個逗號,那麼就不會再新增斷行符(\n
),也就是說:print a
相當於sys.stdout.write(str(a))
。
從 2.0版本開始,python引入了print >>
的語法,作用是重定向print
語句最終輸出字串的檔案。例如,print >> output, a
相當於output.write(str(a) + '\n')
。
如果用python來實現print函式,它的函式定義應該是這樣的:
importsysdef
print(*
objects
,sep
=none
,end
=none
,file
=none
,flush
=false
):"""a python translation of the c code for builtins.print().
"""if
sepis
none
:sep
=' '
ifend
isnone
:end='
\n'iffile
isnone
:file
=sys
.stdout
file
.write
(sep
.join
(map
(str
,objects))+
end)
ifflush
:file
.flush
()
從上面的**中,我們可以發現:python 3中的print函式實現了print語句的所有特性。
print a == print(a)print a, b, c == print(a, b, c)
print a, == print(a, end='')
print >> output, a == print(a, file=output)
從上面的示例**中我們就可以看出,使用print函式有明顯的好處:與使用print語句相比,我們現在能夠指定其他的分隔符(separator)和結束符(end string)。
將print變成函式的真正巧妙之處在與靈活性,但這點並不容易被人發覺。print成為函式之後,給python使用者和python開發團隊帶來了很大的靈活性。對於使用者來說,這可以讓你把print
當作表示式(expression)使用;相比之下,print語句就只能作為語句使用。舉個例子,假設你想在每一行後面列印乙個省略號(ellipsis),表示這行尚未結束。使用print語句的話,你有兩種選擇:
# 手動實現 ...print a, '...'
# 可復用的實現(這種方式也適用於print函式) ...
def ellipsis_print(*args):
for arg in args:
print arg, '',
print '...'
但是在python 3中,你可以選擇更好的解決方式:
# 手動實現 ...print(a
,end
='...\n'
)# 多個可復用的解決方案,利用print語句無法實現...
ellipsis_print
=lambda
*args,**
kwargs
:print(*
args,**
kwargs
,end
='...\n'
)# 或者 ...
import
functools
ellipsis_print
=functools
.partial
,end
='...\n'
)
對於python開發團隊來說,他們不必再從語法層面來實現print
的相關功能了。例如,如果你想讓print
語句也一樣可以靈活地支援指定分隔符,你要怎樣去實現呢?這會是乙個相當難解決的設計難題。但是如果print變成了函式,只需要新增乙個引數就解決了。在python中,函式可以接受任意數量的引數,這比從底層實現語法帶來的靈活性要大的多。
我們還要注意,語法實現應該僅限於那些非這樣做不可的功能,或者是以語法形式實現後,大幅提高了可讀性的功能。在print
這個案例中,print a
與print(a)
之間的區別可以忽略不計,因此並沒有影響可讀性。而且,由於我們能夠完全將print
語句替換為函式,對於python語言的功能性也沒有損失。這就是為什麼將print
變成函式的原因。
譯者:earlgrey@程式設計派
為什麼print在Python 3中變成了函式?
譯者 earlgrey 程式設計派 在python 2中,print是乙個語句 statement 而在python 3中變成了函式 function 很多python使用者都會問,為什麼python 3將print變成了函式呢?本文就是python核心開發者brett cannon對此的解釋。今年...
Python之print語句Python的注釋
print語句可以向螢幕上輸出指定的文字。比如輸出 hello,world 用 實現如下 print hello,world print語句也可以跟上多個字串,用逗號 隔開,就可以連成一串輸出 print the quick brown fox jumps over the lazy dog the...
在python中最常見的 print的真正用法
一 print 函式概述 print 方法用於列印輸出,是python中最常見的乙個函式。該函式的語法如下 print objects,sep end n file sys.stdout 引數的具體含義如下 print 1 數值型別可以直接輸出 執行結果如下 1 print hello world ...