Возможно ли это сделать на одной строке в Python?
if <condition>:
myList.append('myString')
Я попробовал тернарный оператор
myList.append('myString' if <condition>)
но моя IDE (MyEclipse) не понравилась без него.
Возможно ли это сделать на одной строке в Python?
if <condition>:
myList.append('myString')
Я попробовал тернарный оператор
myList.append('myString' if <condition>)
но моя IDE (MyEclipse) не понравилась без него.
Да, вы можете сделать это:
<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']
Причина, по которой язык не позволяет использовать синтаксис
variable = "something" if a_condition
без лишнего - это то, что в случае, когда a_condition == False
, variable
неожиданно неизвестно. Возможно, он может по умолчанию None
, но Python требует, чтобы все назначения переменных фактически приводили к явным присвоениям. Это также относится к таким случаям, как ваш вызов функции, поскольку значение, переданное функции, оценивается так же, как и RHS оператора присваивания.
Аналогично, все возвраты должны действительно возвращаться, даже если они являются условными. Например:
return variable if a_condition
не разрешено, но
return variable if a_condition else None
разрешен, поскольку второй пример гарантированно явно возвращает что-то.
if <condition>: myList.append('myString')
В противном случае нет. Почему нужно поставить его на одну строку?
Заметим, что "тройной оператор" является оператором. Как и любой оператор, он должен что-то вернуть, так как у вас есть тернарный оператор без предложения else
? Что он должен возвращать, если условие не соответствует действительности?
myList.extend(['myString'] if condition else [])
также будет работать, хотя он работает больше, чем другие решения.