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

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

  • автор:

Вопрос по общей теории Python. Чем оператор отличается от функции?

Заметил разделение на функции и операторы в питоне. Нашел такие определения в книге A Byte of Python: Функции – это многократно используемые фрагменты программы. Они позволяют дать имя определённому блоку команд с тем, чтобы впоследствии запускать этот блок по указанному имени в любом месте программы и сколь угодно много раз. Это называется вызовом функции. Операторы – это некий функционал, производящий какие-либо действия, который может быть представлен в виде символов, как например +, или специальных зарезервированных слов. Операторы могут производить некоторые действия над данными, и эти данные называются операндами. В нашем случае 2 и 3 – это операнды. Как мне кажется определения в чем то схожи, так в чем главные отличия?

Отслеживать
задан 7 авг 2020 в 7:50
369 1 1 золотой знак 4 4 серебряных знака 17 17 бронзовых знаков
Функция — явно не наименьшая часть, может и тысячи строк кода занимать
7 авг 2020 в 7:52
А больше отличий нету?
7 авг 2020 в 7:53

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

7 авг 2020 в 7:53

Под «инструкция или оператор» видимо имеют в виду «statement», то есть, очень грубо говоря, отдельную строчку кода, выполняющую какое-то действие (типа print(«Hello world!») ).

7 авг 2020 в 7:56

Если привести аналогии. Так вот Инструкция или оператор — это слова в языке. а Функции — предложения.

Чем отличается оператор от функции?

Оператор — это команда на выполнение одного определённого простейшего действия. Как правило, машинного кода процессора. Это операторы математических и логических действий, сравнения, условного и безусловного переходов, чтения/записи из памяти и в неё, пересылки данных.

Функция — это набор из нескольких операторов и/или других функций. И функция выполняет уже не простейшее действие, а довольно объёмное. Например, функции обеспечивают работу ввода/вывода с внешними носителями информации, вычисляют синусы, косинусы. и прочее такое же, работают с массивами данных.

Имеются стандартные функции во всех языках программирования. И все они состоят из операторов и других функций.

Операторы же, как атомы, из которых состоит всё вокруг. Эти атомы собираются в молекулы, скопления молекул, клетки. и в конечном итоге в нас. Каждый атом — оператор, клетка — функция, и я — программа, состоящая из них. И Вы.

Отличия функции от оператора

Есть ли отличия между функцией и оператором. Если есть — то какие?

andreik ★
13.12.09 12:31:08 MSK

В лекциях найти не можешь? Или не писал? Или прогуливал?

Begemoth ★★★★★
( 13.12.09 12:50:49 MSK )

Хоть скажи, в каком языке.

Miguel ★★★★★
( 13.12.09 13:28:19 MSK )
Ответ на: комментарий от Miguel 13.12.09 13:28:19 MSK

+ делает одно и то же, но называются по разному.

andreik ★
( 13.12.09 13:51:51 MSK ) автор топика

Прозреваю самый эпичный срач на декабрь.

LamerOk ★★★★★
( 13.12.09 14:01:18 MSK )
Ответ на: комментарий от LamerOk 13.12.09 14:01:18 MSK

Вряд ли. Слишком уныло.

Begemoth ★★★★★
( 13.12.09 14:02:59 MSK )

контекст-то какой математика, язык программирование, шоу на тнт?

dimon555 ★★★★★
( 13.12.09 14:36:17 MSK )
Ответ на: комментарий от dimon555 13.12.09 14:36:17 MSK

Вообще — программирование. Но я так понял, что и в математике это значит то же самое?

andreik ★
( 13.12.09 14:46:08 MSK ) автор топика
Ответ на: комментарий от Begemoth 13.12.09 14:02:59 MSK
LamerOk ★★★★★
( 13.12.09 14:50:32 MSK )

ip1981 ☆☆
( 13.12.09 15:19:10 MSK )
Ответ на: комментарий от ip1981 13.12.09 15:19:10 MSK

Что — нет? Не то же самое? Или вы о другом? Потрудитесь объяснится.

andreik ★
( 13.12.09 15:44:44 MSK ) автор топика

В математике оператор, это что-то вроде функции высшего порядка, наприимер оператор дифференцирования.

