Метод и функция в чем разница python
Перейти к содержимому

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

  • автор:

Чем отличается «метод» от «функции»

Неоднократно видел использование термина «метод» для обозначения функций-членов классов в противоположность термину «функция» для обозначения «свободных» функций нечленов. С другой стороны, в текстах о Си++, часто всё называют «функцией» и члены и нечлены. Собственно, какова разница между терминами «метод» и «функция», почему в Си++ члены не называют «методами»?

Отслеживать
задан 30 окт 2017 в 7:28
6,863 2 2 золотых знака 24 24 серебряных знака 44 44 бронзовых знака

почему в Си++ члены не называют «методами»? — так и хочется пошутить про потому что они ч. но не буду

30 окт 2017 в 7:34
Метод — это функция, которая член класса. И это вся разница вроде)
30 окт 2017 в 7:34
@andreymal можно как ответ делать. терминология-faq с эпичным ответом)
30 окт 2017 в 7:40

@АлексейШиманский я не уверен, что так во всех языках, и предпочту воздержаться от ответа. Эпичный ответ с примерами и исключениями (если таковые существуют) от кого-нибудь уверенного будет более полезным)

30 окт 2017 в 7:43
@andreymal А процедура — член класса тогда как называется?
30 окт 2017 в 8:25

6 ответов 6

Сортировка: Сброс на вариант по умолчанию

И чего так много слов то? Все просто:

Метод всегда является функцией, а функция не всегда является методом.

Отслеживать
ответ дан 30 окт 2017 в 9:12
81.3k 7 7 золотых знаков 73 73 серебряных знака 153 153 бронзовых знака
Это как «Большой палец — всегда палец, но палец не всегда большой?» (c) ТБВ
30 окт 2017 в 9:46
Точно, именно так 🙂
30 окт 2017 в 10:14

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

Так как программирование пришло с математики, то начальные корни нужно искать там. А там были функции и процедуры. Функция на основании своих аргументов генерирует какой-то результат. sin , cos — яркие примеры. Функция без аргументов — вырожденный вариант и обычно это константа. В математике обычно функции являются чистыми — то есть, у них нет побочных эффектов. То есть, вызов функции с одними и теми же аргументами дает один и тот же результат.

Параллельно существуют процедуры. Процедура — это последовательность действий, приводящая к определенному результату (да, обычная программа — это также может быть процедура, хотя. ). В паскале и фортране принято, что процедура не возвращает результат. Но я считаю, что это исключительно соглашение, потому что иначе нужно было бы делать как в C/C++ и вводить пустой тип (void).

почему в Си++ члены не называют «методами»?

Во многих языках 60-70 годов не было ООП в том понимании, которое известно сейчас. С++ изначально был просто «фронтом» (то есть надстройкой) над обычным Си. Был долгий период, когда это уже был не Си, но и ещё и не C++. Компилятора C++ не было, а был транслятор в Си. Видимо, поэтому там закрепилось функция класса/переменная класса. Сейчас Страуструп предлагает N4174, и если его примут, то грань между обычными функциями и функциями класса размоется ещё больше.

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

Собственно, какова разница между терминами «метод» и «функция»

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

многие автора книг по с++ называют функции класса методами. Как быть?

Тут все сложно. Например, Эккель так делает видимо потому, что он ещё и много книг о Java написал. Также не стоит забывать, что многие книги мы читаем в переводе, а они «исправляют», потому что переводчику так понятнее.

так можно ли называть функции класса с++ методами?

Это точно так же, как использовать мат/обсценную лексику в высшем обществе. Или пытаться объясниться с гопниками языком Тургенева и стихами Пушкина/Блока.

P.S. метод — слово многозначное и вполне можно услышать от C++ программистов такое «это метод для получения данных с сервера, реализован в виде 5 функций и двух классов».

Чем метод отличается от функции в Python?

Метод по сути это та же функция, но так как она определена внутри класса, и первым её аргументом является self , то она становится связанным методом bound method , получившим доступ к атрибутам связанного объекта (экземпляра класса).

# Обычная функция: def greet(name): print(f'Hello, name>') class Person: # Инициализатор класса, требующий присваивать значение атрибута name при инстанцировании объекта def __init__(self, name): self.name = name # Связанный метод, имеющий доступ к атрибуту name: def greet(self): print(f'Hello , self.name>. ') bob = Person('Bob') # Вызов связанного метода класса: bob.greet() # => Hello , Bob. # Вызов функции, не имеющий доступа к атрибутам объекта: greet(bob) # => Hello, # Вызов обычной функции, которой можно передать любое значение: greet('Bob') # => Hello, Bob greet(23) # => Hello, 23 greet('apple') # => Hello, apple 

20 марта 2024

В Python методы и функции имеют некоторые ключевые различия, которые важно понимать.

Функции в Python:

Функции в Python — это блок кода, который выполняет определенную задачу при вызове.

  • Функции могут быть определены с помощью ключевого слова def.
  • Они могут принимать аргументы и возвращать значения с помощью return.
  • Функции могут вызываться независимо от какого-либо объекта.

