Чи можна це зробити в одному рядку в 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
s. Наприклад:
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
є законною. Отже, це, по суті, довільний синтаксичний вибір пітона.
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. таким чином вони зберігають свій індекс, якщо умова дотримана