Функции
Определение функций, параметры, локальные переменные, return и docstring.
Все уроки · Уроки Python: учимся с нуля
Определение функции
Функция — это именованный фрагмент кода: пишете один раз, вызываете много раз. Она объявляется через def, параметры идут в скобках, результат возвращается через return. Без return функция вернёт None.
def area(width, height):
return width * height
print(area(4, 5)) # 20
room = area(3.5, 2)
print(room) # 7.0Строка в первой строке функции — это docstring, она видна через help(area). Хорошая функция делает одно дело, и её имя говорит какое.
def is_adult(age):
"""Return True if age is 18 or more."""
return age >= 18Параметры
Параметру можно задать значение по умолчанию, тогда при вызове его можно не указывать. Аргументы передают по позиции или по имени.
def greet(name, greeting="Hello", mark="!"):
return f"{greeting}, {name}{mark}"
print(greet("Leyla"))
print(greet("Leyla", mark="?"))
print(greet(greeting="Salam", name="Kamran"))Для неизвестного числа аргументов есть *args (позиционные) и **kwargs (именованные). Осторожно: не используйте пустой список [] как значение по умолчанию — он общий для всех вызовов. Берите None и создавайте список внутри функции.
def total(*numbers):
return sum(numbers)
def add_tag(tag, bucket=None):
if bucket is None:
bucket = []
bucket.append(tag)
return bucket
print(total(1, 2, 3, 4)) # 10
print(add_tag("a"), add_tag("b")) # ['a'] ['b']Область видимости
Переменная, созданная внутри функции, локальна и снаружи не видна. Глобальную переменную можно читать внутри, а чтобы менять — нужно слово global. На практике лучше избегать глобальных переменных и передавать нужное через параметры.
rate = 0.18
def with_tax(price):
tax = price * rate # reads the global
return price + tax
print(with_tax(100))
# print(tax) -> NameError: tax exists only inside the function