function¶
Атрибуты встроенных функции¶
__doc__ - Строка документирования
__name__ - Имя функции/метода
__self__ - Ссылка на экземпляр, ассоциированный с данным методом (для связанных методов)
Атрибуты функции¶
__closure__ - Кортеж, содержащий данные, связанные с вложенными областями видимости
__code__ - Скомпилированный байт-код функции
__defaults__ - Кортеж с аргументами по умолчанию
__dict__ - Словарь, содержащий атрибуты функции
__doc__ - Строка документирования
__globals__ - Словарь, определяющий глобальное пространство имен
__name__ - Имя функции
lambda функции¶
f = lambda x: x*2
for i in (1,2):
print(f(i))
# 2
# 4
Пользовательски функции¶
def func(text):
"""
документация функции
докстринг
"""
print(text)
func('http://ilnurgi.ru')
# http://ilnurgi.ru
def func(first_arg, second_arg):
"""
функция с позиционными аргументами
func(1, 2)
"""
def func(first_arg=None, second_arg=None):
"""
функция с аргументами по умолчанию
func()
func(second_arg=2)
"""
def func(*args, **kwargs):
"""
func(1, b=2) ->
(1, )
{'b': 2}
"""
print(args)
print(kwargs)
def func(a, b, /, c, d *, e, f)
"""
a, b - могут быть присвоены только в порядке перечисления значений
e, f - только присвоение через указание ключей
c, d - любым указанным способом
/ - отделяет аргументы,
значения которым могут быть присвоены только на основе порядка перечисления значений
во время вызова функции,
от аргументов,
допускающих присвоение в произвольном порядке
* - отедляет переменные,
для которых применимо только присвоение.
"""
func(10, 20, 30, 40, e=50, f=60)
func(10, 20, c=30, d=40, e=50, f=60)
Декораторы¶
Это функция, в качестве аргумента принимает функцию или класс и возвращает другую функцию, которая будет выполняться интерпретатором при вызове декорируемой функции.
def prepare(func):
"""
декоратор
"""
def wrapp(*args, **kwargs):
print(1)
result = func(*args, **kwargs)
print(3)
return result
return wrapp
@prepare
def func():
"""
декорируемая функция
"""
print(2)
func()
# 1
# 2
# 3
def prepare_with_parameters(params):
print(0)
def decorator(func):
def wrapp():
print(1)
result = func()
print(3)
return result
return wrapp
return decorator
@prepare_with_parameters(0)
def func():
print(2)
func()
# 0
# 1
# 2
# 3
Генераторы¶
С помощью инструкции yield, функция может генерировать целые последовательности результатов, тогда такие функции называют генераторами
def countdown(n):
print u'Обратный отсчет!'
while n > 0:
yield n
n -= 1
c = countdown(3)
c.next()
# Обратный отсчет
# 3
c.next()
# 2
c.next()
# 1
-
gen.
gi_code
¶ Объект с программным кодом функции-генератора
-
gen.
gi_frame
¶ Кадр стека функции-генератора
-
gen.
gi_running
¶ Целое число, указывающее – выполняется ли функция-генератор в настоящий момент
-
gen.
next
()¶ Выполняет функцию-генератор, пока не будет встречена следующая инструкция yield, и возвращает полученное значение
(в Python 3 этот метод вызывает метод __next__())
-
gen.
send
(value)¶ Передает значение value генератору.
Это значение возвращается выражением yield в функции-генераторе.
После этого функция-генератор продолжит выполнение, пока не будет встречена следующая инструкция yield.
Метод send() возвращает значение, полученное от этой инструкции yield
-
gen.
close
()¶ Закрывает генератор, возбуждая исключение GeneratorExit в функции-генераторе.
Этот метод вызывается автоматически, когда объект генератора уничтожается сборщиком мусора
-
gen.
throw
(exc[, exc_value[, exc_tb]])¶ Возбуждает исключение в функции-генераторе в точке вызова инструкции yield.
exc - тип исключения
exc_value - значение исключения
exc_tb - необязательный объект с трассировочной информацией.
Если исключение перехвачено и обработано, вернет значение, переданное следующей инструкции yield
Сопрограммы¶
Функция обрабатывающая последовательность входных параметров.
def print_matches(matchtext):
print 'Поиск подстроки', matchtext
while True:
# Получение текстовой строки
line = (yield)
if matchtext in line:
print line
matcher = print_matches('python')
# Перемещение до первой инструкции (yield)
matcher.next()
# Поиск подстроки python
matcher.send("Hello World")
matcher.send("python is cool")
# python is cool
matcher.send("yow!")
# Завершение работы с объектом matcher
matcher.close()
Аннтоации в функциях:¶
Warning
Добавлено в 3 ветке
def func(a: 'Параметр', b: 10 + 5 = 3) -> None:
pass
Функция возвращает None, для параметров a и b заданы описания и для b задано значение по умолчанию.
После создания функции все выражения будут выполнены и результаты сохранятся в виде словаря в атрибуте __annotations__ объекта функции.
Замыкания¶
def sum_factory(first):
"""
функция создает сумматор
"""
def sum(second):
"""
переменная first замыкается в этой функции
"""
return first + second
return sum
sum_2 = sum_factory(2)
sum_2(1)
# 3
sum_2(10)
# 12