在Python中使用变量赋值中的条件

时间:2015-02-12 16:45:27

标签: python variable-assignment

我想在Python中使用变量赋值中的条件,就像我在C#中一样。

myLang = lang=='en' ? 'en' : lang=='ger' ? 'de' : 'fa';

我发现this question表示Python有这种分类。

num1 = (20 if someBoolValue else num1)

但我无法弄清楚它在我的案例中是如何运作的。 是否可以在Python中执行类似的操作?

3 个答案:

答案 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'