В программировании как правило оператор и инфиксная функция (или процедура) это одно и тоже.

dizza ★★★★★
( 13.12.09 15:47:52 MSK )
Ответ на: комментарий от dizza 13.12.09 15:47:52 MSK

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

andreik ★
( 13.12.09 15:55:20 MSK ) автор топика
Ответ на: комментарий от andreik 13.12.09 15:55:20 MSK
LamerOk ★★★★★
( 13.12.09 16:00:19 MSK )

В лиспе оператор это какая-либо специальная синтаксическая конструкция, используемая, как правило, для управления потоком вычислений, которая может даже не иметь возвращаемого значения(напр. операторы GO(т.е. goto) или return-from)

То, что в некоторых языках операторами называют «+» и «-» это проблемы негров.

Love5an
( 13.12.09 16:10:25 MSK )
Ответ на: комментарий от Love5an 13.12.09 16:10:25 MSK

> То, что в некоторых языках операторами называют «+» и «-» это проблемы негров.

В некоторых языках это скорее операции, а операторы вот так: http://www.citforum.ru/programming/cpp_ref/ref_6.shtml 🙂

const86 ★★★★★
( 13.12.09 16:31:19 MSK )
Ответ на: комментарий от andreik 13.12.09 15:55:20 MSK

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

Это зависит от языка. В Haskell, например, это различие связано только с синтаксисом применения функции к аргументу и оператора к операндам. В C, Pascal, Ada, Java и прочих подобных операторы соответствуют математическим операциям над встроенными типами данных и служат для эффективной реализации этих операций.

Begemoth ★★★★★
( 13.12.09 16:52:38 MSK )
Ответ на: комментарий от dizza 13.12.09 15:47:52 MSK

>>В математике оператор, это что-то вроде функции высшего порядка, наприимер оператор дифференцирования.

В математике не бывает «что-то вроде».

Оператор в математике — это отображение из множества функций в множество функций.

Понятие оператора в программировании не имеет к такой трактовке ни малейшего отношения.

mclaudt ☆
( 13.12.09 17:49:05 MSK )
Ответ на: комментарий от mclaudt 13.12.09 17:49:05 MSK

>В математике не бывает «что-то вроде».

Бывает и еще как. В разных областях определение может сильно отличаться.

Оператор в математике — это отображение из множества функций в м

Как вариант. Хочк подметить, что отбражение из X в Y есть просто функция, следовательно множество операторов пренадлежит множеству функций =)

dizza ★★★★★
( 13.12.09 18:15:23 MSK )
Ответ на: комментарий от const86 13.12.09 16:31:19 MSK

То, что в английском называется «operator», применительно к программированию, от функций отличается только, иногда, семантикой вычисления (например, в некоторых «энергичных» языках оно иногда «короткого цикла»), и, в некоторых недоязыках, синтаксисом.

Love5an
( 13.12.09 19:29:16 MSK )
Ответ на: комментарий от mclaudt 13.12.09 17:49:05 MSK

>Оператор в математике — это отображение из множества функций в множество функций.

То есть, кроме функционального анализа математики нет? «Оператор» в математике это то же самое, что и «отображение».

Love5an
( 13.12.09 19:33:21 MSK )

в с++ некоторые различия есть

операторы && и || вычисляют свои аргументы лениво, а функции — нет (и перегруженные версии тоже не вычисляют свои аргументы лениво)

(еще «operator,» при перегрузке перестает быть sequence point — но к вопросу это мало относится)

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

www_linux_org_ru ★★★★★
( 13.12.09 19:41:27 MSK )
Ответ на: комментарий от mclaudt 13.12.09 17:49:05 MSK

> В математике не бывает «что-то вроде»

Оператор в математике — это отображение из множества функций в множество функций.

как насчет оператора из линейного пространства непрерывных на отрезке [0,1] вещественнозначных функций, возвращающего определенный интеграл по этому отрезку от функции?

www_linux_org_ru ★★★★★
( 13.12.09 19:51:27 MSK )
Ответ на: комментарий от www_linux_org_ru 13.12.09 19:51:27 MSK

