Есть ли ярлык Python для проверки и назначения переменных? - PullRequest
7 голосов
/ 30 июля 2009

Я часто набираю следующее (разрабатываю для Django, если это актуально):

if testVariable then:
   myVariable = testVariable
else:
   # something else

В качестве альтернативы и чаще (т.е. создание списка параметров)

if 'query' in request.POST.keys() then:
   myVariable = request.POST['query']
else:
   # something else, probably looking at other keys

Есть ли ярлык, о котором я просто не знаю, который упрощает это? Что-то с такой логикой myVariable = assign_if_exists(testVariable)?

Ответы [ 2 ]

25 голосов
/ 30 июля 2009

Предполагая, что вы хотите оставить myVariable без изменений до его предыдущего значения в случае "не существует",

myVariable = testVariable or myVariable

имеет дело с первым случаем, а

myVariable = request.POST.get('query', myVariable)

имеет дело со вторым. Тем не менее, ни один из них не имеет ничего общего с «существовать» (что вряд ли является концепцией Python ;-): первое касается истинного или ложного, второе - наличия или отсутствия ключа в коллекции.

7 голосов
/ 30 июля 2009

Первый экземпляр указан странно ... Зачем устанавливать логическое значение на другое логическое значение?

То, что вы можете иметь в виду, это установить myVariable в значение testVariable, если testVariable не является строкой нулевой длины или не имеет значения None или не является чем-то, что может быть оценено как False.

Если это так, я предпочитаю более явные формулировки

myVariable = testVariable if bool(testVariable) else somethingElse

myVariable = testVariable if testVariable is not None else somethingElse

При индексации в словаре просто используйте get.

myVariable = request.POST.get('query',"No Query")
...