Параметры и аргументы функций#
Цель создания функции, как правило, заключается в том, чтобы вынести кусок кода, который выполняет определенную задачу, в отдельный объект. Это позволяет использовать этот кусок кода многократно, не создавая его заново в программе.
Как правило, функция должна выполнять какие-то действия с входящими значениями и на выходе выдавать результат.
При работе с функциями важно различать:
- параметры — это переменные, которые используются при создании функции.
- аргументы — это фактические значения (данные), которые передаются функции при вызове.
Параметры бывают обязательные и необязательные.
def f(a, b): pass
Необязательные (со значением по умолчанию):
def f(a=None): pass
В этом случае a — передавать необязательно.
Аргументы бывают позиционные и ключевые.
def summ(a, b): return a + b
summ(1, 2)
summ(a=1, b=2)
Независимо от того как параметры созданы, при вызове функции им можно передавать значения и как ключевые и как позиционные аргументы. При этом обязательные параметры надо передать в любом случае, любым способом (позиционными или ключевыми), а необязательные можно передавать, можно нет. Если передавать, то тоже любым способом.
Подробнее типы параметров и аргументов будут рассматриваться позже.
Для того, чтобы функция могла принимать входящие значения, ее нужно создать с параметрами (файл func_check_passwd.py):
In [1]: def check_passwd(username, password): . : if len(password) 8: . : print('Пароль слишком короткий') . : return False . : elif username in password: . : print('Пароль содержит имя пользователя') . : return False . : else: . : print(f'Пароль для пользователя username> прошел все проверки') . : return True . :
В данном случае, у функции два параметра: username и password.
Функция проверяет пароль и возвращает False, если проверки не прошли и True если пароль прошел проверки:
In [2]: check_passwd('nata', '12345') Пароль слишком короткий Out[2]: False In [3]: check_passwd('nata', '12345lsdkjflskfdjsnata') Пароль содержит имя пользователя Out[3]: False In [4]: check_passwd('nata', '12345lsdkjflskfdjs') Пароль для пользователя nata прошел все проверки Out[4]: True
При таком определении функции надо обязательно передать оба аргумента. Если передать только один аргумент, возникнет ошибка:
In [5]: check_passwd('nata') --------------------------------------------------------------------------- TypeError Traceback (most recent call last) ipython-input-5-e07773bb4cc8> in module> ----> 1 check_passwd('nata') TypeError: check_passwd() missing 1 required positional argument: 'password'
Аналогично, возникнет ошибка, если передать три и больше аргументов.
В чём различия аргументов и параметров функции?
Довольно частый вопрос, который задают новички на форумах и тематических сайтах. Параметры и аргументы функции — где и когда уместно применять то или иное понятие. На самом деле здесь всё очень просто. Рассмотрим несколько примеров на 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();
JavaScript: Параметры и аргументы функции
Параметры функции играют роль локальных переменных в теле функции. При указании параметров функции ключевое слово var или let использовать не нужно, JavaScript объявляет их в качестве локальных переменные автоматически. Параметров может быть указано любое количество:
function foo(a, b, c) < . >// a, b, c – параметры функции
При вызове функции, ей могут передаваться значения, которыми будут инициализированы параметры. Значения, которые передаются при вызове функции называются аргументами . Аргументы, указываются через запятую:
function foo(a, b) < var sum = a + b; alert(sum); >foo(5, 7); // 12
Когда при вызове функции ей передаётся список аргументов, эти аргументы присваиваются параметрам функции в том порядке, в каком они указаны: первый аргумент присваивается первому параметру, второй аргумент – второму параметру и т. д.
Если число аргументов отличается от числа параметров, то никакой ошибки не происходит. В JavaScript подобная ситуация разрешается следующим образом:
- Если при вызове функции ей передаётся больше аргументов, чем задано параметров, «лишние» аргументы просто не присваиваются параметрам. Допустим, имеется следующее объявление функции:
function foo(a, b, c) < // . >
Все функции имеют два неявных параметра: arguments и this . Под словом неявный подразумевается, что эти параметры не перечисляются явно в объявлении функции. Эти параметры также неявно инициализируются при вызове функции. К ним можно обращаться в самой функции так же, как и к любым другим явно установленным параметрам.
Значения параметров по умолчанию
Параметры функции можно инициализировать значениями по умолчанию, которые будут использоваться в том случае, если параметры не были инициализированы аргументами при вызове функции:
function foo(greeting = "Привет", name = "Гость") < console.log(greeting + ", " + name + "!"); >foo(); // "Привет, Гость!"
Передача значения undefined в качестве аргумента воспринимается как отсутствие аргумента:
function foo(greeting = "Привет", name = "Гость") < console.log(greeting + ", " + name + "!"); >foo(undefined, "Гомер"); // "Привет, Гомер!"
Функция, в которой используются параметры со значениями по умолчанию, всегда работает как в строгом режиме, даже если он не был включен:
function foo(a, b = 2) < console.log(a === arguments[0]); console.log(b === arguments[1]); >foo(1); // true // false
Так как в функцию передаётся только один аргумент, arguments[1] имеет значение undefined , поэтому сравнение console.log(b === arguments[1]); в результате даёт false .
Если в функции используются параметры со значениями по умолчанию, то использование объявления строгого режима внутри функции приведёт к синтаксической ошибке:
function foo(a = 1) < "use strict"; // Ошибка >
Значением по умолчанию может быть как простое, так и сложное выражение:
function foo(a = 1, b = 2 + 2) < console.log(a, b); >foo(1); // 1 4
Значение предыдущего параметра можно использовать в качестве значения по умолчанию для любого из последующих параметров:
function foo(a, b = a) < console.log(a, b); >foo(1); // 1 1
Попытка использовать значение последующего параметра в качестве значения по умолчанию для предшествующего параметра вызовет ошибку:
function foo(a = b, b) < console.log(a, b); >foo(undefined, 1); // Ошибка
Параметры создаются в момент вызова функции в том порядке, в котором они следуют в определении функции. Каждый параметр создаётся по аналогии объявления переменной с помощью ключевого слова let. Это означает, что использование параметра до того как он был создан вызовет ошибку.
Попытка использовать значение переменной, объявленной в теле функции, в качестве значения по умолчанию для параметров функции, также вызовет ошибку:
function foo(a = b) < var b = 5; console.log(a); >foo(); // Ошибка
Дополнительный параметр
Параметр с префиксом . называется дополнительным (или необязательным). Дополнительный параметр указывается в качестве последнего параметра. Дополнительный параметр – это массив, в который сохраняются лишние аргументы, когда количество переданных аргументов превышает количество параметров:
function foo(a, b, . args) < console.log(args); >foo(1, 2, 3, 4, 5); // 3, 4, 5
С этой темой смотрят:
- Объявление и вызов функции
- arguments и this
- Инструкция return
- Рекурсия
Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011 – 2023 © puzzleweb.ru | razumnikum.ru
Разница между аргументом и параметром
Многие программисты используют термины «параметр» и «аргумент» как синонимы, но оба они имеют разные значения. В этом посте будет обсуждаться разница между аргументом и параметром.
Параметры обычно называют аргументами, но они совершенно разные. Согласно с Wikipedia, “Параметр — это переменная особого типа, используемая в подпрограмме для ссылки на один из фрагментов данных, предоставленных в качестве входных данных для подпрограммы. Эти фрагменты данных являются значениями аргументов, с которыми будет вызываться/вызваться подпрограмма”.
Проще говоря, аргумент — это фактическое значение, переданное функции, тогда как параметр — это переменная внутри определения функции. Можно сказать, что параметр — это тип, который появляется в определениях функций, а аргумент — это экземпляр, который появляется в вызовах функций.
Например, рассмотрим следующее определение функции:
int add ( int x , int y ) < return x + y ;
The add() функция принимает два параметра, x а также y . Если функция вызывается как add(2, 3) , то 2, 3 — аргументы.
Стоит отметить, что переменные могут быть аргументами. Если функция вызывается, как показано ниже, то переменные a а также b оба являются аргументами add() функция, а не значения 2, 3.
Важные точки:
- Параметр также называется формальный параметр или же формальный аргумент, и аргумент часто называют фактические аргументы или же фактические параметры.
- Параметр является необязательным в некоторых языках программирования, а некоторые языки программирования позволяют указать аргумент по умолчанию в объявлении функции. Это означает, что при вызове функции вызывающая сторона может опустить этот аргумент.
- Параметр имеет имя, тип данных и механизм вызова (вызов по ссылке или вызов по значению). Напротив, аргумент — это выражение, которое не имеет имени, но может быть переменной, константой или литералом.
- Областью действия параметра является сама функция, и он служит локальной переменной внутри функции.
- Количество аргументов в вызове функции должно соответствовать общему количеству параметров в определении функции. Единственным исключением из этого правила являются функции со списками параметров переменной длины.
- Тип данных аргументов в вызове функции должен совпадать с типом данных параметров в определении функции.
- Если параметр передается по значению, его изменение внутри функции не меняет соответствующий аргумент в вызывающей программе. Однако, если он передается по ссылке, значения соответствующего аргумента могут быть изменены в вызывающем объекте.
Вот и вся разница между аргументом и параметром.
Использованная литература: Параметр — Википедия
Оценить этот пост
Средний рейтинг 4.84 /5. Подсчет голосов: 70
Голосов пока нет! Будьте первым, кто оценит этот пост.
Сожалеем, что этот пост не оказался для вас полезным!
Расскажите, как мы можем улучшить этот пост?