Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия | |||
develop:pyton:date [2022/02/19 16:54] admin [Модуль calendar] |
develop:pyton:date [2022/02/20 10:32] (текущий) admin |
||
---|---|---|---|
Строка 175: | Строка 175: | ||
===== Пользовательские функции ===== | ===== Пользовательские функции ===== | ||
+ | Оператор **pass** можно использовать как загрузку для пустой функции\\ | ||
==== Определение и вызов ==== | ==== Определение и вызов ==== | ||
- | + | Функция сама является объектом, | |
- | + | Поддерживает стандартные атрибуты, | |
- | <code python> | + | |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
==== Расположение определения ==== | ==== Расположение определения ==== | ||
- | + | Определение должно быть перед вызовом, | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
==== Необязательные параметры ==== | ==== Необязательные параметры ==== | ||
+ | Необязательность имеется ввиду значение по умолчанию, | ||
+ | Все **аргументы передаются по ссылке** поэтому изменяемые типы данных **могут изменить исходную переменную**, | ||
- | + | :!: Что касается предопределенных переменных - они **похоже статические** и **могут накапливать значение** при повторных вызовах, | |
- | <code python> | + | |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
==== Переменное число параметров ==== | ==== Переменное число параметров ==== | ||
+ | Если перед переменной указать звездочку, | ||
+ | Если две звездочки, | ||
+ | Если указать первое затем второе, | ||
+ | Если функция не должна принимать переменного кол-ва параметров, | ||
<code python> | <code python> | ||
- | </ | + | # Произвольное кол-во параметров |
+ | def func(*t): | ||
+ | for i in t: | ||
+ | ... | ||
- | <code python> | + | # Ф-я примет любые параметры |
+ | def func(*x, **y): | ||
+ | ... | ||
+ | |||
+ | # Аргументы только по именам | ||
+ | def func(x=1, y=2, *, a): | ||
+ | ... | ||
</ | </ | ||
==== Анонимные функции ==== | ==== Анонимные функции ==== | ||
- | + | т.н. **лямбда функция**, | |
<code python> | <code python> | ||
- | </ | + | f1= lambda: 10 + 20 |
+ | f2= lambda x, y: x + y # аргументы | ||
- | <code python> | + | print(f1()) |
+ | print(f2(10, | ||
</ | </ | ||
==== Функции-генераторы ==== | ==== Функции-генераторы ==== | ||
+ | При последовательных вызовах, | ||
+ | Использование этого оператора собсна и делает обычную функцию функцией-генератором\\ | ||
+ | Удобно при обработке действительно большой последовательности, | ||
+ | Эти функции поддерживают метод **__next()__**, | ||
+ | Можно вкладывать генераторы\\ | ||
<code python> | <code python> | ||
- | </ | + | def func(x, y): |
+ | for i in range(1, x+ 1): | ||
+ | yield i ** y | ||
- | <code python> | + | i= func(3, 3) |
+ | print(i.__next__()) # Выведет: | ||
+ | print(i.__next__()) # Выведет: | ||
+ | print(i.__next__()) # Выведет: | ||
+ | print(i.__next__()) # Исключение StopIteration | ||
</ | </ | ||
==== Декораторы функции ==== | ==== Декораторы функции ==== | ||
+ | Обычные функции, | ||
+ | В аргументе декора передается ссылка на целевую функцию, | ||
<code python> | <code python> | ||
- | </ | + | def deco(f): |
+ | ... | ||
+ | return f # ссылка на целевую ф-ю | ||
- | <code python> | + | @deco |
+ | def func(x): | ||
+ | ... | ||
+ | |||
+ | print (func(10)) | ||
</ | </ | ||
==== Рекурсия ==== | ==== Рекурсия ==== | ||
- | + | Все как обычно, | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
==== Глобальные и локальные переменные ==== | ==== Глобальные и локальные переменные ==== | ||
- | + | Глобальные переменные те что определены за пределами любой функции, | |
- | + | Для обращение к ней из функции, | |
- | <code python> | + | |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
==== Вложенные функции ==== | ==== Вложенные функции ==== | ||
- | + | Внутри вложенной функции **доступна область видимости** родительской функции\\ | |
- | + | Доступны но изменить во вложенной так просто нельзя видимо, | |
- | <code python> | + | Не забываем что переменные передаются ссылками\\ |
- | </ | + | |
- | + | ||
- | <code python> | + | |
- | </ | + | |
==== Аннотации функций ==== | ==== Аннотации функций ==== | ||
- | + | Документирование аргументов функций\\ | |
<code python> | <code python> | ||
+ | # Описание после двоеточия, | ||
+ | def func(a: " | ||
</ | </ | ||
- | |||
- | <code python> | ||
- | </ | ||
- | |||
- | <code python> | ||
- | </ | ||
- | |||
- | |||