Telegram

Функции в Python

Функция - это именованный блок кода, к которому можно обратиться из лю­бого места программы. У функции есть имя и список входных парамет­ров, а также воз­вращаемое значение.

Дана строка...

Функция позволяет использо­вать в про­грамме один и тот же фрагмент кода нес­колько раз. Разберем следующую задачу:

Дана строка, вместо про­белов у которой стоит специальный сим­вол, на­пример, *, необхо­димо заменить все специальные сим­волы на про­белы.

У нас есть строки вида:

string = 'вот*такие*вот*строки'

И код, решающий эту задачу:

text = 'some*string*with*unnecessery*symbols'

# Пошаговое решение
words = text.split('*')
print(words)
# ['some', 'string', 'with', 'unnecessery', 'symbols']
result = ' '.join(words)
print(result)
# some string with unnecessery symbols


# Решение в одну строку
result = ' '.join(text.split('*'))

Оба этих способа прекрасно рабо­тают до тех пор, пока у нас одна вход­ная строка. А если строк несколько?

# ???
text1 = 'i*love*Python'
text2 = 'Python*is*great'
text3 = 'Programming*is*simpler*than*you*think'

Можно, конечно, обрабатывать строки в цикле. Например, вот так:

lines = [text1, text2, text3]

# Пошаговое решение
result = []
for line in lines:
    result = append(' '.join(line.split('*')))

# Решение в одну строку
results = [' '.join(line.split('*')) for line in lines]

А если "лишний символ" для каждой строки будет различ­ным? Тогда придется обрабаты­вать каждую строку отдельно. Чтобы сделать код, приведен­ный выше, универсальным нам необходимы функции.

Объявление функции

Рассмотрим синтаксис объявле­ния функции:

def greeting(name):
    print('Hello, ' + name)

# Вызываем функцию
greeting('Max')
# Hello, Max
greeting('Ivan')
# Hello, Ivan
greeting('Alex')
# Hello, Alex
greeting('Kate')
# Hello, Kate

Перед объявлением имени функции greeting пишется служебное слово def, а после имени функции обяза­тельно записываются круглые скобки, в которые передается параметр name

Типичное объявление функции в Python выглядит так:

def function_name(argument1, argument2, ...):
    # код функции

Представим себе работу обычного калькулятора. Мы вводим первое число, операцию и второе число. Калькулятор возвращает нам результат операции над этими числами. Всё просто, не так ли? Функции точно так же умеют возвращать значение с помощью служебного слова return.

Проиллюстрируем это на примере функции сложения двух чисел:

def add(a, b):
    return a + b

# Вызовем нашу функцию
s1 = add(10, 2)
s2 = add(108, 100)
s3 = add(3, 1)
print(s1, s2, s3)
# 12 208 4

Напишем функцию умножения двух чисел:

def mult(a, b):
    return a * b

# Вызовем нашу функцию
m1 = mult(10, 2)
m2 = mult(108, 100)
m3 = mult(3, 1)
print(m1, m2, m3)
# 20 10800 3

Решение задачи "лишнего сим­вола"

А теперь вернемся к примеру разо­бран­ному в начале статьи. Наша функция, назовем ее removeSymbol, будет прини­мать в качестве пара­метров символ, который нужно заме­нить на пробел, и строку, содер­жа­щую этот самый символ.

def removeSymbol(symbol, string):
    return ' '.join(string.split(symbol))

# Вызовем нашу функцию
formatted_text1 = removeSymbol('*', 'слишком*много*звездочек')
formatted_text2 = removeSymbol('--', 'слишком--много--черточек')
print(formatted_text1)
# слишком много звездочек
print(formatted_text2)
# слишком много черточек

Аргументы по умолчанию

Рассмотрим еще раз функцию greeting. Перепишем её со служебным словом return

def greeting(name):
    return 'Hello, ' + name

print(greeting('Alex'))
# Hello, Alex

Теперь функция greeting возвращает строковое значе­ние, которое мы можем прис­воить какой-нибудь переменной

helloMax = greeting('Max')
print(helloMax)
# Hello, Max

Но если мы приветствовать каждого пользователя по-своему? Тогда нам нужно пере­дать в greeting еще один аргумент

def greeting(name, hello):
    return hello + ', ' + name

print(greeting('Alex','Hello'))
# Hello, Alex
print(greeting('Kate','Salute'))
# Salute, Kate

А что если пользователю неважно, как мы его попри­ветст­вуем? Тогда логично было бы по умолчанию использовать какое-то одно при­ветст­вие и иногда его изменять. В програм­мировании эта концепция назы­вается "аргумент по умол­чанию". Если в вызов функции не передали одного или нес­коль­ких аргументов, то будут использованы аргументы по умолчанию.

def greeting(name, hello='hello'):
    return hello + ', ' + name

print(greeting('Alex')
# Hello, Alex
print(greeting('Kate','Salute'))
# Salute, Kate