Программирование

Функции

Определение функций, параметры, локальные переменные, 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

Автор: Nibras Code