2014-10-17 48 views
0

我嘗試做以下事情:Python中使用函數,如果

myChain = myChain(a,b) if a & b else "do_nothing" 

有沒有辦法做到這一點這樣?

或者我應該堅持平時:

if a & b: 
    myChain = myChain(a,b) 

謝謝!

+1

_「有沒有這樣做的方法?」_是的,做到這一點的方式就是你做到這一點。換句話說,你的第一個代碼塊是完全有效的語法。 (使用'&'而不是'和'有點不尋常,並且用局部變量遮蓋了myChain函數,但兩者都是合法的) – Kevin 2014-10-17 13:26:49

+0

您在版本2中缺少'else'的情況,所以任何隨後對'myChain'的引用都將引用該函數,而不是*其結果(在相關說明中,**不給出相同的名稱)。 – jonrsharpe 2014-10-17 13:29:13

回答

2

如果你只是想辦法做你的第二個代碼塊中的一行,你可以刪除換行符:

if a & b: myChain = myChain(a,b) 

如果你絕對不希望使用if語句,你可以使用像您在第一個代碼塊中那樣執行條件表達式。但這是一種不尋常的方式。

myChain = myChain(a,b) if a & b else myChain 
1

我想這取決於你要做什麼;你是否有意將「do_nothing」分配給myChain?這就是兩者都可以做到的。如果這沒關係,那麼你很好 - 否則,可能會更喜歡

if a and b: 
    myNewChain = myChain(a, b) #why assign to the same name as the function/class? 
else: 
    myNewChain = None 

...或任何None實際上應該是。

如果你正在使用流控制 - 它看起來像你可能是,給定字符串的名稱 - 通常不鼓勵這樣做,只是因爲當有三元運算符時人們期望看到賦值。無論這樣做是否存在實際問題,我都無法確定。