Python中传递不带括号的dict.get作为key参数的含义是什么?
关于
heapq.nlargest中key=count.get的用法解释 核心本质:函数是Python中的一等对象
- 在Python中,函数、方法本身都是可传递的对象,带括号是执行该方法并拿到返回值,不带括号是引用方法本身。
- 你提到的
count.get是字典count的实例绑定方法,没有加括号时,你传递的是这个方法本身,而不是方法的执行结果。
heapq.nlargest的key参数的运行逻辑
heapq.nlargest的key参数要求传入一个可调用对象,它会在内部遍历你传入的待排序序列(这里是count.keys(),即所有待统计的元素),自动把序列中的每一个元素作为参数传入你给的key可调用对象,用返回的结果作为排序的权重依据。
你写的heapq.nlargest(k, count.keys(), key=count.get),和下面的写法是完全等价的:
heapq.nlargest(k, count.keys(), key=lambda x: count.get(x))
也就是用每个元素的出现次数作为排序权重,取出出现次数最高的前k个元素。
为什么直接调用count.get()会报错
字典的get方法最少需要传入1个参数,即你要查询的键。你直接写count.get()没有传入任何参数,不符合方法的参数要求,自然会抛出参数缺失的报错。而你把count.get传入key参数时,你并没有自己调用这个方法,是heapq.nlargest在内部执行排序逻辑时,会自动给它传入每一个待排序的元素作为参数,所以不会报错。
内容的提问来源于stack exchange,提问作者user17267565
相关产品推荐
相关产品推荐

