метод и функция в чем разница python

Разница между методами и функциями, в Python по сравнению с C++

я делаю учебники Академии кода на Python, и я немного смущен определением метода и функции. Из учебника:

различает ли Python методы и функции так, как это делает C++?

в отличие от разница между методом и функцией, я спрашиваю о подробностях Python. Термины «метод» и «функция», по-видимому, не всегда соответствуют определению, данному в принятом ответе на связанный вопрос.

4 ответов

A метод особый класс функций, который может быть привязан или unbound.

конечно, несвязанный метод не может быть вызван (по крайней мере, напрямую без передачи экземпляра в качестве аргумента):

в Python в большинстве случаев вы не заметите разницы между связанным методом, функцией или вызываемым объектом (т. е. объектом, который реализует __call__ ), или конструктор класса. Они все выглядят одинаково, у них просто разные соглашения об именах. Однако под капотом предметы могут выглядеть совершенно по-другому.

это означает, что связанный метод может использоваться как функция, это одна из многих мелких вещей, которая делает Python таким мощный

это также означает, что хотя существует принципиальная разница между len(. ) и str(. ) (последний является конструктором типов), вы не заметите разницы, пока не копнете немного глубже:

если вы все еще не понимаете, как работают методы, посмотрите на осуществление может, возможно, прояснить ситуацию. Когда атрибут экземпляра ссылается, что не является атрибутом данных, его класс искали. Если имя обозначает допустимый атрибут класса, который является объектом функции, a объект метода создается путем упаковки (указателей на) объекта экземпляра и объект функции, только что найденный вместе в абстрактном объекте: это объект, метод. Когда объект метода звонил с список аргументов, новый список аргументов создается из экземпляра объект и список аргументов, а объект функции вызывается с помощью этот новый список аргументов.

внимательно прочитайте этот отрывок.

1) экземпляр на самом деле не содержит объект, являющийся методом, который был бы его атрибутом.
В фактически, в экземпляра ( __dict__ пространство имен объекта)

2) тот факт, что экземпляр, похоже, имеет » метод «при вызове атрибута» метод», обусловлен процессом, а не наличием объекта метода внутри пространства имен экземпляра

3) Кроме того, на самом деле не существует объекта метода в пространстве имен класса.

то, что называется атрибутом «метода» класса, для простоты формулировки, на самом деле является функции объект, являющийся атрибутом в пространстве имен класса.
То есть пара!—49—>(идентификатор функции, функции) является членом __dict__ класса, и этот атрибут позволяет в intepreter построить способ объект при выполнении вызова метода.

4) Опять же, тот факт, что класс, похоже, имеет «метод» при вызове атрибута «метод», обусловлен процессом, а не наличием объекта метода внутри пространства имен класса

редактировать я больше не уверен в этом; см. В конце