> как насчет оператора из линейного пространства непрерывных на отрезке [0,1] вещественнозначных функций, возвращающего определенный интеграл по этому отрезку от функции?

Это называется «функционал» — числовая функция на функциональном пространстве.

annoynimous ★★★★★
( 13.12.09 19:53:00 MSK )
Ответ на: комментарий от www_linux_org_ru 13.12.09 19:51:27 MSK

> В математике не бывает «что-то вроде»

да я бы сказал там почти всегда «что-то вроде»

www_linux_org_ru ★★★★★
( 13.12.09 19:53:19 MSK )
Ответ на: комментарий от www_linux_org_ru 13.12.09 19:41:27 MSK

Это пустой спор. Можно перегрузить ||, и перегрузка будет ленивой, типа:

if (a) return true; if (b) return true; return false;

ip1981 ☆☆
( 13.12.09 19:54:14 MSK )
Ответ на: комментарий от ip1981 13.12.09 19:54:14 MSK

Приведи пример когда перегруженный operator|| будет ленивым.

Begemoth ★★★★★
( 13.12.09 19:57:32 MSK )
Ответ на: комментарий от annoynimous 13.12.09 19:53:00 MSK

> Это называется «функционал» — числовая функция на функциональном пространстве.

ладно, а отображение C1->R^n ты бы назвал функционалом?

www_linux_org_ru ★★★★★
( 13.12.09 19:57:39 MSK )
Ответ на: комментарий от Begemoth 13.12.09 19:57:32 MSK

Это интересный вопрос.

Перегрузка, например, не меняет приоритета оператора.
Меняется ли ленивость — вопрос к спецификации и реализации компилятора.

Это можно проверить.

ip1981 ☆☆
( 13.12.09 20:26:12 MSK )

В некоторых ущербных языках операторы — это то что невозможно выразить функцией.

imhotep
( 13.12.09 20:35:30 MSK )

В математике строго определено лишь понятие функции, которое полностью синонимично понятию отображения (так принято в большинстве источников, но, наверное, можно найти и исключения). Операторами, как правило, называют некоторые функции, аргументами которых являются другии функции. Общепринятого определения оператора нет (и не нужно). При желаниии можно посмотреть википедию на эту тему: http://en.wikipedia.org/wiki/Operator

ksl
( 13.12.09 20:36:03 MSK )
Ответ на: комментарий от ip1981 13.12.09 20:26:12 MSK

Меняется ли ленивость — вопрос к спецификации и реализации компилятора.

Меняется. Ленивость — это свойство операторов || и && для встроенных типов данных. Перегруженные же операторы — это просто функции со спец. синтаксисом, порядок же вычисления их аргументов такой же как и у остальных.

Begemoth ★★★★★
( 13.12.09 20:47:02 MSK )
Ответ на: комментарий от Begemoth 13.12.09 20:47:02 MSK

О перегрузке || и && говорится у Мейерса в «Наиболее эффективном использовании С++».

Begemoth ★★★★★
( 13.12.09 20:49:27 MSK )
Ответ на: комментарий от Begemoth 13.12.09 20:47:02 MSK

вот и славненько 🙂

А сейчас умолкаем и наблюдаем за разгорающимся спором о сущности математики 😉

ip1981 ☆☆
( 13.12.09 20:53:02 MSK )
Ответ на: комментарий от mclaudt 13.12.09 17:49:05 MSK

>отображение из множества функций в множество функций

моя всегда хотеть убивать математиков за такой языка!

golodranez ★★★★
( 13.12.09 21:10:23 MSK )
Ответ на: комментарий от golodranez 13.12.09 21:10:23 MSK

моя всегда хотеть убивать математиков за такой языка!

even though dynamorphism is a form of chronomorphism, because ‘eta’ can be folded into the anamorphism side of the chronomorphism, as you do with a normal hylomorphism

jtootf ★★★★★
( 13.12.09 22:28:11 MSK )

функция — это фигня которая получает информацию на входе и выдаёт информацию на выходе (например на входе число 3 — а на выходе три барана)

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

pupok ★★
( 14.12.09 11:27:36 MSK )
Ответ на: комментарий от ksl 13.12.09 20:36:03 MSK

