在Python中,你也可以把表達式當做一條語句來用——自己獨佔一行。但因爲表達式的值不會被保留,所以只有當有意義的時候才這樣做。常見於下列兩種情況:
爲了調用函數或方法:
一些函數和方法完成自己的功能之後不需要返回值,可以通過表達式語句調用這些函數或方法。
爲了在交互式提示符中打印值:
Python返回輸入交互式命令行的表達式的值,其實這些也是表達式語句,服務於 print 語句
常見的表達式語句形式:
上表中的後兩個有一點特殊,print
在Python3.x中是一個函數並且時長獨佔一行;yield
在生成器中也時常作爲一個語句;這兩種都是表達式語句的實例。
例如, 雖然在3.X中print
作爲表達式語句單獨一行調用,它像其他函數調用一樣返回一個值(返回值是None,沒有任何意義)
>>> x = print('spam')
spam
>>> print(x)
None
並且要銘記,在Python中儘管表達式可以以語句的形式出現,但是語句並不能用作表達式。非表達式語句只能單獨一行出現,不能嵌套在其他更大的語法結構中。例如:Python不允許將賦值語句=
嵌套在其他表達式中。這麼做是爲了避免常見的錯誤,如你不能通過=
突然改變一個變量的值當你真正想做的是==
相等驗證。
有一個常見的錯誤,表達式語句常用作列表方法去就地改變列表(in-place change)
>>> L = [1, 2]
>>> L.append(3)
>>> L
[1, 2, 3]
但是,對於新手來說把這樣的操作寫成賦值語句的形式的情況並不罕見
>>> L = L.append(4)
>>> print(L) #已經關閉了列表L
None
儘管這並不會報錯,調用一個就地改變的操作例如append
sort
reverse
往往會就地改變列表,這些方法並不會返回一個改變過的列表,而是返回的None對象,而如果再賦值給列表,往往會關閉列表(會被Python的垃圾回收機制回收)