為什麼print在Python 3中變成了函式?

2021-07-13 17:25:11 字數 3043 閱讀 5675

在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函式,它的函式定義應該是這樣的:

import

sysdef

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

(print

,end

='...\n'

)

對於python開發團隊來說,他們不必再從語法層面來實現print的相關功能了。例如,如果你想讓print語句也一樣可以靈活地支援指定分隔符,你要怎樣去實現呢?這會是乙個相當難解決的設計難題。但是如果print變成了函式,只需要新增乙個引數就解決了。在python中,函式可以接受任意數量的引數,這比從底層實現語法帶來的靈活性要大的多。

我們還要注意,語法實現應該僅限於那些非這樣做不可的功能,或者是以語法形式實現後,大幅提高了可讀性的功能。在print這個案例中,print aprint(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 ...