2014-02-19 91 views
2

比方說,我們有以下幾點:Python:別名If-Else條件語句?

my_condition = True 
print('AAA' if my_condition else 'BBB') 

輸出將是:

AAA


相反,如果my_condition成爲False

my_condition = False 
print('AAA' if my_condition else 'BBB') 

輸出將是:

BBB


現在,可以說,我希望把同樣的if my_condition else 'BBB'在一堆不同的打印功能的結束。

有沒有辦法去聲明別名?

所以不是:

my_condition = True 
print('AAA' if my_condition else 'BBB') 

我想是這樣的:

myStatement = if my_condition else 'BBB'  

my_condition = True 
print('AAA' myStatement) 

除,因爲我已經發現了,這是行不通的。 是否有可能將此If-Else語句別名?

編輯 我應該提到,我跑這對Python 2.7版,不過 我確實體會到3.X的解決方案。

+0

不完全,沒有。但是你可以寫一個函數來實現,然後調用它。 – BrenBarn

+0

是的,條件將永遠是相同的。我試圖在我的程序中實現一個調試功能,除非我已經啓用調試,否則我不確定要顯示的打印功能。 – brianjason

回答

5

使用lambda表達式

y = lambda x: x if my_condition else 'BBB' 
print(y('AAA')) 
1

如果my_condition始終是一個實際bool,你可以這樣做

>>> base_case = ["BBB"] 
>>> my_condition = True 
>>> print((base_case + ["AAA"])[my_condition]) 
AAA 
>>> my_condition = False 
>>> print((base_case + ["AAA"])[my_condition]) 
BBB 

,但我建議不要它,因爲它看起來非常unpythonic我。

2

看來你想要一個功能,有很多方法來獲得你想要的結果。

這一個是非常相似的,你已經嘗試過什麼:

foo = lambda x: x if condition else "BBB" 
print (foo("AAA")) 

這是一個lambda expression

當然,你總是可以用良好的老式功能走:

def foo(x): 
    return x if condition else "BBB" 

而且你有另一種選擇(這將是我的最愛):

比方說,你有那一堆名單你想要打印的文字,爲什麼要寫很多打印?你可以使用list comprehensions

foo = ["hola","que","tal"]; 

[print(x if my_condition else "BBB") for x in foo] 

此外,如果你想鴕鳥政策「BBB」要始終把「其他」選項:

foo = [("hola","pues"),("que","nada"),("tal","bien")] 

[print(x if my_condition else y) for (x,y) in foo] 

Note this won't work in Python 2.X,因爲在2.X print是一個聲明,不是功能。

+0

Ups!沒有注意到你不想在同一個地方同時打印所有的照片,所以列表的補充不適合你的需求,對不起。 – JJGuerrero

+0

好的,這真的很好。我嘗試實現'foo = lambda x:x if condition else「BBB」print(foo(「AAA」))'但是,正如你所預料的那樣,它在2.X中對我不起作用。會碰巧有一個組合的2.X/3.X解決方案嗎? – brianjason

+0

這段代碼應該工作,不管你使用什麼版本,我的意思是列表解析(抱歉,沒有明確指出)你得到的錯誤是什麼?無論如何,使它工作(在列表解析中,正如我所說,lambda表達式應該工作),你可以使用'from __future__ import print_function'來獲取print作爲函數,或者你可以簡單地'import sys'並使用'sys.stdout .write('hola')' – JJGuerrero