Чем метод отличается от функции в Python?
В отличие от функции, метод узко специализирован и может быть применен только к объектам, которые его поддерживают. Например, метод списков append() может быть применен только к ним. Применение данного метода к другим объектам, которые его не поддерживают (строки или кортежи) вызовет ошибку. Но есть и такие методы, которые хорошо работают с несколькими типами объектов, например метод count() может применяться к строкам, спискам или кортежам
13 февраля 2023
Метод по сути это та же функция, но так как она определена внутри класса, и первым её аргументом является 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
Методы и функции в C#?
Может я чего-то не понимаю, но разве синтаксис функций и методов в С# не одинаковый? И что вообще называют методами и функциями? Спасибо за ответы.
- Вопрос задан более трёх лет назад
- 1569 просмотров
Комментировать
Решения вопроса 1
Victor Bomberow @majstar_Zubr
C++, C#, gamedev
Есть термины функция, процедура, метод в рамках парадигм программирования, но терминология в C# иная.
В C# нет функций и процедур, есть только методы и делегаты.
Лямбда-выражения, в зависимости от контекста, «под капотом» приводятся к анонимным делегатам с телом или к Func, Predicate, Action.
Все утыкается в объектную модель, которую поддерживает абстрактная машина языка C#.
Единицей трансляции является класс, и свободных функций в namespace быть не может, так же как и указателей на функцию в принципе — вместо указателей на функцию в C# используются делегаты. Делегат реализован как абстрактный класс, это позволило реализовать типобезопасные ссылки на методы, которые можно складывать и вычитать, позволило удобно реализовать асинхронность.
Делегат указывает только лишь на сигнатуру метода. Но предполагается, что объект, у которого вызывается метод через делегат, является экземпляром класса, который имеет такую же сигнатуру, как и делегат.
В C# нет понятия функции как объекта, функцию нельзя просто так создать. Вообще можно, но прежде чем её использовать, её нужно будет скомпилировать, но она будет в любом случае в каком-то классе, и она будет методом этого класса; и чтобы методы вызвать, сначала надо получить ссылку на экземпляр класса.
Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать
Ответы на вопрос 2

Участник OpenStreetMap
Метод — он что-то делает молча и возвращает ничто ( void ).
Функция же после того как что-то сделала, возвращает свой результат, будь то число, текст или даже целый класс.
В общем различия только философские.
Функция
Функция — это отдельный блок программы, который выполняет одно конкретное действие. Обычно функции выглядят как маленькие программы внутри основного кода, и их можно запускать в разные моменты времени.
В разговорной речи функцией называют какую-то возможность программного обеспечения, например функция записи звука. Но в программировании значение несколько иное: это часть программного кода со своими особенностями.
В информатике функция считается одним из основных понятий. Возможность создавать и запускать функции есть практически во всех языках программирования, кроме самых примитивных и близких к аппаратной части.

«IT-специалист с нуля» наш лучший курс для старта в IT
IT-специалист с нуля
Наш лучший курс для старта в IT. За 2 месяца вы пробуете себя в девяти разных профессиях: мобильной и веб-разработке, тестировании, аналитике и даже Data Science — выберите подходящую и сразу освойте ее.

Профессия / 8 месяцев
IT-специалист с нуля
Попробуйте 9 профессий за 2 месяца и выберите подходящую вам

Для чего нужны функции
В программировании часто приходится выполнять одни и те же действия: перебирать массив, создавать набор объектов или получать данные с сервера. Если каждый раз писать команды для этих действий с нуля, программа получится большой, громоздкой и нечитаемой.
Именно в таких ситуациях нужны функции — «программы» в программе. Они позволяют один раз описать, как выполнять какое-то действие, а потом сколько угодно раз запускать это действие одной строчкой кода. Это можно сделать практически в любой момент выполнения, а еще функцию можно вызывать с разными аргументами — и получать разный результат.
Благодаря функциям код становится более чистым, лаконичным и понятным:
- действия разделены по функциям, а не хаотично повторяются в разных местах кода;
- программу легче отлаживать, ведь разработчик сам знает, где «лежит» какое действие;
- код можно использовать повторно и не писать одно и то же снова и снова;
- функции облегчают работу с элементами интерфейса: при нажатии на кнопку можно просто вызывать функцию с нужным действием, а не писать код отдельно.
В языках программирования обычно существуют наборы готовых функций для базовых действий, собранные в библиотеки. Но разработчик может писать свои собственные функции — для любых действий, которые ему понадобятся.
Что можно делать с функциями
Задавать. Разработчик может создать функцию — описать, как она будет называться и что будет делать. Обычно описание начинается с ключевого слова function и имени функции, которое разработчик придумывает сам. Правда, в разных языках синтаксис может отличаться.
Задать функцию можно в любом участке кода. Но правилом хорошего тона считается собирать все функции в одном месте, а не разбрасывать их по документу с кодом хаотично.
Вызывать. Когда программист задает функцию, она не выполняется сразу — это просто описание. Чтобы функция сработала, ее нужно вызвать: написать в нужном участке кода команду вызова. Команда обычно состоит из названия функции и двух скобок. Например, так: myFunction().
Вызывать с аргументами. Иногда, чтобы функция сработала как надо, ей нужно передать какие-то данные. Причем при разных вызовах эти данные могут различаться. В таком случае можно создать функцию с параметрами:
- при создании функции описать, что она будет получать на входе — какие-то переменные с любым удобным разработчику именем;
- при вызове указывать в круглых скобках значения аргументов, фактических значений, которые будут передаваться в функцию. Это могут быть числа, строки, объекты и так далее.
Например, функция multiply умножает заданное число на 2. Чтобы она могла каждый раз получать новое число, при создании функции указывают параметр number: function multiply(number). Это значит, что на вход функция будет получать какой-то number и иметь возможность с ним работать. А при вызове вместо number будут писать в скобках нужное число или переменную. Например, так: multiply(2) или multiply(myMoney). 2 и myMoney — аргументы, которые передаются в параметр.
Получать значения. Функция может возвращать в основную программу какой-то результат, и с ним можно работать: записывать в переменную или использовать в вычислениях. Обычно для возврата используют ключевое слово return, а после него пишут то, что нужно вернуть. Существуют и функции, которые ничего не возвращают, — иногда бывает нужно и такое.
Редактировать. Если изменить описание функции, ее работа поменяется во всех местах, где эту функцию вызывали. Результат тоже изменится.

