在函式引數表中括號有作用嗎?

時間 2021-06-09 04:11:15

1樓:RednaxelaFX

不起題主所想像的作用。

題主想通過括號來改變求值順序。可惜這個想法離現實有點差距。

(Python裡括號也可以用來構造元組(tuple)。很明顯題主並不是想構造元組而是想改變求值順序。)

Python規定了表示式的求值順序是從左向右:

5. Expressions

5.14. Evaluation order

Python evaluates expressions from left to right. Notice that while evaluating an assignment, the right-hand side is evaluated before the left-hand side.(有些語言是特意不指定表示式的求值順序,而Python是指定了的。

)然後Python裡運算子有優先順序的區別,所以下面的表示式:a+

b*c會先計算b * c,再計算a與其之和。

如果把它畫成抽象語法樹(AST)會更明顯:

+ / \

ab c

離根越遠就會越早被求值。由於乘法的優先順序比加法高,所以它會更優先結合在一起,就變得遠離根了。

同時Python允許使用括號來改變表示式裡的優先順序:(a

+b)*

c就會先計算a + b,再將其與c相乘。對應的AST會是:

c / \

a b

可見,使用括號之後,a + b變得更遠離根了,於是就會先被求值。

然而,括號能改變優先順序的範圍僅限於乙個表示式有多個運算子參與的情況。

在函式呼叫的場景中,引數列表是逗號分隔的表示式;這些分隔引數用的逗號在此已經處於最低優先順序了。所以在下面的例子裡:

foo(a,

b,c)

無論a、b、c加不加括號,對應的AST總是:

fooa b c

a、b、c總是處於同等地位(離根一樣遠),括號幫不上忙;這裡就還是按照Python表示式的從左向右求值順序,先對a求值,然後b,最後c。

至於題主問的:

能否讓第二個引數先執行然後得到

3 4這樣的結果?正解當然是不要試圖這樣寫咯,而是:

defshow(a

,b):

print(a

,b)mystack=[

1,2,

3,4]

b=mystack

.pop

()show

(mystack

.pop(),

b)要誰先求值的話,寫前面就好了。這樣別人讀著也更自然。

最後放倆傳送門給題主:

python中輸入函式的引數是什麼作用?

Bu.xing 感覺你問的是python中的input 函式。input 函式的功能之一是為使用者創造一種控制程式走向的選擇權力,此時其引數的作用多用於提示性的文字引數,示例如下 print 您想要什麼飲料?a.咖啡 b.奶茶 inpu input 請您做出選擇 a b if inpu a prin...

C 中的constexpr函式有什麼作用?

C十十20年 新標準不是這樣描述的,參見 C 程式設計精要教程 介紹的2017標準,primer好像是2011標準。其實質含義是,當呼叫該函式用常量作為實參時,編譯程式應盡量根據函式體計算出其返回值,該值若在編譯時能計算出來,它也是乙個作為返回值的常量。因此,這樣的函式和呼叫可被優化掉,而不存在於編...

冷兵器在現代戰爭中是否有作用?

1982年的馬島戰爭留給世人最深印象的莫過於阿根廷空軍以 飛魚 飛彈對英國 謝菲爾德 號驅逐艦的致命一擊,但同樣是在這場戰爭期間的一場戰鬥卻鮮為人知,英軍為奪取阿軍在朗頓山上的據點,突然發起刺刀衝鋒,以29人陣亡的代價,消滅對方50人,成功奪下阿軍陣地。22年後的2004年5月14日,來自薩瑟蘭高地...