Python - Функции
Функция - это блок организованного многократно используемого кода, который используется для выполнения одного связанного действия. Функции обеспечивают лучшую модульность вашего приложения и высокую степень повторного использования кода.
Как вы уже знаете, Python предоставляет множество встроенных функций, таких как print () и т. Д., Но вы также можете создавать свои собственные функции. Эти функции называются пользовательскими функциями.
Определение функции
Вы можете определять функции для обеспечения необходимой функциональности. Вот простые правила для определения функции в Python.
Функциональные блоки начинаются с ключевого слова 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 () -
#!/usr/bin/python
# 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("I'm first call to user defined function!")
printme("Again second call to the same function")
Когда приведенный выше код выполняется, он дает следующий результат:
I'm first call to user defined function!
Again second call to the same function
Передавать по ссылке против значения
Все параметры (аргументы) на языке Python передаются по ссылке. Это означает, что если вы изменяете то, на что ссылается параметр в функции, это изменение также отражается в вызывающей функции. Например -
#!/usr/bin/python
# Function definition is here
def changeme( mylist ):
"This changes a passed list into this function"
mylist.append([1,2,3,4]);
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
Здесь мы поддерживаем ссылку на переданный объект и добавляем значения в один и тот же объект. Итак, это даст следующий результат -
Values inside the function: [10, 20, 30, [1, 2, 3, 4]]
Values outside the function: [10, 20, 30, [1, 2, 3, 4]]
Есть еще один пример, когда аргумент передается по ссылке, а ссылка перезаписывается внутри вызываемой функции.
#!/usr/bin/python
# Function definition is here
def changeme( mylist ):
"This changes a passed list into this function"
mylist = [1,2,3,4]; # This would assig 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 () , вам обязательно нужно передать один аргумент, иначе это даст следующую синтаксическую ошибку:
#!/usr/bin/python
# 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 () следующими способами:
#!/usr/bin/python
# 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
Следующий пример дает более четкую картину. Обратите внимание, что порядок параметров не имеет значения.
#!/usr/bin/python
# 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
Аргументы по умолчанию
Аргумент по умолчанию - это аргумент, который принимает значение по умолчанию, если значение не указано в вызове функции для этого аргумента. Следующий пример дает представление об аргументах по умолчанию, он печатает возраст по умолчанию, если он не передан -
#!/usr/bin/python
# 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]
Звездочка (*) помещается перед именем переменной, которая содержит значения всех аргументов переменных, не являющихся ключевыми словами. Этот кортеж остается пустым, если во время вызова функции не указаны дополнительные аргументы. Ниже приводится простой пример -
#!/usr/bin/python
# 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 ++, цель которых состоит в передаче распределения стека функций во время вызова по соображениям производительности.
Синтаксис
Синтаксис лямбда- функций содержит только один оператор, который выглядит следующим образом:
lambda [arg1 [,arg2,.....argn]]:expression
Ниже приведен пример, показывающий, как работает лямбда- форма функции.
#!/usr/bin/python
# 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.
Все приведенные выше примеры не возвращают никакого значения. Вы можете вернуть значение из функции следующим образом:
#!/usr/bin/python
# 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 есть две основные области переменных:
- Глобальные переменные
- Локальные переменные
Глобальные и локальные переменные
Переменные, которые определены внутри тела функции, имеют локальную область видимости, а те, которые определены снаружи, имеют глобальную область.
Это означает, что к локальным переменным можно получить доступ только внутри функции, в которой они объявлены, тогда как к глобальным переменным можно получить доступ по всему телу программы для всех функций. Когда вы вызываете функцию, переменные, объявленные внутри нее, попадают в область видимости. Ниже приводится простой пример -
#!/usr/bin/python
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
Когда приведенный выше код выполняется, он дает следующий результат:
Inside the function local total : 30
Outside the function global total : 0