#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
aBoolean
, который вычисляет либо по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
также является одной строкой и более компактным и более разборчивым.