Можно ли добиться того же результата, что и в приведенном ниже коде, без создания временной переменной и без использования оператора if? Я пробовал несколько вещей, но я новичок в Python.
def get_value(dictionary, key):
temp = dictionary.get(key)
if temp = None:
return "Sorry this item doesn't exist"
else:
return temp
то есть того, чего я пытаюсь достичь
def get_value(dictionary, key):
return dictionary.get(key) else return "Sorry this item doesn't exist"
if temp is None
предпочтительнее if temp == None
(при условии, что =
- это всего лишь опечатка для ==
).
Я не уверен, что это вообще хорошая идея ... Предположим, вы звоните в get_value({"a": "Sorry this item doesn't exist"}, "a")
. Возвращаемое значение будет "Sorry this item doesn't exist"
. Но как узнать, вернул ли он фактическое значение, принадлежащее dict, или ваше отказоустойчивое сообщение?
Еще один паттерн, который вы увидите, - это что-то вроде return dictionary.get(key) or "Sorry this item doesn't exist"
как своего рода неудачный оператор слияния нуля. Однако будьте осторожны, потому что все ложные значения, такие как []
, 0
или False
, будут возвращать вашу строку по умолчанию.
@Kevin Это хороший момент, я никогда об этом не думал, спасибо.
Вы можете указать значение по умолчанию при вызове get()
в словаре. Попробуй это:
def get_value(dictionary, key):
default = "Sorry this item doesn't exist"
return dictionary.get(key, default)
Сработало отлично! Спасибо
Возврат строки вместо None
является чем-то вроде анти-шаблона, поскольку нет способа отличить "Sorry this item doesn't exist"
как сообщение об ошибке или как фактическое значение, связанное с данным ключом. Вместо этого создайте исключение.
def get_value(dictionary, key):
try:
return dictionary[key]
except KeyError:
raise Exception("Sorry, this item doesn't exist")
Вы можете определить собственное исключение вместо Exception
. Также подумайте, действительно ли ваше исключение добавляет что-нибудь ценное по сравнению с KeyError
, уже созданным dict.__getitem__
.
else
-> except
?
return dictionary.get(key, "Sorry this item doesn't exist")
?