> Операторами, как правило, называют некоторые функции, аргументами которых являются другии функции.

имхо, операторами обычно называют функции вида X -> X, где X называют пространством.

dilmah ★★★★★
( 14.12.09 14:06:02 MSK )
Ответ на: комментарий от dilmah 14.12.09 14:06:02 MSK

Хорошо, давайте разбираться. Во-первых, вам следует быть осторожнее с записью X -> X. Обычно под этим понимают, что область определения отображения совпадает с Х. Так мы выкинем кучу полезных оперторов (например, в квантовой механике абсолютное большинство самосопряженных операторов, которые соответсвуют измерениям, определены лишь на плотном подмножестве). Во-вторых, исходя из вашего определения функции вещественного переменного с вещественными значениями будут зваться операторами. Я, признаться, не слышал чтобы sinx именовался оператором, а не функцией. Примеры операторов, которые приходят в глову: различные операторы дифференцирования и интегрирования, оператор Фурье (хотя тут, конечно, чаще говорят преобразование), оператор сдвига, Гамильтониан.

Тут вот еще что надо заметить. Оператором называют линейное отображение между двумя линейными подпространствями двух Банаховых пространств (чаще даже Гильбертовых). Хоть в это определение и можно включить большиснтво вышеупомянутых примеров, я бы все же не стал утверждать, что слово оператор имеет только этот смысл.

Функция и Оператор — что это такое в программировании. Отличия

vedro-compota's picture

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

Что такое оператор

Оператор — знак какой либо операции, операции же обычно производятся над объектами, например, во многих языках программирования сложение двух литералов можно произвести используя оператор суммы, известный нам как «плюс»:

2 + 5

— прежде чем читать дальше отметьте себе, что данные часто пишутся «сбоку» от оператора, например у бинарных операторов (тех, что принимают два значения, как этот оператор суммы) данные часто записываются справа и слева (подробнее см. например в заметке об операторах и присваивании в Паскаль).

Что такое «функция»

Процедура/функция/метод класса — всё это сути своей подпрограммы.

Подпрограмма — это программа, которую основная программа вызывает для совершения каких либо действий.

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

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

sum(a, b)

— такая функция сложит значения переменных $a$ и $b$, то есть сделает в точности тоже, что и оператор суммы, но заметьте, что тут используется совершенно другая записать передачи данных для операции над ними — это как раз «компьютерный» стиль, когда данные для операции перечисляются в скобках после её имени.

Какая разница (запись в коде)

Пришло время проговорить о разнице между тем что называют оператором и тем что называют функцией.

Итак ещё раз, предположим, что в вашем языке программирования есть:

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

и пусть у вас есть задача записать в переменную $z$ сумму двух числовых литералов (ну или просто «сумму двух чисел») $2$ и $5$.

Тогда с использованием оператора это делается так:

z := 5 + 2; // (присваивание с синтаксисе Паскаль)

А с использованием функции так:

z := sum(5, 2);

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

Что могло бы быть — если бы операторов вообще не было

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

ну или с записью в переменную:

z := +(5, 2);

— но обычно так не пишут (да и многие языки не дают создавать функции, имена которых совпадают с записью операторов).

То есть разные формы записи связаны скорее с традицией и удобством восприятия.
Перейдём к выводам.

Выводы

Чем похожи функции и операторы:

  1. и те и другие производят действия над данными (операции), потому оператор часто называют «знаком операции», а функцию можно называть «именем операции».
  2. и те и другие «возвращают» результат, после выполнения действия/действий над данными.

Чем отличается функция от оператора:

  1. Операторы обычно являются частью ядра языка программирования, во многих языках программист не может создавать новых операторов, в вот свои подпрограммы (напр. функции) писать может.
  2. Операторы в реальном программировании обычно выполняют более «простые» действия чем функции.
  3. Данные для работы операторов и для работы функции в коде передаются по-разному (об это было выше).

Key Words for FKN + antitotal forum (CS VSU):

  • функция и оператор какая разница
  • отличие функции от оператора программирование
  • Чем отличается оператор от функции
  • Чем отличается функция от оператора
  • в высокоуровневых языках программирования
  • примеры

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

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