Курс для новичков «IT-специалист
с нуля» – разберемся, какая профессия вам подходит, и поможем вам ее освоить
Как работают функции
Обычно функция работает как бы отдельно от остального кода. Она может пользоваться переменными и объектами, которые есть во внешней части программы, но так делать не рекомендуют: лучше передавать нужную информацию в функцию с помощью параметров.
- Чаще всего при передаче параметра в функцию отправляется копия значения. Это значит, что если внутри функции изменить переданное значение, то во внешнем коде оно останется прежним.
- В некоторых языках программирования разработчик сам может выбрать, что передать в функцию: копию значения или изначальную переменную. Во втором случае, если поменять переданную переменную в функции, она изменится и во внешнем коде.
Внутри самой функции тоже можно создавать переменные и работать с ними. Но эти переменные будут доступны только в функции — получить к ним доступ из внешнего кода нельзя. Можно сказать, что внутреннее содержимое функции «закрыто» от основного кода. Наружу она выдает только то, что указано в return.
Как задают функции
Способы объявить функцию различаются в зависимости от языка программирования. Всего существует несколько основных видов описания:
- декларативное — стандартный вариант, существующий практически во всех языках. Функцию описывают отдельно от других действий, описание начинают со слова function или другого в зависимости от языка. Такая функция не исполняется сразу, а существует как отдельный блок кода и «ждет», пока ее вызовут;
- через выражение — вариант, который распространен в языке JavaScript. Функцию создают прямо внутри какого-то выражения, например a = function… и так далее. Такая функция выполнится сразу после появления, в рамках этого же выражения;
- стрелочное — функцию описывают без ключевого слова function, вместо него используют стрелку =>. У такого описания свой синтаксис, и обычно его применяют для простых функций в одну-две строчки.
Функции-выражения и стрелочные функции могут быть анонимными — то есть для них можно не указывать имя. Анонимные функции нельзя вызвать в коде повторно, но их часто используют, чтобы структурировать программу.
Что такое чистая функция
Существует понятие чистой функции — полностью предсказуемой функции без побочных эффектов. Чистая функция при одинаковых условиях всегда выдает один и тот же результат. На ее работу не влияют внешние условия в коде, и сама она тоже не влияет на внешний код.
Например, если функция просто каждый раз складывает 2+2, ее можно назвать чистой. Правда, практической ценности у такой функции обычно минимум.
На практике часто получается так, что функция взаимодействует с переменными и значениями из внешнего кода. А значит, может их менять. Когда такое происходит, возникают побочные эффекты: разработчик не всегда может отследить, что и где поменяла функция. То есть код становится менее предсказуемым, и его сложнее отлаживать.
Поэтому чистые функции считаются правилом хорошего тона. Чтобы их писать, нужно соблюдать несколько правил:
- стараться, чтобы функция не брала информацию напрямую из внешнего кода;
- передавать нужные функции значения в виде аргументов;
- отслеживать зависимости между данными, чтобы одна информация не могла случайно и непредсказуемо повлиять на другую.
Одними только чистыми функциями обойтись нельзя. Некоторые важные и нужные разработчикам действия просто невозможно реализовать с помощью чистых функций.
- Например, если функция возвращает текущее время или генерирует случайное число, она не сможет постоянно выдавать один и тот же результат — то есть не сможет быть чистой.
- А если функция записывает что-то в файл или читает из него информацию, она общается со внешним окружением — и тоже не является чистой.
Но считается, что, если у разработчика есть возможность написать для какого-то действия чистую функцию — лучше писать чистую. Это упрощает код и облегчает работу с ним в будущем.
Разница между функцией, методом и процедурой
Есть еще два понятия, которые связаны с функциями, — метод и процедура. Это похожие на функции конструкции, но у них есть свои особенности.
Метод. Так называют функцию внутри объекта. Объект — структура данных, которая описывает какую-то сущность: кнопку, предмет в компьютерной игре, запись из базы данных и так далее. У объекта есть свойства и методы.
- Свойства — это переменные, которые описывают объект. Например, вес персонажа, цвет предмета и так далее.
- Методы — это действия, которые объект может выполнять. Скажем, объект «кот» может выполнять действия «бегать», «прыгать», «спать», «есть», «вылизываться» и так далее.
Фактически, методы — это тоже функции. Но они не самостоятельны. Методы привязаны к объекту и выполняются в связке с ним. Даже вызывать их обычно можно, только если обратиться к имени объекта.
Процедура. Это понятие есть не во всех языках программирования. Так называют функцию, которая ничего не возвращает, зато меняет внешнее окружение и переданные ей аргументы. Она по определению не может быть чистой, но в некоторых ситуациях такое поведение тоже бывает нужно — например, процедурой можно оформить ту же запись в файл.
Как начать работать с функциями
Обычно функции изучают в самом начале знакомства с программированием. Это одно из базовых понятий информатики и компьютерных наук. Правила работы с функциями в том или ином языке могут различаться — об этом рассказывают на ранних этапах изучения языка программирования. Просто начните изучать интересный вам язык, и довольно скоро сможете применять функции на практике.
Чем отличаются понятия функции, процедуры и метода в программировании?
Периодически вижу все 3 определения. Это одно и то же или же что-то разное, и какое из понятий правильнее всего употреблять?
- Вопрос задан более трёх лет назад
- 82863 просмотра
Комментировать
Решения вопроса 2
Функция — подпрограмма, выполняющая какие-либо операции и возвращающая значение.
Процедура — подпрограмма, которая только выполняет операции, без возврата значения.
Метод — это функция или процедура, которая принадлежит классу или экземпляру класса.
Ответ написан более трёх лет назад
Нравится 30 5 комментариев
Забыли сказать, что у функции, процедуры и метода должно быть имя и параметры (или ничего, но скобки нужны в любом случае)
MaxLich, Ничего я не забыл. Это не имеет отношения к вопросу. Вопрос был: чем отличаются. А то что функция/процедура/метод имеет имя и список рациональных параметров это и так очевидно. Скобки — это вообще деталь реализации.

