Мне сложно понять следующую строку:

result = (status!=None and "off" or "on")

Теперь, когда это вызывается, только status было присвоено значение (результат поиска по регулярному выражению). Однако после этой команды result принимает значение «включено» или «выключено».

На мой неопытный взгляд, это просто сравнение. Как происходит это задание?

2
user1209326 30 Янв 2013 в 17:53

1 ответ

Лучший ответ

Из документации:

Выражение x and y сначала оценивает x; если x равно false, возвращается его значение; в противном случае, y вычисляется и возвращается полученное значение.

Выражение x or y сначала оценивает x; если x имеет значение true, возвращается его значение; в противном случае, y вычисляется и возвращается полученное значение.

Более того, любая непустая строка считается "истинной", когда она появляется в логическом контексте.

Таким образом, мы сможем ответить на ваш вопрос.

В соответствии с правилами приоритета операторов следующее:

status != None and "off" or "on"

Эквивалентно:

(status != None and "off") or "on"

Первая часть, status != None and "off" оценивается как:

  • False, если status равно None;
  • "off" в противном случае

Все выражение (status != None and "off") or "on" оценивается как:

  • "on", если status равно None;
  • "off" в противном случае.

Возможно, более питонический способ написать это утверждение:

result = "on" if status is None else "off"
7
Community 20 Июн 2020 в 12:12
1
И одна из причин нового синтаксиса, введенного «возможно более питоническим способом», заключалась в том, чтобы помешать людям писать эту уродливую логическую чушь с короткими замыканиями.
 – 
wim
30 Янв 2013 в 18:17