Что означает i = x > 0?

#python

#python

Вопрос:

Я просматриваю блок кода, и мне интересно, что означает это выражение:

 target  = counter[s[left]] >= 0
  

Комментарии:

1. Вы добавляете 1, если условие истинно, и 0, если ложно

2. ` target = counter[s[left]] >= 0` означает `target = (counter[s[left]] >= 0)` где counter[s[left]] >= 0 a Boolean , который вычисляет либо по True условию, либо False на основе условия

3. @azro что, если s[left] не существует в counter[] ?

4. Подсказка: int(True) равно 1. Но не делай странных вещей, все тебя возненавидят.

5. Это классический случай несоблюдения Дзен Python, в частности строки «Учитывается читаемость»..

Ответ №1:

counter[s[left]] >= 0 вычисляется до логического значения, то есть True или False .

Отложив это в сторону, target = val равнозначно target = target val .

Поскольку bool подклассы int в математическом контексте True являются 1 и False являются 0 .

По сути, эта строка (предположительно внутри цикла, который изменяет counter , s или left , или любую их комбинацию) подсчитывает, во сколько раз counter[s[left]] больше или равно 0 .

Ответ №2:

target = counter[s[left]] >= 0

эквивалентно

target = target (1 if counter[s[left]] >= 0 else 0)

и это плохой Python. Требуйте его изменения. Добавление нуля глупо, и все это сбивает с толку.

 if counter[s[left]] >= 0:
    target  = 1
  

Комментарии:

1. Если у вас их много, особенно подряд, исходная версия более компактна и, вероятно, более удобочитаема.

2. if counter[s[left]] >= 0: target = 1 также является одной строкой и более компактным и более разборчивым.