Подтвердить что ты не робот

Терминальный оператор Python Without else

Возможно ли это сделать на одной строке в Python?

if <condition>:
    myList.append('myString')

Я попробовал тернарный оператор

myList.append('myString' if <condition>)

но моя IDE (MyEclipse) не понравилась без него.

4b9b3361

Ответ 1

Да, вы можете сделать это:

<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']

Ответ 2

Причина, по которой язык не позволяет использовать синтаксис

variable = "something" if a_condition

без лишнего - это то, что в случае, когда a_condition == False, variable неожиданно неизвестно. Возможно, он может по умолчанию None, но Python требует, чтобы все назначения переменных фактически приводили к явным присвоениям. Это также относится к таким случаям, как ваш вызов функции, поскольку значение, переданное функции, оценивается так же, как и RHS оператора присваивания.

Аналогично, все возвраты должны действительно возвращаться, даже если они являются условными. Например:

return variable if a_condition

не разрешено, но

return variable if a_condition else None

разрешен, поскольку второй пример гарантированно явно возвращает что-то.

Ответ 3

if <condition>: myList.append('myString')

В противном случае нет. Почему нужно поставить его на одну строку?

Заметим, что "тройной оператор" является оператором. Как и любой оператор, он должен что-то вернуть, так как у вас есть тернарный оператор без предложения else? Что он должен возвращать, если условие не соответствует действительности?

Ответ 4

myList.extend(['myString'] if condition else []) также будет работать, хотя он работает больше, чем другие решения.