我想在Python中使用变量赋值中的条件,就像我在C#中一样。
myLang = lang=='en' ? 'en' : lang=='ger' ? 'de' : 'fa';
我发现this question表示Python有这种分类。
num1 = (20 if someBoolValue else num1)
但我无法弄清楚它在我的案例中是如何运作的。 是否可以在Python中执行类似的操作?
答案 0 :(得分:5)
是的,有可能:
myLang = 'en' if lang == 'en' else 'de' if lang == 'ger' else 'fa'
单个条件表达式的真假表达式只是更多的表达式。您可以在该位置放置另一个条件表达式。
如果它更容易阅读,您可以在表达式周围加上括号,以便在视觉上对它们进行分组。 Python并不需要这些,因为条件表达式有very low operator precedence;只有lambda
更低。
用括号表示:
myLang = 'en' if lang == 'en' else ('de' if lang == 'ger' else 'fa')
然而,有更好的方法可以将lang
映射到两个字符串。使用字典,例如:
language_mapping = {'en': 'en', 'ger': 'de'}
myLang = language_mapping.get(lang, 'fa')
默认为'fa'
,除非lang
值在映射中,使用dict.get()
method。
答案 1 :(得分:3)
在代码中执行此操作的问题在于,它是硬编码的。用数据代替。
langmap = {
'en': 'en',
'ger': 'ge'
}
...
myLang = langmap.get(lang, 'fa')
...
虽然德语的缩写为“de”(代表“deutsche”),而不是“ge”。
答案 2 :(得分:1)
C#代码被解释为:
myLang = lang=='en' ? 'en' : (lang=='ger' ? 'ge' : 'fa');
为Python做同样的事情:
myLang = 'en' if lang=='en' else ('ge' if lang=='ger' else 'fa')
或没有括号:
myLang = 'en' if lang=='en' else 'ge' if lang=='ger' else 'fa'