Python中str.count方法不带括号赋值后可正常调用的原理
问题相关代码
word = input().upper() word_list = list(set(word)) cnt = [] for i in word_list: count = word.count cnt.append(count(i)) if cnt.count(max(cnt)) > 1: print("?") else: print(word_list[(cnt.index(max(cnt)))])
问题描述
上述代码第6行写法为count = word.count,直接引用了count方法。已知count方法通常需要以.count()带括号的形式调用,但此处未添加括号,代码仍可正常运行,咨询该写法可行的运行原理。
补充测试结果:执行print(type(word.count))时,返回结果为<built-in method count of str object at 0x01DD8800>。
运行原理解释
- Python里一切皆对象,方法本身也是可以被赋值、传递的对象。写方法名不带括号的时候,不会触发方法执行,只是拿到这个方法本身的引用而已。
- 从具体实例上取到的方法是绑定方法:你写
word.count拿到的count方法,已经提前绑定好了要操作的对象就是word这个字符串,不需要再额外指定操作目标。后面写count(i)的时候,就是给这个已经绑定好主体的方法传入要统计的字符参数,和直接写word.count(i)跑起来没有任何区别。 - 补充测试的返回结果刚好能印证这个逻辑:输出内容明确说明,这是绑定在对应内存地址的str实例上的内置count方法,既不是空值,也不是方法调用后的返回值。
- 顺带提一句,这段代码里把
count = word.count写在for循环里其实是多余的,每次循环都重复拿了一次同一个方法,把这行挪到循环外面,运行结果完全一样。
内容的提问来源于stack exchange,提问作者TaeYupNoh
相关产品推荐
相关产品推荐

