Python .lower не работает без (), мне интересно, почему
Итак, я столкнулся с этим, но не до конца понимаю, почему это так:
count = 0
Got_one = 0
while(count<1):
print('\n')
response = input("Did you get one?\n:").lower()#<--This part here
if response == 'yes':
Got_one += 1
#...ect
В одном месте сценария я набрал .lower без (). Код работал нормально, но скрипту не удалось +1, когда я ввел "да", вместо этого он напечатал значение 0, скорее всего из-за того, что переменная "Got_one" была установлена в 0 в самом начале. Однако, как только я набрал (), код заработал как положено и +1 к значению после ввода "да".
Итак, почему это так?.Lower сам по себе опускает все после него или просто что-то, чего я еще не понимаю в Python?
5 ответов
.lower()
является встроенным методом для объекта String в Python. Причина, по которой вам нужна скобка, заключается в том, чтобы выполнить функцию в строке.
Без скобок вы просто получаете доступ к атрибуту String.lower, который является указателем на функцию. Поэтому без скобок вы устанавливаете response = String.lower
, который не пройдет оператор if.
Разница в том, что вызов его без круглых скобок - это просто вызов метода, но не значения этого метода, а вызов с круглыми скобками, вызов значения этого метода
Причина этого в том, что .lower()
это метод класса, а не атрибут класса (который будет записан как .lower
). Поэтому вы должны использовать круглые скобки, чтобы указать, что вы пытаетесь вызвать метод. Поскольку он не принимает никаких аргументов, вы просто ставите пустые скобки за ним.
Метод класса - это функция, которая принадлежит объекту класса, в данном случае str
объект. Атрибут класса - это переменная, которая принадлежит этому объекту.
Это потому, что вы просто делаете ссылку на lower
метод класса (функция) объекта класса str
, Для справки:
foo = "ALL CAPS"
bar = foo.lower
bar
>>> <built-in method lower of str object at 0x1038e1570>
bar()
>>> 'all caps'
Чтобы добавить ответ 1313e, .lower() на самом деле является встроенным методом (функциями для классов объектов), который вы выполняете над строковым объектом (потому что все в Python является объектом), поэтому вы вызываете 'this string'.lower()
а не, скажем, lower('this string')