концепция оператора возврата Python

Я пытался найти три самых высоких значения из словаря, и я должен вернуть ключи этого значения. Я столкнулся с этим методом.

import heapq

def get_n_largest(n,dictionary):
    return heapq.nlargest(n,dictionary,dictionary.get)

Из документов python я понял, что nlargest должен принимать целое число, итерацию и ключ, если он предоставлен.

Чего я не понимаю, так это в чем разница между dictionary.get() в операторе возврата и dictionary.get(), когда я пытаюсь напечатать dictionary.get моего словаря, который он возвращает

"встроенный метод получения объекта dict по адресу 0x0000020E77B12168"

Я сделал некоторый поиск, но я не могу найти концепции об этом. Любая помощь будет очень признательна!


person Sanny    schedule 11.03.2019    source источник
comment
Разве вы не должны вызывать get как функцию в dictionary.get?   -  person GKE    schedule 11.03.2019
comment
Третий аргумент метода nlargest является ключом или вызываемым, поэтому вы передаете указатель методу get. Вот почему он показывает вам имя метода и место в памяти, когда вы print его используете.   -  person Selcuk    schedule 11.03.2019
comment
Пожалуйста, прочитайте ответы на этот вопрос, если вы хотите понять вызов функции без круглых скобок. stackoverflow.com/questions/21785933 /   -  person Sach    schedule 11.03.2019


Ответы (2)


Dictionary.get не вызывает функцию, это просто ссылка на функцию Dictionary.get. Чтобы вызвать функцию, вам нужно сделать Dictionary.get(*args, **kwargs) И что касается этого - heapq.nlargest(n,dictionary,dictionary.get) Я не смотрел документы для куча Но, по-видимому, nlargest callable принимает ссылку на callable в качестве третьего параметра. И, в свою очередь, nlargest может вызывать callable где-то в логике, например, Dictionary.get(*args, **kwargs)

person ranjith    schedule 11.03.2019

Нет никакой разницы. В обоих случаях это один и тот же метод .get. В операторе возврата он будет применен к ключу из словаря (элементу итерации), т.е. называется get(k). В печати это не применялось, т.е. вызывается с ключом словаря и печатает значение get, которое является ссылкой на функцию.

person Mike    schedule 11.03.2019