用于更改变量值的 if 语句结构的 Pythonic 方式?

Pythonic way to structure if statement for changing variable values?

正如标题所说,编写以下代码的 pythonic 方式是什么?

if x == 1:
    myvar = "a string"
elif x == 2:
    myvar = "another string"
elif x == 3:
    myvar = "yet another string"
else:
    raise Exception("arg x must be 1, 2 or 3")

上面的做法似乎有点笨拙,而且对于更长的例子,更费时和凌乱。

你想为此使用字典:

x = 3 # Then try with 4

outcome_dict = {1: "some string", 2: "another string", 3: "yet another string"}

my_var = outcome_dict.get(x)

if my_var is None:
    raise Exception("arg x must be 1, 2 or 3")

print(my_var)

如果找不到密钥,dict.get() 方法将 return None。在这个例子中,所有的结果都需要在 outcome_dict 中手动输入,但在实践中,很容易为成千上万的键创建字典:一行代码中的值对,例如词典理解 或只是常规 for 循环。

除了@roganjosh 的解决方案,您还可以尝试使用tryexcept

dict_values = {1: "some string", 2: "another string", 3: "yet another string"}

# Using for x = 3
x = 3

try:
    print (outcome_dict[x])
except:
    print ("arg x must be 1, 2 or 3")
# yet another string

# Using for x = 4
x = 4

try:
    print (outcome_dict[x])
except:
    print ("arg x must be 1, 2 or 3")
# arg x must be 1, 2 or 3