![](/img/trans.png)
[英]Python: difference between `a,b=[1,2],a` and `a=[1,2]; b=a`?
[英]Difference between max([a for a in [1,2]]) and max(a for a in [1,2]) in Python 3
我發現他們都會輸出預期的結果2
。
max([a for a in [1,2]])
是max()
+ list comprehension
,一個簡單的。
max(a for a in [1,2])
是max()
+ ?
. 為什么有效? 我們將a for a in [1,2]
的結構命名為什么?
生成器的形式為(a for a in [1,2])
。 我懷疑(a for a in [1,2])
內部max(a for a in [1,2])
是一個生成器。 但是,如果是這樣,為什么可以忽略一對()
呢? 從技術上講,它應該是max((a for a in [1,2]))
。
謝謝。
那實際上是一個生成器表達式。 生成器表達式可以使用參數列表中的()
; 前提是它們是傳遞給函數的唯一參數。 如果有更多參數,它們需要自己的一對括號。
您可以通過快速測試自行驗證:
def func(arg):
print(type(arg))
func(n for n in range(10)) # Prints <class 'generator'>
來自PEP 289 :
語法要求生成器表達式始終需要直接位於一組括號內,並且兩邊不能有逗號。 . . . [I]fa 函數調用有一個位置參數,它可以是一個沒有額外括號的生成器表達式,但在所有其他情況下,你必須將它加上括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.