爲什麼print
是python中的關鍵字而不是函數?爲什麼print不是python中的函數?
回答
因爲Guido已經決定他犯了一個錯誤。 :)
它已經得到糾正:嘗試Python 3,它專用section of its release notes來描述對函數的更改。
整個背景,請參閱PEP 3105和其參考文獻部分提供的幾個鏈接!
我還沒有用Python 3修飾過。 print關鍵字仍然工作嗎? – user538442 2010-12-10 22:38:49
不是。現在這是一個功能。在簡單的情況下,'print'foo「'變成'print(」foo「)' – 2010-12-10 22:43:46
在」now a function「中更正:) – 2010-12-10 22:43:59
現在是在Python 3
似乎有些奇怪,它需要10年以上的時間才能糾正它 – user538442 2010-12-10 22:38:09
@user:這不一定是時間問題,而是一個兼容性問題,無論是向前還是向後。 – 2010-12-10 22:56:20
@ user538442:向後兼容性是一個婊子:( – delnan 2010-12-10 22:56:20
功能在Python 2.x中的print
語句具有一些特殊的語法,這將不是一個普通的函數可用。例如,您可以使用尾部,
來抑制最終換行符的輸出,或者可以使用>>
將輸出重定向到文件。但是,所有這些都不足以讓Guido van Rossum自己保留一個聲明 - 他在Python 3.x中將print
轉換爲函數。
呃,現在這是開始有意義的。 – user538442 2010-12-10 22:39:31
因此,額外的功能現在丟失,但如果尾隨和>> – user538442 2010-12-10 22:39:59
它仍然存在,但現在你使用'end ='和'file ='關鍵字參數,而不是特殊的語法。 – dan04 2010-12-10 22:45:11
print
爲 Python中的語句,因爲它是在美國廣播公司,爲Python的主要靈感的聲明(儘管它被稱爲WRITE
那裏)。這反過來可能有一個聲明,而不是一個功能,因爲它是一種教學語言,因此受到基本的啓發。另一方面,Python原來不僅僅是一種教學語言(儘管它也很好)。
不過,現在的print
是的一個函數。是的,在Python 2中,你也可以做
from __future__ import print_function
並且你已經設置好了。自Python 2.6起作用。
,從我欣賞對print
語句,但不一定是從Python的官方歷史,繪製一個答案......
Python是,在一定程度上,一個腳本語言。現在,有很多「腳本語言」的定義,但我將在這裏使用的是:爲有效使用簡短或交互式程序而設計的語言。這樣的語言傾向於允許單行程序而沒有過多的樣板文件;使鍵盤輸入更容易(例如,避免過多的標點符號);併爲常見任務提供內置語法(方便儘可能犧牲純度)。在Python的情況下,打印一個值是非常常見的事情,特別是在交互模式下。要求print
是一個功能,這似乎在這裏不必要的麻煩。有99%的時間做正確的事情的特殊語法的錯誤風險要低得多。
通過這個參數'input'也需要一個語句。 – steffen 2015-05-12 13:47:24
我會在我的心中扔在此:
在Python 2.x的print
不是錯誤的陳述,或因爲打印到stdout
是這樣做的一個基本的東西。其他的事情都是如此認真思考,或者至少有一個可以理解的理由,那就是這個訂單的錯誤看起來很奇怪。如果與stdout
通信本來就是如此基本,與stdin
溝通將必須同樣重要,但input()
是一個功能。
如果你看看list of reserved keywords和list of statements哪些不是表達式,print
明顯突出顯示,這是另一個暗示,必須有非常具體的原因。
我認爲print
有是一個語句,而不是一個表達式,以避免在input()
安全漏洞。請記住,Python2中的input()
可評估用戶輸入的任何內容,如stdin
。如果用戶鍵入print a
和a
包含所有密碼的列表,那將是安靜的災難性的。
顯然,input()
評估表達式的能力被認爲比print
是一個正常的內置函數更重要。
- 1. jQuery中的$ .print()是什麼?
- 2. 的Python 3 print()函數
- 3. 爲什麼在這種情況下print()函數不打印
- 4. 爲什麼使用java -jar調用print函數時不打印?
- 5. Lua中print(0x1e1)的輸出是什麼?爲什麼?
- 6. print()是做什麼的?
- 7. 爲什麼print('\ n')* 100在Python 3.3中不起作用?
- 8. 爲什麼「echo'2'。print(2)+ 3」print 521?
- 9. Python全局函數像'print'
- 10. 爲什麼Python 3.2中的print()似乎默認爲UTF-8?
- 11. python中itertools.izip的逆函數是什麼?
- 12. python中的系統函數是什麼
- 13. python中zip的反函數是什麼?
- 14. 爲什麼print(print())在Lua中不能像print(type(2))那樣工作?
- 15. Python:爲什麼我不能做的理論:print(i.extend(j))
- 16. 如何檢查我的函數print/echo是什麼?
- 17. python 3中print(x)`和print(* x)`有什麼區別?
- 18. Python的print語句中的%運算符稱爲什麼?
- 19. 爲什麼print(「\ 0007」)不發出嗶聲?
- 20. 爲什麼print語句不被執行?
- 21. Python:爲什麼print語句和subprocess.call()輸出不同步?
- 22. 爲什麼Java PrintStream必須重載其print()函數?
- 23. 爲什麼Python中的函數是錯誤的?
- 24. 在Python中,爲什麼函數中的exec不會導入?
- 25. 爲什麼CanvasRenderingContext2D.createLinearGradient()不是靜態函數?
- 26. 爲什麼lambda不是函數
- 27. 爲什麼.val()不是函數?
- 28. 爲什麼Firebug說toFixed()不是函數?
- 29. 爲什麼顯示res.login不是函數?
- 30. 爲什麼javascript getTime()不是函數?
請參閱http://www.python.org/dev/peps/pep-3105/ – jfs 2010-12-10 22:39:12
有趣;從未認爲這是一個問題,但很好的問題。 – 2010-12-10 22:41:34
readln和writeln也是在Turbo Pascal中內置的。永遠不要理解爲什麼,而且我更喜歡C來讓它們變得更好。 – sashoalm 2014-04-24 11:42:13