5) объект метода (не «объект метода»; я имею в виду, что реальный объект действительно является методом`, что описано в отрывок) есть создано в момент вызова он не существует раньше.
Это своего рода оболочка : она упаковывает указатели на объект экземпляра и объект функции, на котором основан метод.

Итак, метод основан на функции. Эта функция для меня является реальным атрибутом класса, содержащего указанный «метод», потому что эта функция действительно принадлежит пространству имен ( __dict__ ) класса: эта функция описывается как когда __dict__ печати.
Эта функция может быть достигнута из объекта метода с помощью псевдонима im_func или __func__ (см. ниже код)

я считаю, что эти понятия не очень широко известны и понятны. Но следующий код подтверждает то, что я сказал.

редактировать

что-то беспокоит меня, и я не знаю глубоких внутренностей тема:

но идентичность одинакова для всех трех, и, кроме того, эта идентичность отличается от идентичности функции, на которой основан метод.
Это приводит к выводу, что метод действительно является объектом, живущим в памяти, и что он не изменяется от одного вызова из экземпляра к другому cal из другого экземпляра.

Как Джон Клементс упомянул в своем комментарии, однако, различие не так железно, как в C++. Отдельные функции могут быть «преобразованы» в методы во время выполнения, и методы могут быть назначены переменным таким образом, что они эффективно ведут себя не иначе, чем автономные функции. Таким образом, граница между методами и функциями проницаема.

в следующем определении класса:

позволяет создать экземпляр класса выше. Мы сделаем это, назначив class object, i.e. MyClass() в var x

и давайте не забывать о том, что function object MyClass.f использовался для определения (внутренне) method object x.f когда мы назначили x MyClass ()

Источник

Разница между методами и функциями в Python по сравнению с C ++

Я занимаюсь обучением по Code Academy на Python, и меня немного смущает определение метода и функции. Из учебника:

Различает ли Python методы и функции так, как это делает C ++?

4 ответа

функция является вызываемым объектом в Python, то есть может вызываться с помощью оператора вызова (хотя другие объекты могут эмулировать функцию, реализуя __call__ ). Например:

Читайте также:  d3dx9 cs go параметры запуска

Конечно, нельзя вызывать несвязанный метод (по крайней мере, напрямую, без передачи экземпляра в качестве аргумента):

В Python в большинстве случаев вы не заметите разницы между связанным методом, функцией или вызываемым объектом (т. е. объектом, который реализует __call__ ) или конструктор класса. Все они выглядят одинаково, у них просто разные соглашения об именах. Под капотом объекты могут выглядеть совершенно по-другому.

Это означает, что связанный метод может использоваться как функция, это одна из многих мелких вещей, которые делают Python таким мощным

Это также означает, что, хотя между len(. ) и str(. ) (последний является конструктором типов), вы не заметите разницу, пока не покопаетесь немного глубже:

Если вы все еще не понимаете, как работают методы, посмотрите на реализация может, возможно, прояснить вопросы. Когда атрибут экземпляра ссылается на то, что это не атрибут данных, его класс ищется. Если имя обозначает действительный атрибут класса, который является функциональным объектом, Объект метода создается упаковкой (указателями на) объекта экземпляра. и объект функции, только что найденный вместе в абстрактном объекте: это метод объекта. Когда объект метода вызывается с список аргументов, новый список аргументов строится из экземпляра объект и список аргументов, а объект функции вызывается с этот новый список аргументов.

Внимательно прочитайте этот отрывок.

2) Тот факт, что экземпляр, по-видимому, имеет «метод» при вызове атрибута «метод», связан с процессом, а не с наличием объекта метода внутри пространства имен экземпляра

3) Кроме того, на самом деле не существует объекта метода в пространстве имен класса.

Но есть разница с экземпляром, потому что где-то должно быть что-то, что приводит к реальному объекту метода, когда такой вызов сделан, не так ли?

4) Опять же, тот факт, что класс, кажется, имеет «метод» при вызове атрибута «метод», связан с процессом, а не с наличием объекта метода внутри пространства имен класса

РЕДАКТИРОВАТЬ Я больше не уверен в этом; смотри в конце

5) Объект метода (не объект «метода»; я имею в виду, что реальный объект действительно является методом`, что описано в отрывке) создается в момент вызова, это не существует раньше.
Это своего рода оболочка: она упаковывает указатели на объект экземпляра и объект функции, на котором основан метод.

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

ИЗМЕНИТЬ

Что-то беспокоит меня, и я не знаю глубоких внутренностей этого предмета:

НО идентичность одинакова для всех трех, и, кроме того, эта идентичность отличается от идентичности функции, на которой основан метод.
Это приводит к заключению, что метод на самом деле является объектом, живущим в памяти, и что он не меняется от одного вызова экземпляра к другому вызову другого экземпляра.

Что это значит?
Создается впечатление, что как только объект метода создан, он не уничтожается, а живет в памяти (RAM).
Но он живет скрытно, и только процессы, формирующие функционирование интерпретатора, знают, как и где его найти.
Этот скрытый объект, объект реального метода, должен иметь возможность изменять ссылку на экземпляр, к которому должна быть применена функция, или ссылку None если он вызывается как несвязанный метод. Это то, что мне кажется, но это всего лишь мозговая гипотеза.

Кто-нибудь знает что-нибудь об этом допросе?

Однако следующий результат является особым, вероятно потому, что это встроенные методы /функции, а не пользовательские методы /функции, как в моем коде.

Однако, как отметил Джон Клементс в своем комментарии, различие не столь железное, как в C ++. Автономные функции могут быть «преобразованы» в методы во время выполнения, а методы могут быть назначены переменным таким образом, чтобы они эффективно вели себя не иначе, чем автономные функции. Таким образом, граница между методами и функциями является проницаемой.

В следующем определении класса:

Позволяет создать экземпляр вышеупомянутого класса. Мы сделаем это, назначив class object, i.e. MyClass() для var x

И давайте не будем забывать, что function object MyClass.f использовалось для (внутреннего) определения method object x.f когда мы присвоили x MyClass ()

Источник

#3 Python для Data Science — встроенные функции и методы Python

Функции — одно из главных преимуществ языка Python как минимум при использовании их в проектах Data Science. Это третья часть серии материалов «Python для Data Science», в которой речь пойдет о функциях и методах.

Из нее вы узнаете не только о базовых концепциях, но познакомитесь с наиболее важными функциями и методами, которые будете использовать в будущем.

Это практическое руководство!

Желательно повторять те части, где нужно писать код, и решать задачи в конце статьи! Также рекомендуется вернуться к прошлым материалам, если вы еще не ознакомились с ними.

Что такое функции и методы Python?