«Процедура», имхо, устаревшее понятие. Просто функция, которая не возвращает ничего (void). Это еще во времена Delphi процедура имела отдельное ключевое слово.
D3lphi, Ну я-то про определения, которые Вы дали. Это не просто подпрограмма, а подпрограмма, имеющая имя. Инициализатор (в джаве), например, тоже блок кода, подпрограмма, но имени не имеет, и параметров тоже, поэтому это не функция/метод.
MaxLich, это не определения, а лишь то, чем эти понятия отличаются друг от друга.
Функция/процедура не обязана иметь имя — анонимные функции, как пример.

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

# @mindtester
http://iczin.su/hexagram_48
Функция — подпрограмма, выполняющая какие-либо операции и возвращающая значение.
Процедура — подпрограмма, которая только выполняет операции, без возврата значения.
Метод — это функция или процедура, которая принадлежит классу или экземпляру класса.
как бы да, но. только на самом начальном этапе, что бы угомонить хаос в голове новичка ))
в дальнейшем, все интереснее все эти понятия контекстно зависимые, контекстом является парадигма программирования и/или конкретный язык
1 — в контексте парадигм, из данных понятий уникально одно Метод, как уже было сказано D3lphi, это нечто принадлежащее классу. класс, в свою очередь, это фундаментальное понятие ООП основанного на классах (шарм ситуации в том, что ООП бывает тоже разное ;))
в этом случае чаще принято уточнять что метод — это один из видов челнов класса (бывают еще поля, свойства, интерфейсы но это уже контекст конкретного языка) .. и как верно заметил Griboks — он реализуется функцией или процедурой
но .. есть много языков, где понятия метод нет вообще
а еще есть функциональное программирование .. эта парадигма частично присутствует во многих современных языках, однако есть языки, где любой код только функция
2 — из контекста языков:
понятие процедура в явном виде, чаще всего употребляют преподаватели, которые сами учились на языках типа Fortran, Pascal или родственных, и либо не имели другого опыта вообще, либо иной опыт был на много скромнее
сейчас доминируют языки, основывающиеся на Си синтаксисе, даже java и js в данном вопросе станут родственниками классического Си
а в нем нет понятия процедуры, только функции.. а на случай, когда функция не обязана возвращать какую либо величину, просто указывается тип возвращаемого значения void
смешение всего этого на примере C# — в этом языке, все есть объект. а любой исполняемый код это метод, и методы реализуются только функциями (в тч void функциями)