Почему isupper без круглых скобок не вызывает ошибку? - PullRequest
1 голос
/ 25 мая 2020
string = 'ABcD'
for letter in string:
    if letter.isupper():
        print (letter,end='')

В приведенном выше коде вывод будет ABD Но когда я пишу код без скобок после isupper, например:

string = 'ABcD'
for letter in string:
    if letter.isupper:
        print (letter,end='')

, на выходе получается ABcD. Почему python здесь не вызывает синтаксическую ошибку; как это работает?

Ответы [ 2 ]

3 голосов
/ 25 мая 2020

isupper - это атрибут строки letter, поэтому Python подходит для вашего доступа.

>>> letter = 'a'
>>> letter.isupper
<built-in method isupper of str object at 0x0000028258E80170>

Это метод isupper строки. Вы не вызывали его (нет ()), но это не синтаксическая ошибка.

В логическом контексте (if letter.isupper) Python проверяет, является ли bool(letter.isupper) True или False.

>>> bool(letter.isupper)
True

Любой метод является «правдивым» (bool возвращает True), поэтому вводится блок if.

2 голосов
/ 25 мая 2020

Стоит знать, что для обнаружения таких ошибок можно использовать инструменты анализа stati c. Например, с pylint:

test.py:2:0: W0125: Using a conditional statement with a constant value (using-constant-test)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...