Начнем с основ. Предположим, что существует переменная:

Читайте также:  расписание богослужений в храме матроны московской в ногинске

Вот простейший пример функции Python:

А вот пример метода Python:

Встроенные vs. пользовательские методы и функции

Круто то, что помимо огромного списка встроенных функций/методов, пользователи могут создавать собственные. Также они поставляются с различными Python-библиотеками. Для доступа к ним библиотеку нужно скачать и импортировать. Выходит, что возможности безграничны. Но к этому стоит вернуться позже, а сейчас сосредоточимся на встроенных элементах.

Самые важные встроенные функции Python для проектов Data Science

Функция в Python работают очень просто — ее нужно вызвать с заданными аргументами, а она вернет результат. Тип аргумента (например, строка, число, логическое значение и так далее) может быть ограничен (например, иногда нужно, чтобы это было именно целое число), но чаще аргументом может выступать значение любого типа. Рассмотрим самые важные встроенные функции Python:

print()
Эта функция уже использовалась в прошлых статьях. Она выводит различные значения на экран.

abs()
Возвращает абсолютную величину числа (то есть, целое число или число с плавающей точкой). Результат не может быть строкой, а только числовым значением.

round()
Возвращает округленное значение числа

min()
Возвращает наименьший объект в списке или из общего числа введенных аргументов. Это может быть в том числе и строка.

sorted()
Сортирует список по возрастанию. Он может содержать и строки и числа.

sum()
Суммирует значения списка. Он может содержать разные типы числовых значений, но стоит понимать, что с числами с плавающей запятой функция справляется не всегда корректно.

len()
Возвращает количество элементов в списке или количество символов в строке.

type()
Возвращает тип переменной

Это встроенные функции Python, которые придется использовать регулярно. Со всем списком можно ознакомиться здесь: https://docs.python.org/3/library/functions.html

С многими другими вы познакомитесь в следующих руководствах.

Самые важные встроенные методы Python

Большую часть методов Python необходимо применять по отношению к конкретному типу. Например, upper() работает со строками, но не с целыми числами. А append() можно использовать на списках, но со строками, числами и логическими значениями он бесполезен. Поэтому дальше будет список методов, разбитый по типам.

Методы для строк Python

a.lower()
Возвращает версию строки с символами в нижнем регистре.

a.upper()
Противоположность lower()

a.strip()
Если в строке есть пробелы в начале или в конце, метод их удалит.

a.replace(‘old’, ‘new’)
Заменяет выбранную строку другой строкой. Метод чувствителен к регистру.

a.split(‘delimiter’)
Разбивает строку и делает из нее список. Аргумент выступает разделителем.

Примечание: в этом случае разделителем выступает пробел.

’delimeter’.join(a)
Объединяет элементы списка в строку. Разделитель можно указать заново.

Это были самые важные методы, для работы со строками в Python.

Методы Python для работы со списками

В прошлом материале речь шла о структурах данных Python. И вот к ним нужно вернуться снова. Вы уже знаете, как создавать списки и получать доступ к их элементам. Теперь узнаете, как менять их.

Используем уже знакомую собаку Freddie:

a.append(arg)
Метод append добавляет элемент к концу списка. Предположим, что нужно добавить количество лап Freddie (4).

a.count(arg)
Возвращает количество указанных элементов в списке.

a.clear()
Удаляет все элементы списка. По сути, он полностью удалит Freddie. Но не стоит волноваться, потом его можно вернуть.

Список всех методов для работы с Python можно найти здесь: https://docs.python.org/3/tutorial/datastructures.html

Методы Python для работы со словарями

Как и в случае со списками, есть набор важных методов для работы со словарями, о которых нужно знать.

dog_dict.keys()
Вернет все ключи словаря.

dog_dict.values()
Вернет все значения словаря.

dog_dict.clear()
Удалит все из словаря.

Для добавления элемента в словарь не обязательно использовать метод; достаточно просто указать пару ключ-значение следующим образом:

Это все методы на сегодня.

Проверьте себя

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

sum() суммирует значения элементов, а len() подсчитывает их количество. Если поделить одно значение на другое, то выйдет среднее. Результат: 2.909090

Повезло, что в списке нечетное количество элементов.

Примечание: эта формула не сработает, если элементов будет четное количество.

В чем разница между функциями и методами в Python?

После прочтения этой статьи у вас наверняка появился вопрос: «Зачем нужны и функции и методы, если они делают одно и то же?»

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

Так зачем и методы и функции нужны в Python? Официальный ответ заключается в том, что между ними есть небольшие отличия. Так, метод всегда относится к объекту (например, в dog.append(4) методу append() нужно объект dog ). В функции объект не нужно использовать. Если еще проще, метод — это определенная функция. Все методы — это функции, но не все функции являются методами.

