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

Using conditions in variable assignments in Python

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

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

我发现 this question 说 Python 有这种分配。

num1 = (20 if someBoolValue else num1)

但我不知道它在我的情况下是如何工作的。 是否可以在 Python 中做类似的事情?

是的,有可能:

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.

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'

在代码中执行此操作的问题在于它是硬编码的。改为在数据中执行。

langmap = {
  'en': 'en',
  'ger': 'ge'
}

 ...
myLang = langmap.get(lang, 'fa')
 ...

虽然德语的缩写是"de"(代表"deutsche"),而不是"ge"。