Автор оригинала: Ebenezer Don.
Функции Python обычно | ссылаются на имя, и в этом случае набор операторов может быть повторно использован или выполнен столько раз, сколько необходимо в программе. Это способ запускать одни и те же операторы из нескольких мест в программе без необходимости переписывать их каждый раз, когда они необходимы.
В Python/| функции являются гражданами первого класса . Это означает, что вы можете передавать функции, как и любой другой объект; вы можете назначать их переменным, хранить их в списках и кортежах или определять их внутри других функций. Python уже поставляется с предопределенными функциями, такими как print() . Эти
предопределенные функции известны как встроенные функции, и Python позволяет создавать ваши функции, называемые
определяемыми пользователем функциями.
В этой статье рассматриваются следующие точки соприкосновения :
- Как определить функции в Python
- Параметры и аргументы функции
- Возвращаемые значения
- Как вызывать функции Python
- Лямбда-функции Python
- Область действия переменной
Если вы не настроили Python локально и хотите запустить примеры, используемые в этой статье, вы можете использовать онлайн-интерпретатор, например On line Интерпретатор GDB Python .
Как определить функции в Python
Способ определения функции в Python заключается в использовании ключевого слова def
. Давайте напишем функцию, которая принимает два числа и возвращает их сумму в качестве нового значения:
def sum(value1, value2): """This sums two values""" sum_of_values = value1 + value2 return sum_of_values
Из нашей вышеприведенной функции:
- Имя функции | указывается сразу после ключевого слова def
.
В круглой скобке сразу после имени - функции содержатся параметры функции
.
Блок кода - с отступом в следующей строке (после двоеточия) – это тело функции
.
Первый оператор в теле - функции является строкой документации ( docstring
) функции и является необязательным.
Оператор - return
используется для завершения выполнения функции при возврате указанного значения.
Параметры функции и вызов функции
Функция параметры
– это имена, используемые для представления реальных значений, которые предоставляются при вызове функции. Давайте определим вызов функции
как запрос на выполнение нашей функции. Чтобы вызвать нашу функцию, нам нужно только написать ее имя, за которым следует скобка. В следующем блоке мы назначим вызов функции переменной. Это означает, что значение нашей переменной будет равно возвращаемому значению нашей функции:
result = sum() print(result)
Наш приведенный выше код вернется:
TypeError: sum() missing 2 required positional arguments: 'value1' and 'value2'
Помните, что в нашем определении функции мы использовали два параметра value1
и value2
для представления реальных значений, подлежащих суммированию. Чтобы указать значения, которые мы хотим суммировать, мы поместим их прямо в скобки
в нашем вызове функции. Значения, которые мы предоставляем во время вызова функции, называются аргументами функции
.
result = sum(5, 6) print(result)
11
Наша функция может возвращать различные выходные данные на основе предопределенных условий в своем определении. Например, если мы хотим работать только с небольшими числами, мы можем выбрать другой вывод, если оба числа при суммировании будут больше, чем 100
:
#editor def sum(value1, value2): sum_of_values = value1 + value2 if (sum_of_values > 100): return "Too big!" return sum_of_values result = sum(90, 32) print(result)
#console Too big!
Во время определения функции имена, представляющие значения, которые мы намерены предоставить функции, называются параметры функции
.
Во время вызова функции фактические значения, предоставленные функции, называются аргументами функции
.
Оператор возврата
- Оператор return используется для завершения выполнения функции при возврате указанного значения.
Без использования ключевого слова return
для указания нашей функции, что возвращать, ее значением по умолчанию будет None
. Давайте проверим это, создав функцию без оператора return
, а затем вызвав ее:
#editor def sum(value1, value2): sum_of_values = value1 + value2 print(sum(5, 9))
#console None
Функция также возвращает None
по умолчанию, когда ключевое слово return
указано без значения. Это делает его пустым возвратом
:
#editor def sum(value1, value2): sum_of_values = value1 + value2 return print(sum(5, 9))
#console None
Позиционные аргументы
По умолчанию аргументами функций в Python являются позиционные аргументы
. Это означает, что значения должны быть упорядочены так же, как они были предоставлены во время определения функции:
#editor def sum(value1, value2): print("This is value2: " + str(value2)) print("This is value1: " + str(value1)) print(sum(90, 32))
#console This is value2: 32 This is value1: 90 None
Аргументы ключевых слов
Ключевое слово
аргументы являются альтернативой позиционным
аргументам. Когда мы используем аргументы ключевых слов в вызове функции, Python определяет, какой параметр он представляет через имя параметра
, используемое в определении функции. Таким образом, мы можем вывести ваши аргументы из строя:
#editor def sum(value1, value2): print("This is value2: " + str(value2)) print("This is value1: " + str(value1)) print(sum(value2 = 32, value1=90))
#console This is value2: 32 This is value1: 90 None
Необходимые аргументы
Как мы видели ранее, аргументы требуются по умолчанию. Это означает, что Python выдаст ошибку, если количество параметров, указанных в определении функции
, не совпадает с количеством аргументов, предоставленных в вызове функции
:
#editor def sum(value1, value2): sum_of_values = value1 + value2 return sum_of_values result = sum(90) print(result)
# console TypeError: sum() missing 1 required positional argument: 'value2'
Аргументы по умолчанию
Чтобы сделать аргумент | необязательным в вызове функции, мы должны присвоить ему значение по умолчанию в нашем определении функции. Это значение по умолчанию будет использоваться, если во время вызова функции
не будет указан аргумент для этого параметра
:
#editor def sum(value1, value2=10): sum_of_values = value1 + value2 return sum_of_valueshis result = sum(90) print(result)
#console 100
Произвольные аргументы
Когда точное количество аргументов
, которые будут предоставлены во время нашего вызова функции , неизвестно, мы можем использовать произвольные аргументы
. Чтобы использовать произвольные аргументы, мы добавляем звездочку ( *
) перед именем параметра в нашем определении функции. Это сделает параметр кортежем
, и наша функция получит кортеж аргументов для каждого аргумента, предоставленного вместо параметра во время нашего вызова функции
:
#editor def sum_all(*values): print("A tuple of all the arguments:", values) sum_of_all_values = sum(values) return sum_of_all_values result = sum_all(4, 7, 13, 45) print("The sum of all supplied arguments:", result)
#console A tuple of all the arguments: (4, 7, 13, 45) The sum of all supplied arguments: 69
Лямбда-функции Python
Другим способом определения функций в Python является использование ключевого слова lambda
. Этот метод определения функций в основном используется для создания анонимных функций
; функций, у которых нет имени, отсюда и слово anonymous
. По синтаксису лямбда-функции
могут иметь несколько аргументов, но ограничены только одним выражением
. Давайте переопределим нашу функцию sum()
с помощью ключевого слова lambda
:
lambda value1, value2: value1 + value2
Несколько вещей, которые следует отметить:
- В нашем определении функции нет оператора
return
. Выражение после столбца (:
) по умолчанию является возвращаемым значением. - Нет никакого способа повторно использовать нашу функцию, так как на нее нельзя ссылаться по имени.
Вы найдете лямбда-функции полезными, когда вам нужно передать функцию в качестве аргумента в функции более высокого порядка
. Функции более высокого порядка-это функции, которые работают с другими функциями, либо принимая функцию в качестве аргумента, либо возвращая функцию. Примером функции более высокого порядка является функция map ()
. В Python функция map принимает в качестве аргументов функцию и список. Это один из случаев, когда нам не нужно, чтобы наша функция была повторно использована, следовательно, необходима функция lambda
. Давайте используем функции map()
и lambda
для возврата половины каждого числа в списке:
#editor list_of_numbers = [19, 12, 45, 72, 10] halved_list = list(map(lambda value: value/2 , list_of_numbers)) print(halved_list)
#console halved list: [9.5, 6.0, 22.5, 36.0, 5.0]
Чтобы иметь возможность повторно использовать лямбда-функцию, мы можем назначить ее переменной:
#editor sum = lambda value1, value2: value1 + value2 result = sum(7, 9) print(result)
#console 16
Область действия переменной
Переменные| определенные внутри тела функции
, имеют локальную область . Это означает, что доступ к ним возможен только внутри определения функции:
#editor def example_function(): word = "inevitable" return word print(word)
#console NameError: name 'word' is not defined
Обратите внимание, что наш оператор print()
находится за пределами нашего определения функции . Поскольку это выходит за рамки нашего тела функции
, переменная word
недоступна для операторов или выражений, которые находятся вне нашего определения функции.
Чтобы сделать нашу переменную word
доступной для каждого оператора и выражения в нашем коде, мы должны объявить ее вне определения функции. Таким образом, он глобально ограничен :
#editor word = "inevitable" def example_function(): return word print(word)
#console inevitable
Важные вещи, которые следует отметить
При определении функции с помощью ключевого слова def после имени функции и двоеточия тело функции должно быть отступом от следующей строки.
Обратите внимание, как мы планировали наше тело функции в def
определениях функций. Это способ сказать Python, что все, что мы собираемся написать дальше, относится к нашему определению функции. Если тело вашей функции не имеет отступа, Python будет считать, что вы начали другой оператор:
#editor def sum(value1, value2): sum_of_values = value1 + value2 return sum_of_values result = sum(3, 7) print(result)
#console IndentationError: expected an indented block
Имя функции должно быть описательным, прямым и вневременным.
Имя функции должно быть описательным, прямым и вневременным.
Обратите внимание, как мы назвали нашу первую функцию sum
. Это потому, что его задача-суммировать значения. Это поможет любому узнать, что делает наша функция, просто взглянув на ее название.
Именование функций является очень важной частью определения функций, и при правильном выполнении ваш код станет более читаемым, удобным для обслуживания и в дальнейшем приведет к повышению производительности.
При именовании своих функций важно не использовать сленги, которые понимают лишь немногие люди, или тенденции, с которыми люди могут иметь дело только в данный момент времени. Пусть ваши имена функций будут достаточно описательными, прямыми и вневременными.
Функция должна иметь только одну
ответственность .
Функция должна иметь только одну |||| ответственность || .
Когда вы определяете свою функцию, рекомендуется возложить на нее только одну ответственность и заставить ее делать то, что предполагает ее название. Это означает, что из наших примеров выбор суммирования двух чисел при делении каждого числа в другом кортеже на два в одной и той же функции не был бы хорошей идеей. Как и мы, лучше разделить эти два действия на отдельные функции.
Сделав это, вы не только улучшите читаемость кода , но и облегчите его тестирование и отладку.
- функция – это набор операторов, предназначенных для выполнения определенной задачи.
- Во время определения функции имена, представляющие значения, которые мы намерены предоставить функции, называются
параметры
. - Во время вызова
функции
фактические значения , предоставленные функции, вызываютсяаргументами
. - Оператор
return
используется для завершения выполнения функции при возврате указанного значения. - Переменные| определенные внутри тела
функции
, имеют локальную область . Это означает, что доступ к ним возможен только внутри определения функции. - Анонимная функция – это функция, у которой нет имени. Чтобы определить анонимную функцию, мы используем ключевое слово
- lambda
, и чтобы иметь возможность повторно использовать анонимную функцию, она должна быть назначена переменной.
Имена функций должны быть - описательными , прямыми к точке и вневременными . Это хорошая практика, чтобы дать вашей функции только
- одну ответственность .
Спасибо за чтение! Если у вас все еще есть проблемы с пониманием концепции функций, не беспокойтесь; вот ссылка на Самое простое объяснение функций, которое Вы когда-либо читали .
Я еженедельно делюсь потрясающим контентом по разработке программного обеспечения и веб-разработке на своем канале YouTube. Пожалуйста, проверьте это и подпишитесь здесь .
Нашли это полезным? Пожалуйста, оставьте смайлик 💓 , комментарий 📝 и поделитесь! 🎷
Вот мой недавний подкаст о том, как преуспеть в первый год работы инженером-программистом. Я поделился несколькими своими впечатлениями в области технологий и вещами, которые я хотел бы, чтобы кто-то рассказал мне в течение моего первого года работы инженером-программистом: Как преуспеть в свой первый год работы инженером-программистом