【问题标题】:Pythonic way to structure if statement for changing variable values?Pythonic 构造 if 语句以更改变量值的方法?
【发布时间】:2019-03-27 23:48:23
【问题描述】:

正如标题所说,编写以下代码的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")

上述操作似乎有点笨拙,对于更长的示例,更耗时且混乱。

【问题讨论】:

  • 对于更长的例子,你想使用字典
  • 这段代码非常好,而且是pythonic。是的,如果它太长,请使用 dict,但这是 IMO 规模的最佳方式
  • @roganjosh ...其中“更长”就像 3+。

标签: python python-3.x pep


【解决方案1】:

您想为此使用字典:

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() 方法将返回 None。在此示例中,所有结果都需要手动输入 outcome_dict,但实际上,在一行代码中很容易为数千个键:值对创建字典,例如字典理解或只是常规的for 循环。

【讨论】:

  • 你是一员。不错的一个 +1
【解决方案2】:

除了@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

【讨论】:

  • 我也喜欢这种方法的简洁性。 +1 虽然可能只是我,但根据 PEP8,你不应该有 except KeyError 吗?
  • @Jab:当然可以。不过个人风格。谢谢你的支持
猜你喜欢
  • 2011-04-14
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多