Чем параметр отличается от аргумента
Перейти к содержимому

Чем параметр отличается от аргумента

  • автор:

Параметры и аргументы функции

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

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

Рассмотрим схему и поясняющий ее пример:

Когда функция вызывается, то ей передаются аргументы. В примере указаны глобальные переменные num1 и num2 . Однако на самом деле передаются не эти переменные, а их значения. В данном случае числа 100 и 12. Другими словами, мы могли бы писать mathem(100, 12) . Разницы не было бы.

Когда интерпретатор переходит к функции, чтобы начать ее исполнение, он присваивает переменным-параметрам переданные в функцию значения-аргументы. В примере переменной a будет присвоено 100, b будет присвоено 12.

Изменение значений a и b в теле функции никак не скажется на значениях переменных num1 и num2 . Они останутся прежними. В Python такое поведение характерно для неизменяемых типов данных, к которым относятся, например, числа и строки. Говорят, что в функцию данные передаются по значению. Можно сказать, когда a присваивалось число 100, то это было уже другое число, не то, на которое ссылается переменная num1 . Число 100 было скопировано и помещено в отдельную ячейку памяти для переменной a .

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

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

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

Произвольное количество аргументов

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

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

def cylinder(h, r = 1): side = 2 * 3.14 * r * h circle = 3.14 * r**2 full = side + 2 * circle return full figure1 = cylinder(4, 3) figure2 = cylinder(5) print(figure1) print(figure2)
131.88 37.68

При втором вызове cylinder() мы указываем только один аргумент. Он будет присвоен переменной-параметру h . Переменная r будет равна 1.

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

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

… figure3 = cylinder(10, 2) figure4 = cylinder(r=2, h=10) print(figure3) print(figure4)

В данном случае оба вызова – это вызовы с одними и теми же аргументами-значениями. Просто в первом случае сопоставление параметрам-переменным идет в порядке следования. Во-втором случае – по ключам, которыми выступают имена параметров.

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

def few_or_many(*a): print(a) few_or_many(1) few_or_many('1', 1, 2, 'abc') few_or_many()
(1,) ('1', 1, 2, 'abc') ()

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

Практическая работа

Напишите программу, в которой определена функция int_test , имеющая один параметр. Функция проверяет, можно ли переданное ей значение преобразовать к целому числу. Если можно, возвращает логическое True . Если нельзя – False .

В основной ветке программы присвойте переменной s то, что пользователь вводит с клавиатуры. Вызовите функцию int_test() , передав ей значение s . Если функция возвращает истину, преобразуйте строку s в число n и выведите на экран значение n + 10 .

Примеры решения и дополнительные уроки в pdf-версии курса

X Скрыть Наверх

Python. Введение в программирование

Различия между параметрами и аргументами (Visual Basic)

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

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

Параметры

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

При определении Function процедуры или Sub необходимо указать список параметров в круглых скобках сразу после имени процедуры. Для каждого параметра укажите имя, тип данных и механизм передачи (ByVal или ByRef). Можно также указать, что параметр является необязательным. Это означает, что вызывающему коду не нужно передавать для него значение.

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

Аргументы

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

При вызове Function процедуры или Sub список аргументов включается в круглые скобки сразу после имени процедуры. Каждый аргумент соответствует параметру в одной позиции в списке.

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

См. также раздел

  • Процедуры
  • Подпрограммы
  • Процедуры функций
  • Процедуры свойств
  • Процедуры операторов
  • Практическое руководство. Определение параметра для процедуры
  • Практическое руководство. Передача аргументов в процедуру
  • Передача аргументов по значению и по ссылке
  • Рекурсивные процедуры
  • Перегрузка процедур

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

C++: Параметры и аргументы функции

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

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

Что такое параметры и аргументы функции

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

Параметры функции определяются в объявлении функции — они указываются в скобках после имени функции. При этом несколько параметров разделяются запятыми.

Посмотрим на код:

#include #include std::string GetFullName(std::string first_name, std::string last_name) < return first_name + " " + last_name; >int main() < std::string result < GetFullName("John", "Wik") >; std::cout

Здесь у нас есть функция GetFullName , которая принимает две строки в качестве параметров. Эти параметры также называются формальными параметрами или аргументами функции. Так наша функция предоставляет интерфейс, ожидая две строки.

В функции main происходит вызов функции GetFullName с передачей фактических аргументов. Количество и типы передаваемых аргументов должны соответствовать интерфейсу функции, иначе программа не будет скомпилирована.

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

Что такое передача по значению

Рассмотрим следующий пример:

#include int AddOne(int num) < return num + 1; >int main() < int number = 1; std::cout ; std::cout

Эта программа создает следующий вывод:

number = 1 result = 2

Обратим внимание на следующее:

  • Мы передаем переменную в вызов функции AddOne . При компиляции программы вместо переменной подставляется ее значение
  • Значение переменной number не изменяется. Это происходит из-за того, что параметр передается по значению. Также при вызове функции внутри нее создается локальная переменная num , в которую копируется значение переменной number . Так функция работает с копией данных, а не с их оригиналом

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

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

Задание

Реализуйте функцию Remainder() , которая принимает число типа int и возвращает остаток от деления на два. Остаток от деления можно взять с помощью оператора % .

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

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

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

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

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

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

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

В чём различия аргументов и параметров функции?

Довольно частый вопрос, который задают новички на форумах и тематических сайтах. Параметры и аргументы функции - где и когда уместно применять то или иное понятие. На самом деле здесь всё очень просто. Рассмотрим несколько примеров на PHP.

Параметр функции

Параметр функции — это переменная, которая используется в функции при её объявлении (в круглых скобках).

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

// Объявление функции функция (параметр1, параметр2) < // Выполняемый код >

Параметр функции — это переменная в сигнатуре функции. Параметр функции - это локальная переменная функции, которая определяется на этапе объявления функции в круглых скобках. Обратиться к параметрам можно только внутри функции, снаружи они не доступны.

name = $name; $this->email = $email; > >

Есть класс User , который содержит метод public function createUser(string $name, string $email) , который в свою очередь ожидает на вход параметры: $name и $email .

Аргумент функции

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

// Вызов функции функция (аргумент1, аргумент2);

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

$user = new User(); // Вызов функции и передача в неё аргументов $user->createUser('Вася', 'Пупкин');

Здесь мы создаём экземпляр класса User (объект) и передаём в метод createUser() аргументы: Вася и Пупкин .

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

Пример

развернуть

setName($name); $this->setEmail($email); > /** * Параметр $name * @param string $name */ private function setName(string $name): void < $this->name = $name; > /** * Параметр $email * @param string $email */ private function setEmail(string $email): void < $this->email = $email; > /** * Функция без параметров * @return string */ public function getEmail(): string < return $this->email; > /** * Функция без параметров * @return string */ public function getName(): string < return $this->name; > >
// Создание объекта $user = new User(); // Вызывавем функцию с аргументами $user->createUser('Вася', 'Пупкин'); // Вызов функции без аргументов. Сама функция никаких параметров не требует $user->getName(); $user->getEmail();

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

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