Можно ли сделать это в одной строке в Python?
if <condition>:
myList.append('myString')
Я пробовал тернарный оператор:
myList.append('myString' if <condition>)
но моей IDE ( MyEclipse ) он не понравился без else
.
Можно ли сделать это в одной строке в Python?
if <condition>:
myList.append('myString')
Я пробовал тернарный оператор:
myList.append('myString' if <condition>)
но моей IDE ( MyEclipse ) он не понравился без else
.
Ответы:
Да, ты можешь это сделать:
<condition> and myList.append('myString')
Если <condition>
ложно, тогда произойдет короткое замыкание, и правая сторона не будет оцениваться. Если <condition>
истинно, тогда правая часть будет оценена, и элемент будет добавлен.
Я просто отмечу, что выполнение вышеизложенного не является питоническим, и, вероятно, было бы лучше написать это, независимо от того:
if <condition>: myList.append('myString')
Демонстрация:
>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
E701 multiple statements on one line
значит, тоже не питонический ...;)
x = object.get('attribute')
в этом случае
Причина, по которой язык не позволяет использовать синтаксис
variable = "something" if a_condition
без else
этого, в случае, когда a_condition == False
, variable
внезапно неизвестно. Возможно, это может быть по умолчанию None
, но Python требует, чтобы все назначения переменных действительно приводили к явным назначениям. Это также относится к таким случаям, как ваш вызов функции, поскольку значение, переданное функции, оценивается так же, как RHS оператора присваивания.
Точно так же все return
s должны фактически возвращаться, даже если они условны return
. Например:
return variable if a_condition
не допускается, но
return variable if a_condition else None
разрешено, поскольку второй пример гарантированно что-то возвращает.
variable=None
является совершенно законной. : D
continue if i == 0
в цикле for.
else pass?
else pass
не работает, потому что тернарное выражение должно возвращать значение, которое можно передать return
. pass
не является допустимым return
значением.
if a_condition: variable = "something"
и if a_condition: return variable
законны. Таким образом, это, по сути, произвольный синтаксический выбор python.
if <condition>: myList.append('myString')
В противном случае нет. Зачем нужно ставить в одну строчку?
Обратите внимание, что «тернарный оператор» - это оператор . Как и любой оператор, он должен что-то возвращать , так как же у вас может быть тернарный оператор без else
предложения? Что он должен вернуть, если условие не соответствует истине?
Вы в основном запрашиваете do_thing() if <condition> else pass
конструкцию (которая бросит SyntaxError
, если запустится). Как я обнаружил во время исследования (в некоторой степени) подобный вопрос do_thing() if condition else None
настолько близок, насколько вы можете получить (это просто еще один способ сделать <condition> and do_thing()
). Итак, чтобы обобщить эту идею и другие ответы, вот ваши варианты:
if <condition>: myList.append('myString')
- кажется наименее хакерским (и, следовательно, предпочтительным) способом<condition> and myList.append('myString')
myList.append('myString') if <condition> else None
myList.extend(['myString'] if condition else [])
тоже будет работать, хотя это больше работы, чем другие решения.
Вы можете сделать что-то вроде этого:
myList.append('myString') if <condition> else False
или же
myList.append('myString') if <condition> else 0
myList.append('myString') if True else _
Но если вы ничего не назначаете, не имеет значения. Я обеспокоен тем, что этот человек пытается составить список с аналогичной логикой.
Я бы просто сделал это, если хочу добавить необязательные элементы в список на основе условия.
nums = [
1,
2,
3 if <condition> else None,
4,
]
nums = [i for i in nums if i is not None]
это просто заменяет значение на None, если условие не выполняется, а затем переопределяет список без значений None. таким образом они сохраняют свой индекс, если выполняется условие