Pythonic способ структурировать, если заявление для изменения значений переменных? - PullRequest
0 голосов
/ 28 марта 2019

Как видно из заголовка, каков питонский способ написания следующего кода?

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")

Кажется немного неуклюжим делать вышеизложенное, а для более длинных примеров это намного сложнее и грязнее.

Ответы [ 2 ]

5 голосов
/ 28 марта 2019

Вы хотите использовать словарь для этого:

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 голос
/ 28 марта 2019

В дополнение к решению @ roganjosh, вы также можете попробовать использовать try и except.

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
...