Python -V => 3.12.1
value = "abc" # or could be None in some other cases
def doSomething(v):
print(f"value is {v}")
for v in range(100):
doSomething(v) if value else continue
Есть идеи, как использовать один лайнер в таких ситуациях? ТИА






continue — утверждение; вы не можете вставлять оператор в выражение. Здесь вам нужно использовать реальный оператор if, а не условное выражение.
for v in range(100):
if value:
doSomething(v)
else:
continue
Конечно, else: continue совершенно не нужен;
for v in range(1000):
if value:
doSomething(v)
потому что цикл продолжится в любом случае, поскольку за оператором if ничего не следует. (Кстати, вы могли бы написать if value: doSomething(v), но такой стиль не рекомендуется.)
Однако если что-то последовало за утверждением if, вы обычно пишете
for v in range(1000):
if not value:
continue
doSomething(v)
Окончательные однострочные решения для большинства проблем Python: понимание списков. В твоем случае
[doSomething(v) for v in range(100) if value]
Это условное выражение, которое должно соответствовать образцу
or_test ["if" or_test "else" expression]
Вам нужно выражение, и самое простое — None. Итак, вы можете написать это как
for v in range(100):
doSomething(v) if value else None
Это немного дороже в эксплуатации, и многим не хотелось бы иметь такую одноразовую ценность. Условное выражение разрешается в одно значение, и цель состоит в том, чтобы использовать это значение в более крупном операторе. Здесь вы просто используете условие для побочного эффекта условного вызова функции. Это похоже на
[doSomething(v) for v in range(100) if value]
где список создается только потому, что вы хотели вызвать функцию. Это не ошибка, но может нарушать некоторые стандарты кодирования.
Здесь нет смысла использовать одну строку.