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

2021-09-19 11:04:48 字數 2782 閱讀 2693

譯者:earlgrey@程式設計派

在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 sys

def print(*objects, sep=none, end=none, file=none, flush=false):

"""a python translation of the c code for builtins.print().

"""

if sep is none:

sep = ' '

if end is none:

end = '\n'

if file is none:

file = sys.stdout

file.write(sep.join(map(str, objects)) + end)

if flush:

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變成函式的原因。

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

在python 2中,print是乙個語句 statement 而在python 3中變成了函式 function 很多python使用者都會問,為什麼python 3將print變成了函式呢?本文就是python核心開發者brett cannon對此的解釋。今年初python決定遷移到github...

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 ...