Читайте также:  Что чистит семя льна

Если все равно не понятно, но стоит волноваться. Работая с Python и дальше, вы разберетесь в различиях, особенно, когда начнете создавать собственные методы и функции.

Вот еще один дополнительный совет: функции и методы — это как артикли (der, die, das) в немецком языке. Нужно просто выучить синтаксис и использовать их по правилам.

Как и в немецком, есть эмпирические правила, которые также должны помочь. Так, функции можно применять к разным типам объектов, а методы — нет. Например, sorted() — это функция, которая работает со строками, списками, числами и так далее. Метод upper() работает исключительно со строками.

Но главный совет в том, чтобы не пытаться понять различия, а учиться их использовать.

Итого

Теперь вы знакомы более чем с 20 методами и функциями Python. Неплохое начало, но это только основы. В следующих руководствах их количество будет расти в том числе за счет функций и методов из сторонних библиотек.

Источник

Функции и методы в Python: передача функции в функцию. Декоратор

Эта статья посвящена теме декораторов в Python. Поговорим о том, что это такое, уделим особое внимание свойствам функций в Python, на базе которых реализована данная идея, а также рассмотрим декораторы, которые принимают аргументы и возвращают значение из функции.

Что надо знать о методах и функциях в Python?

Говоря о функциях в Python, нужно упомянуть два аспекта: 1) функция в Python — есть объект специального вида, который можно передавать в виде аргумента другим функциям; 2) внутри функций в Python вы можете создавать другие функции, а также вызывать их, возвращая результат посредством return.

Теперь давайте поговорим об этом подробнее.

Функция как объект в Python

В языке программирования Python часто практикуется передача одной функции в виде аргумента другой функции. Представьте, что есть список целых чисел, и вы желаете на его базе получить другой список с элементами, которые будут квадратами первого списка. Вот, как это можно реализовать в Python:

В нашем примере мы передали функции map в виде первого аргумента функцию sq. Последняя будет по очереди применяться ко всем элементам нашего списка a.

Объект такого класса в Python мы сможем вызывать как функцию:

Функция внутри функции в Python

Функции в Python мы можем создавать, вызывать и возвращать из других функций. Кстати, на этом основана идея замыкания (closures) в Python.

Давайте создадим функцию, умножающую 2 числа:

В этой функции в Python реализованы два важных свойства: 1) внутри функции mul() мы создаём ещё одну функцию helper() ; 2) функция mul() возвращает нам функцию helper() в качестве результата работы.

Вызов этой функции в Python:

Особенность заключается в том, что мы можем создавать на базе функции mul() собственные кастомизированные функции. Давайте создадим функцию в Python, умножающую на 3:

Декоратор функции в Python

Конструктивно речь идёт о некоторой функции, в качестве аргумента которого выступает другая функция. Декоратор в Python добавляет дополнительный функционал к функции, не меняя её содержимое.

Создание

Представьте, что мы имеем пару простых функций в Python:

При этом мы желаем их дополнить таким образом, чтобы перед вызовом основного кода нашей функции печаталась строчка “Start function”, а в конце – строка “Stop function”.

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

Теперь поговорим о втором пути. Для начала создадим функцию:

Теперь нужно обернуть функции в оболочку:

Обратите внимание, что функции first_test и second_test не поменялись.

Наши функции second_test_wrapped и first_test_wrapped обладают функционалом, который нам и нужен.

Теперь, если надо, чтобы так работали функции с именами first_test и second_test, делаем следующее:

Выполненные нами действия и являются реализацией идеи декоратора.

Правда, вместо строк:

мы можем написать иначе:

В нашем случае @simple_decore – это не что иное, как декоратор функции.

Передаём аргументы в функцию с помощью декоратора

Бывает, что функция требует наличие аргумента, поэтому мы можем передать его через декоратор. Давайте создадим декоратор, принимающий аргумент и выводящий информацию о декорируемой нами функции и её аргументе.

Чтобы продемонстрировать работу, создадим функцию, выводящую квадратный корень переданного ей числа, а в качестве декоратора, укажем созданный param_transfer:

Теперь давайте выполним данную функцию с аргументом 4:

Декораторы для методов класса в Python

С декоратором можно объявлять и методы классов. Давайте выполним модификацию декоратора param_transfer:

Что же, осталось продемонстрировать работу нашего метода:

Возвращаем результат работы функции через декоратор

Зачастую создаваемые функции выполняют возвращение какого-либо значения. Чтобы это стало возможным осуществить через декоратор, нужно специальным образом построить нашу внутреннюю функцию:

Возможно применение этого декоратора и для оборачивания функций, принимающих различные аргументы и возвращающие значение:

Осталось выполнить функцию calc_sqrt() с параметром 16:

Источник

Образовательный портал