@Jon Clements дал вам отличный ответ: как решить проблему, используя идиому Python. Если другие программисты Python посмотрят на его код, они сразу его поймут. Это правильный способ сделать это с помощью Python.
Чтобы ответить на ваш актуальный вопрос: нет, это не работает. Тернарный оператор имеет следующую форму:
expr1 if condition else expr2
condition
должно быть чем-то, что оценивается как bool
. Тернарное выражение выбирает одно из expr1
и expr2
и все.
Когда я попробовал такое выражение, как c += 1 if condition else 0
, я был удивлен, что оно сработало, и отметил это в первой версии этого ответа. @TokenMacGuy указал, что на самом деле происходило следующее:
c += (1 if condition else 0)
Таким образом, вы никогда не сможете сделать то, что пытались сделать, даже если вы поставите правильное условие вместо какого-то цикла. Приведенный выше случай будет работать, но что-то вроде этого не удастся:
c += 1 if condition else x += 2 # syntax error on x += 2
Это связано с тем, что Python не считает оператор присваивания выражением.
Вы не можете сделать эту распространенную ошибку:
if x = 3: # syntax error! Cannot put assignment statement here
print("x: {}".format(x))
Здесь программист, вероятно, хотел x == 3
для проверки значения, но набрал x = 3
. Python защищает от этой ошибки, не рассматривая присваивание как выражение.
Вы не можете сделать это по ошибке, и вы не можете сделать это намеренно.
person
steveha
schedule
01.02.2013