Функции
Введение | |
Пример | |
type hints | |
Параметры и аргументы | |
Аргументы по умолчанию | |
Встроенные функции | |
Похожие статьи |
Пример использования
Создайте файл с раширением .py
Например functions_demo.py
Рассмотрим простейшую функцию, которая ничего не делает.
Чтобы её объявить используйте слово def затем придумайте название - например lazy
поставьте круглые скобки () и двоеточие
Общий синтаксис следующий
def имя_функции(): какой-то код
В нашем случае получается
def lazy(): pass
pass означает просто продолжать код ничего не предпринимая. Он применяется далеко не во всех функциях.
Наша функция создана, иначе говоря объявлена. Это значит, что она существует где-то в коде и может что-то сделать.
Но не делает. Чтобы функция что-то делала её нужно вызвать. В нашем случае достаточно написать её имя и круглые скобки.
lazy()
python functions_demo.py
Если никаких ошибок не допущено вывод будет пустым
Объявим и вызовем функцию, которая пишет Hello World!
def hello(): print("Hello World!")
hello()
python functions_demo.py
Hello World!
Функцию не обязательно писать в одну строку. Лучше после двоеточия перейти на новую строку и сделать отступ из четырёх пробелов.
def hello():
print("Hello World!")
hello()
python functions_demo.py
Hello World!
Напишем функцию, которая складывает два числа.
def sum(first, second):
print first + second
sum(3,4)
python functions_demo.py
7
type hints
В соответствии с PEP 484 рекомендуется указывать ожидаемые типы данных как для параметров, так и для возвращаемого значения
def sum(first: float, second: float) -> float: print(first + second) sum(3.0, 4.6)
python functions_demo.py
7.6
Никаких ограничений эти подсказки не накладывают. Можно спокойно выполнить
sum("a", "b")
python functions_demo.py
И получить
ab
Подсказки нужны скорее для сторонней проверки, каким-либо инструментом.
Параметры и аргументы
Параметры и аргументы это почти одно и то же, но термин параметры применяют во время
объявления функции а аргументы в момент вызова.
Проще всего понять на примере
def add(a, b): return a+b add(2, 3)
a и b это параметры, а 2 и 3 это аргументы
Аргументы по умолчанию
# Arguments with default values must come # after those without default values. def banner(message, border="-"): line = border * len(message) print(line) print(message) print(line) banner("www.HeiHei.ru") # will use default "-" banner("www.TopBicycle.ru", "*") banner("www.KickBrains.ru", border="|")
python default_argumet_values.py
------------- www.HeiHei.ru ------------- ***************** www.TopBicycle.ru ***************** ||||||||||||||||| www.KickBrains.ru |||||||||||||||||
Значения по умолчанию
В качестве значений по умолчанию лучше использовать неизменяемые (immutable) объекты.
Если и использовать изменяемые объекты, то нужно понимать, что они получают значения
один раз - когда интерпретатор проходит объявление функции (def)
Пример
import time print("time.ctime()", time.ctime()) def show_default(arg=time.ctime()): print(arg) show_default() time.sleep(2) print("time.ctime()", time.ctime()) show_default()
time.ctime() Wed Jun 8 11:16:04 2022 Wed Jun 8 11:16:04 2022 time.ctime() Wed Jun 8 11:16:06 2022 Wed Jun 8 11:16:04 2022
Как видно из вывода в терминал - время уже ушло вперёд - 11:16:06 а функция как возвращала значение по умолчанию созданное в 11:16:04 так и продолжает это делать.
Рассмотрим ещё один пример. Теперь в качестве изменяемого объекта возьмём список
def add_spam(menu=[]): menu.append("spam") return menu breakfast = ['bacon', 'eggs'] print(add_spam(breakfast)) lunch = ['borsh'] print(add_spam(lunch)) print(add_spam()) print(add_spam()) print(add_spam())
['bacon', 'eggs', 'spam'] ['borsh', 'spam'] ['spam'] ['spam', 'spam'] ['spam', 'spam', 'spam']
В первых двух случаях (завтрак и обед) функция работает как задумано. Но, если вызвать её без аргументов создасться пустой список и он не будет пересоздан - в него просто добавляются новые и новые элементы.
Решить эту проблему можно сделав аргумент по умолчанию неизменяемым
def add_spam(menu=None): if menu is None: menu = [] menu.append("spam") return menu breakfast = ['bacon', 'eggs'] print(add_spam(breakfast)) lunch = ['borsh'] print(add_spam(lunch)) print(add_spam()) print(add_spam()) print(add_spam())
['bacon', 'eggs', 'spam'] ['borsh', 'spam'] ['spam'] ['spam'] ['spam']
Встроенные функции и теория
Лямбда функции |
all() |
map() |
*args **kwargs | |
Лямбда функции | |
all() | |
map() | |
Функции первого класса | |
Замыкания | |
Декораторы | |
Python | |
if, elif, else | |
Циклы | |
Методы | |
enum |