2010-12-10 18 views
10

爲什麼print是python中的關鍵字而不是函數?爲什麼print不是python中的函數?

+2

請參閱http://www.python.org/dev/peps/pep-3105/ – jfs 2010-12-10 22:39:12

+0

有趣;從未認爲這是一個問題,但很好的問題。 – 2010-12-10 22:41:34

+0

readln和writeln也是在Turbo Pascal中內置的。永遠不要理解爲什麼,而且我更喜歡C來讓它們變得更好。 – sashoalm 2014-04-24 11:42:13

回答

12

因爲Guido已經決定他犯了一個錯誤。 :)

它已經得到糾正:嘗試Python 3,它專用section of its release notes來描述對函數的更改。

整個背景,請參閱PEP 3105和其參考文獻部分提供的幾個鏈接!

+0

我還沒有用Python 3修飾過。 print關鍵字仍然工作嗎? – user538442 2010-12-10 22:38:49

+2

不是。現在這是一個功能。在簡單的情況下,'print'foo「'變成'print(」foo「)' – 2010-12-10 22:43:46

+0

在」now a function「中更正:) – 2010-12-10 22:43:59

2

現在是在Python 3

+0

似乎有些奇怪,它需要10年以上的時間才能糾正它 – user538442 2010-12-10 22:38:09

+1

@user:這不一定是時間問題,而是一個兼容性問題,無論是向前還是向後。 – 2010-12-10 22:56:20

+4

@ user538442:向後兼容性是一個婊子:( – delnan 2010-12-10 22:56:20

1

功能在Python 2.x中的print語句具有一些特殊的語法,這將不是一個普通的函數可用。例如,您可以使用尾部,來抑制最終換行符的輸出,或者可以使用>>將輸出重定向到文件。但是,所有這些都不足以讓Guido van Rossum自己保留一個聲明 - 他在Python 3.x中將print轉換爲函數。

+0

呃,現在這是開始有意義的。 – user538442 2010-12-10 22:39:31

+0

因此,額外的功能現在丟失,但如果尾隨和>> – user538442 2010-12-10 22:39:59

+5

它仍然存在,但現在你使用'end ='和'file ='關鍵字參數,而不是特殊的語法。 – dan04 2010-12-10 22:45:11

8

print Python中的語句,因爲它是在美國廣播公司,爲Python的主要靈感的聲明(儘管它被稱爲WRITE那裏)。這反過來可能有一個聲明,而不是一個功能,因爲它是一種教學語言,因此受到基本的啓發。另一方面,Python原來不僅僅是一種教學語言(儘管它也很好)。

不過,現在的print的一個函數。是的,在Python 2中,你也可以做

from __future__ import print_function 

並且你已經設置好了。自Python 2.6起作用。

1

,從我欣賞對print語句,但不一定是從Python的官方歷史,繪製一個答案......

Python是,在一定程度上,一個腳本語言。現在,有很多「腳本語言」的定義,但我將在這裏使用的是:爲有效使用簡短或交互式程序而設計的語言。這樣的語言傾向於允許單行程序而沒有過多的樣板文件;使鍵盤輸入更容易(例如,避免過多的標點符號);併爲常見任務提供內置語法(方便儘可能犧牲純度)。在Python的情況下,打印一個值是非常常見的事情,特別是在交互模式下。要求print是一個功能,這似乎在這裏不必要的麻煩。有99%的時間做正確的事情的特殊語法的錯誤風險要低得多。

+0

通過這個參數'input'也需要一個語句。 – steffen 2015-05-12 13:47:24

0

我會在我的心中扔在此:

在Python 2.x的print不是錯誤的陳述,或因爲打印到stdout是這樣做的一個基本的東西。其他的事情都是如此認真思考,或者至少有一個可以理解的理由,那就是這個訂單的錯誤看起來很奇怪。如果與stdout通信本來就是如此基本,與stdin溝通將必須同樣重要,但input()是一個功能。

如果你看看list of reserved keywordslist of statements哪些不是表達式,print明顯突出顯示,這是另一個暗示,必須有非常具體的原因。

我認爲print是一個語句,而不是一個表達式,以避免在input()安全漏洞。請記住,Python2中的input()可評估用戶輸入的任何內容,如stdin。如果用戶鍵入print aa包含所有密碼的列表,那將是安靜的災難性的。

顯然,input()評估表達式的能力被認爲比print是一個正常的內置函數更重要。

相關問題