【Python 2 到 3 系列】 print 是函数
生活随笔
收集整理的這篇文章主要介紹了
【Python 2 到 3 系列】 print 是函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
v3.0 以前,print一直作為語法結構存在,他是python語法的一部分;這個理解起來可能有點蹩腳,但的確是這樣。
print 一直被定以為一個statement,也就是說,他跟return/try/while等等語法結構沒有概念上的區別,都必須在編譯階段解析并產生對應的op流。
statement 是由 expression組成的,expression可以包含expression,但不能包含statement。
所以,如下代碼產生了語法錯誤:
====================
>>> # python 2.7
>>> a = print 1
? File "<stdin>", line 1
? ? a = print 1
? ? ? ? ? ? ^
SyntaxError: invalid syntax
====================
v3.0 以后,print statement被取消,定義了一個內建函數print()。
現在,print的函數形態會令我們比較舒服,它看起來更像一個用戶于程序交互的功能函數,而不是怪異的語法結構。
雖然,print()函數不返回任何東西,雖然試圖獲取print()的返回值看起來很怪異,但它可以說明,print(1)是一個函數調用的expression,而不是print statement。
====================
>>> # python 3.2
>>> a = print(1)
1
>>> type(a)
<class 'NoneType'>
====================
并且,顯然的,a得到了一個返回值,返回值是空。
這不同于我們試圖訪問一個未初始化的變量,如下面的例子。
====================
>>> # python 3.2
>>> type(b)
Traceback (most recent call last):
? File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
====================
結論:
在v3.x里,以函數形態存在的print()必須用括號包裹參數列才能編譯通過,它的使用可以出現在任何函數可以出現的地方,需要考慮的只有返回值是否有意義。
在v2.x里,print作為statement,可以使用帶括號也可以不帶括號使用,但決不能存在于expression里。
print 一直被定以為一個statement,也就是說,他跟return/try/while等等語法結構沒有概念上的區別,都必須在編譯階段解析并產生對應的op流。
statement 是由 expression組成的,expression可以包含expression,但不能包含statement。
所以,如下代碼產生了語法錯誤:
====================
>>> # python 2.7
>>> a = print 1
? File "<stdin>", line 1
? ? a = print 1
? ? ? ? ? ? ^
SyntaxError: invalid syntax
====================
v3.0 以后,print statement被取消,定義了一個內建函數print()。
現在,print的函數形態會令我們比較舒服,它看起來更像一個用戶于程序交互的功能函數,而不是怪異的語法結構。
雖然,print()函數不返回任何東西,雖然試圖獲取print()的返回值看起來很怪異,但它可以說明,print(1)是一個函數調用的expression,而不是print statement。
====================
>>> # python 3.2
>>> a = print(1)
1
>>> type(a)
<class 'NoneType'>
====================
并且,顯然的,a得到了一個返回值,返回值是空。
這不同于我們試圖訪問一個未初始化的變量,如下面的例子。
====================
>>> # python 3.2
>>> type(b)
Traceback (most recent call last):
? File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
====================
結論:
在v3.x里,以函數形態存在的print()必須用括號包裹參數列才能編譯通過,它的使用可以出現在任何函數可以出現的地方,需要考慮的只有返回值是否有意義。
在v2.x里,print作為statement,可以使用帶括號也可以不帶括號使用,但決不能存在于expression里。
轉載于:https://www.cnblogs.com/lanqiu5ge/p/9472243.html
總結
以上是生活随笔為你收集整理的【Python 2 到 3 系列】 print 是函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery validation re
- 下一篇: sql server中创建链接服务器图解