Функции в 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