Пример функции в Python:

def add_numbers(a, b): return a + b result = add_numbers(5, 3) print(result) 

Методы в Python:

Методы — это функции, связанные с объектами. Они вызываются на конкретных объектах и могут изменять состояние объекта.

  • Методы определяются внутри классов и могут обращаться к данным объекта через ключевое слово self.
  • Методы могут выполнять операции над данными объекта.

Пример метода в Python:

class Person: def __init__(self, name): self.name = name def greet(self): print("Привет, меня зовут", self.name) person = Person("Alice") person.greet() #=> Привет, меня зовут Alice 

В примере функции add_numbers(a, b) мы определяем функцию для сложения двух чисел и возвращаем результат. Функция вызывается независимо от какого-либо объекта.

В примере метода greet(self) мы определяем метод greet внутри класса Person . Метод greet() используется для вывода приветствия с именем объекта Person . Метод вызывается на конкретном объекте person и обращается к его данным через self .

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

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Python — разница между функцией и методом

#1 Май 3, 2014 10:17:24

setevoy От: Kiev, UA Зарегистрирован: 2013-02-22 Сообщения: 10 Репутация: 0 Профиль Отправить e-mail

Python — разница между функцией и методом

Сразу извиняюсь за столь нубский вопрос — просто до классов ещё не дошёл, а вопрос гложет

К примеру, для списков (list) есть и функции (пример — len(list)), и методы (пример — list.append(obj)) — в чём между ними разница?

> Help on built-in function len in module __builtin__: // т.е. он таки функция (модуля?);
> Help on method_descriptor in list: // т.е. это таки метод (класса?);

Именно между понятием и действиями — функции и метода?

#2 Май 3, 2014 10:20:00

FishHook От: Зарегистрирован: 2011-01-08 Сообщения: 8312 Репутация: 568 Профиль Отправить e-mail

Python — разница между функцией и методом

Методы — это функции, являющиеся атрибутами классов. Любой метод — функция, но не каждая функция — метод. Никакой принципиальной разницы между ними в питоне нет, это просто такая терминология.

Отредактировано FishHook (Май 3, 2014 10:23:02)

Чем отличаются понятия функции, процедуры и метода в программировании?

Периодически вижу все 3 определения. Это одно и то же или же что-то разное, и какое из понятий правильнее всего употреблять?

  • Вопрос задан более трёх лет назад
  • 86088 просмотров

Комментировать
Решения вопроса 2

Функция — подпрограмма, выполняющая какие-либо операции и возвращающая значение.
Процедура — подпрограмма, которая только выполняет операции, без возврата значения.
Метод — это функция или процедура, которая принадлежит классу или экземпляру класса.

Ответ написан более трёх лет назад
Нравится 30 5 комментариев

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

MaxLich, Ничего я не забыл. Это не имеет отношения к вопросу. Вопрос был: чем отличаются. А то что функция/процедура/метод имеет имя и список рациональных параметров это и так очевидно. Скобки — это вообще деталь реализации.

mashletov

«Процедура», имхо, устаревшее понятие. Просто функция, которая не возвращает ничего (void). Это еще во времена Delphi процедура имела отдельное ключевое слово.

D3lphi, Ну я-то про определения, которые Вы дали. Это не просто подпрограмма, а подпрограмма, имеющая имя. Инициализатор (в джаве), например, тоже блок кода, подпрограмма, но имени не имеет, и параметров тоже, поэтому это не функция/метод.

MaxLich, это не определения, а лишь то, чем эти понятия отличаются друг от друга.
Функция/процедура не обязана иметь имя — анонимные функции, как пример.

jenki

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

Ответ написан более трёх лет назад
Комментировать
Нравится 6 Комментировать
Ответы на вопрос 4

mindtester

# @mindtester
http://iczin.su/hexagram_48

Функция — подпрограмма, выполняющая какие-либо операции и возвращающая значение.
Процедура — подпрограмма, которая только выполняет операции, без возврата значения.
Метод — это функция или процедура, которая принадлежит классу или экземпляру класса.

как бы да, но. только на самом начальном этапе, что бы угомонить хаос в голове новичка ))

в дальнейшем, все интереснее все эти понятия контекстно зависимые, контекстом является парадигма программирования и/или конкретный язык

1 — в контексте парадигм, из данных понятий уникально одно Метод, как уже было сказано D3lphi, это нечто принадлежащее классу. класс, в свою очередь, это фундаментальное понятие ООП основанного на классах (шарм ситуации в том, что ООП бывает тоже разное ;))

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

но .. есть много языков, где понятия метод нет вообще

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

2 — из контекста языков:

понятие процедура в явном виде, чаще всего употребляют преподаватели, которые сами учились на языках типа Fortran, Pascal или родственных, и либо не имели другого опыта вообще, либо иной опыт был на много скромнее

сейчас доминируют языки, основывающиеся на Си синтаксисе, даже java и js в данном вопросе станут родственниками классического Си

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

смешение всего этого на примере C# — в этом языке, все есть объект. а любой исполняемый код это метод, и методы реализуются только функциями (в тч void функциями)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *