Функции¶
Функции – это многократно используемые фрагменты программы. Они позволяют дать
имя определенному блоку команд для того, чтобы выполнять этот блок по указанному
имени в любом месте программы и сколь угодно много раз. Это называется вызовом
функции. Мы уже использовали встроенные функции: print, input, len,
range;
Пример:
def say_hello():
print('Hello')
say_hello() # вызов функции
say_hello() # ещё один вызов функции
Параметры функций¶
Функции могут принимать параметры, т.е. некоторые значения, передаваемые функции для того, чтобы она что-либо сделала с ними.
Параметры указываются в скобках при объявлении функции и разделяются запятыми. Аналогично мы передаём значения, когда вызываем функцию. Обратите внимание на терминологию: имена, указанные в объявлении функции, называются параметрами, тогда как значения, которые вы передаёте в функцию при её вызове, – аргументами.
Пример:
def print_max(a, b):
if a > b:
print(a, 'максимально')
elif a == b:
print(a, 'равно', b)
else:
print(b, 'максимально')
print_max(3, 4) # прямая передача значений
x = 5
y = 7
print_max(x, y) # передача переменных в качестве аргументов
Локальные переменные¶
При объявлении переменных внутри определения функции, они никоим образом не связаны с другими переменными с таким же именем за пределами функции – т.е. имена переменных являются локальными в функции. Это называется областью видимости переменной. Область видимости всех переменных ограничена блоком, в котором они объявлены, начиная с точки объявления имени.
Пример:
x = 50
def func(x):
print('x равен', x)
x = 2
print('Замена локального x на', x)
func(x)
print('x по-прежнему', x)
Значения аргументов по умолчанию¶
Часть параметров функций могут быть необязательными, и для них будут использоваться некоторые заданные значения по умолчанию, если пользователь не укажет собственных. Этого можно достичь с помощью значений аргументов по умолчанию. Их можно указать, добавив к имени параметра в определении функции оператор присваивания (=) с последующим значением.
Обратите внимание, что значение по умолчанию должно быть неизменным.
Пример:
def say(message, times=1):
print(message * times)
say('Hello')
say('World', 5)
Ключевые аргументы¶
Если имеется некоторая функция с большим числом параметров, и при её вызове требуется указать только некоторые из них, значения этих параметров могут задаваться по их имени – это называется ключевые параметры. В этом случае для передачи аргументов функции используется имя (ключ) вместо позиции (как было до сих пор).
Пример:
def func(a, b=5, c=10):
print('a равно', a, ', b равно', b, ', а c равно', c)
func(3, 7)
func(25, c=24)
func(c=50, a=100)
Переменное число параметров¶
Иногда бывает нужно определить функцию, способную принимать любое число параметров:
def mysum(*numbers):
s = 0
for n in numbers:
s += n
print(f'sum = {s}')
mysum(1)
mysum(1, 2, 3)
Оператор return¶
Оператор return используется для возврата из функции, т.е. для прекращения
её работы и выхода из неё. При этом можно также вернуть некоторое значение из
функции:
def maximum(x, y):
if x > y:
return x
elif x == y:
return 'Числа равны.'
else:
return y
print(maximum(2, 3))
Из функции можно вернуть только одно значение. Если все-таки необходимо вернуть несколько значений, то для этого можно использовать кортеж:
def div_mod(a, b):
return a // b, a % b
r1 = div_mod(11, 2) # r1 - кортеж (5, 1)
d, m = div_mod(11, 2) # деструктурирование кортежа
Задачи¶
В задачах этого раздела вам даны заготовки для самопроверки. Этот код нужно скопировать и разместить после определения своей функции. Так, если вам дан код:
assert add(40, 2) == 42
assert add(0, -1) == -1
то ваш файл с исходным кодом должен выглядеть так:
def add(a, b):
return a + b
assert add(40, 2) == 42
assert add(0, -1) == -1
Прочитайте документацию на функцию
print: https://docs.python.org/3/library/functions.html#printРасскажите о назначении каждого параметра.
Реализовать функцию
is_sorted. Функция принимает на вход список и возвращаетTrue, если элементы в нем упорядочены по возрастанию.assert is_sorted([]) == True assert is_sorted([42]) == True assert is_sorted([3, 14, 15, 92]) == True assert is_sorted([1, 1, 1]) == True assert is_sorted([1, 1, 2, 2, 3, 3, 3]) == True assert is_sorted([2, 1]) == False assert is_sorted([1, 2, 1]) == False
Реализовать функцию
find_longest. Функция принимает на вход список строк и возвращает строку с максимальной длиной. Если таких строк несколько, то возвращает первую из них.assert find_longest([]) == None assert find_longest([""]) == "" assert find_longest(["42"]) == "42" assert find_longest(["uno", "dos", "tre"]) == "uno" assert find_longest(["a", "bb", "ccc"]) == "ccc" assert find_longest(["a", "ccc", "bb"]) == "ccc"
Реализовать функцию
min_max. Функция принимает на вход список чисел и возвращает пару: минимальное и максимальное число. Алгоритм должен выполнять не более одного прохода по списку.assert min_max([]) == (None, None) assert min_max([1]) == (1, 1) assert min_max([1, 1]) == (1, 1) assert min_max([1, 2]) == (1, 2) assert min_max([2, 1]) == (1, 2) assert min_max([14, 3, 14, 92, 15]) == (3, 92)
Реализовать функцию
zip_longest_sum. Функция принимает на вход два списка и возвращает новый список, полученный сложением соответствующих элементов входных списков.assert zip_sum_longest([], []) == [] assert zip_sum_longest([1], []) == [1] assert zip_sum_longest([], [1]) == [1] assert zip_sum_longest([1], [2]) == [3] assert zip_sum_longest([1], [2, 1]) == [3, 1] assert zip_sum_longest([2, 1], [1]) == [3, 1]
Реализовать функцию
is_prime. Функция принимает на вход целое число и возвращаетTrue, если число простое. Простым называется число, которое делится без остатка только на 1 и на себя.assert is_prime(5) == True assert is_prime(113) == True assert is_prime(12) == False
Реализовать функцию
join. Функция принимает разделитель и список строк, возвращает строку, в которой элементы списка чередуются с разделителем.assert join(' ', []) == '' assert join(', ', ['one']) == 'one' assert join(', ', ['one', 'two', 'three']) == 'one, two, three'