Учебники

Python 3 — Функции

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

Как вы уже знаете, Python предоставляет вам множество встроенных функций, таких как print () и т. Д., Но вы также можете создавать свои собственные функции. Эти функции называются пользовательскими функциями.

Определение функции

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

  • Функциональные блоки начинаются с ключевого слова def, за которым следуют имя функции и круглые скобки (()).

  • Любые входные параметры или аргументы должны быть помещены в эти круглые скобки. Вы также можете определить параметры внутри этих скобок.

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

  • Блок кода в каждой функции начинается с двоеточия (:) и имеет отступ.

  • Оператор return [выражение] выходит из функции, необязательно передавая выражение вызывающей стороне. Оператор return без аргументов аналогичен return None.

Функциональные блоки начинаются с ключевого слова def, за которым следуют имя функции и круглые скобки (()).

Любые входные параметры или аргументы должны быть помещены в эти круглые скобки. Вы также можете определить параметры внутри этих скобок.

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

Блок кода в каждой функции начинается с двоеточия (:) и имеет отступ.

Оператор return [выражение] выходит из функции, необязательно передавая выражение вызывающей стороне. Оператор return без аргументов аналогичен return None.

Синтаксис

def functionname( parameters ):
   "function_docstring"
   function_suite
   return [expression]

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

пример

Следующая функция принимает строку в качестве входного параметра и печатает ее на стандартном экране.

def printme( str ):
   "This prints a passed string into this function"
   print (str)
   return

Вызов функции

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

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

Live Demo

#!/usr/bin/python3

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print (str)
   return

# Now you can call printme function
printme("This is first call to the user defined function!")
printme("Again second call to the same function")

Когда приведенный выше код выполняется, он дает следующий результат —

This is first call to the user defined function!
Again second call to the same function

Передача по ссылке против значения

Все параметры (аргументы) в языке Python передаются по ссылке. Это означает, что если вы изменяете то, на что ссылается параметр в функции, это изменение также отражается в вызывающей функции. Например —

Live Demo

#!/usr/bin/python3

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   print ("Values inside the function before change: ", mylist)
   
   mylist[2]=50
   print ("Values inside the function after change: ", mylist)
   return

# Now you can call changeme function
mylist = [10,20,30]
changeme( mylist )
print ("Values outside the function: ", mylist)

Здесь мы поддерживаем ссылку на переданный объект и добавляем значения в один и тот же объект. Следовательно, это даст следующий результат:

Values inside the function before change:  [10, 20, 30]
Values inside the function after change:  [10, 20, 50]
Values outside the function:  [10, 20, 50]

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

Live Demo

#!/usr/bin/python3

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   mylist = [1,2,3,4] # This would assi new reference in mylist
   print ("Values inside the function: ", mylist)
   return

# Now you can call changeme function
mylist = [10,20,30]
changeme( mylist )
print ("Values outside the function: ", mylist)

Параметр mylist является локальным для функции changeme. Изменение mylist внутри функции не влияет на mylist. Функция ничего не выполняет, и, наконец, это приведет к следующему результату:

Values inside the function:  [1, 2, 3, 4]
Values outside the function:  [10, 20, 30]

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

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

  • Обязательные аргументы
  • Ключевые аргументы
  • Аргументы по умолчанию
  • Аргументы переменной длины

Обязательные аргументы

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

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

Live Demo

#!/usr/bin/python3

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print (str)
   return

# Now you can call printme function
printme()

Когда приведенный выше код выполняется, он дает следующий результат —

Traceback (most recent call last):
   File "test.py", line 11, in <module>
      printme();
TypeError: printme() takes exactly 1 argument (0 given)

Ключевое слово Аргументы

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

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

Live Demo

#!/usr/bin/python3

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print (str)
   return

# Now you can call printme function
printme( str = "My string")

Когда приведенный выше код выполняется, он дает следующий результат —

My string

Следующий пример дает более ясную картину. Обратите внимание, что порядок параметров не имеет значения.

Live Demo

#!/usr/bin/python3

# Function definition is here
def printinfo( name, age ):
   "This prints a passed info into this function"
   print ("Name: ", name)
   print ("Age ", age)
   return

# Now you can call printinfo function
printinfo( age = 50, name = "miki" )

Когда приведенный выше код выполняется, он дает следующий результат —

Name:  miki
Age  50

Аргументы по умолчанию

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

Live Demo

#!/usr/bin/python3

# Function definition is here
def printinfo( name, age = 35 ):
   "This prints a passed info into this function"
   print ("Name: ", name)
   print ("Age ", age)
   return

# Now you can call printinfo function
printinfo( age = 50, name = "miki" )
printinfo( name = "miki" )

Когда приведенный выше код выполняется, он дает следующий результат —

Name:  miki
Age  50
Name:  miki
Age  35

Аргументы переменной длины

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

Синтаксис функции с аргументами переменных, не являющихся ключевыми словами, приведен ниже —

def functionname([formal_args,] *var_args_tuple ):
   "function_docstring"
   function_suite
   return [expression]

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

Live Demo

#!/usr/bin/python3

# Function definition is here
def printinfo( arg1, *vartuple ):
   "This prints a variable passed arguments"
   print ("Output is: ")
   print (arg1)
   
   for var in vartuple:
      print (var)
   return

# Now you can call printinfo function
printinfo( 10 )
printinfo( 70, 60, 50 )

Когда приведенный выше код выполняется, он дает следующий результат —

Output is:
10
Output is:
70
60
50

Анонимные функции

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

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

  • Анонимная функция не может быть прямым вызовом print, потому что лямбда-выражение требует выражения.

  • Лямбда-функции имеют свое собственное локальное пространство имен и не могут получить доступ к переменным, отличным от переменных в их списке параметров и переменных в глобальном пространстве имен.

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

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

Анонимная функция не может быть прямым вызовом print, потому что лямбда-выражение требует выражения.

Лямбда-функции имеют свое собственное локальное пространство имен и не могут получить доступ к переменным, отличным от переменных в их списке параметров и переменных в глобальном пространстве имен.

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

Синтаксис

Синтаксис лямбда- функций содержит только один оператор, который выглядит следующим образом:

lambda [arg1 [,arg2,.....argn]]:expression

Ниже приведен пример, показывающий, как работает лямбда- форма функции:

Live Demo

#!/usr/bin/python3

# Function definition is here
sum = lambda arg1, arg2: arg1 + arg2

# Now you can call sum as a function
print ("Value of total : ", sum( 10, 20 ))
print ("Value of total : ", sum( 20, 20 ))

Когда приведенный выше код выполняется, он дает следующий результат —

Value of total :  30
Value of total :  40

Заявление о возврате

Оператор return [выражение] выходит из функции, необязательно передавая выражение вызывающей стороне. Оператор return без аргументов аналогичен return None.

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

Live Demo

#!/usr/bin/python3

# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2
   print ("Inside the function : ", total)
   return total

# Now you can call sum function
total = sum( 10, 20 )
print ("Outside the function : ", total )

Когда приведенный выше код выполняется, он дает следующий результат —

Inside the function :  30
Outside the function :  30

Область Переменных

Все переменные в программе могут быть недоступны во всех местах этой программы. Это зависит от того, где вы объявили переменную.

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

  • Глобальные переменные
  • Локальные переменные

Глобальные и локальные переменные

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

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

Live Demo

#!/usr/bin/python3

total = 0   # This is global variable.
# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2; # Here total is local variable.
   print ("Inside the function local total : ", total)
   return total

# Now you can call sum function
sum( 10, 20 )
print ("Outside the function global total : ", total )

Когда приведенный выше код выполняется, он дает следующий результат —