Определение функций
В своих программах мы уже использовали такие функции, как len, print и input. Это встроенные функции Python, поэтому они всегда доступны нам независимо от среды, в которой мы программируем. Однако можно определять и собственные функции.
Определение функции
Прежде чем функцию можно будет использовать, ее нужно определить. Любое определение функции начинается с ключевого слова def, сокращения от define. Затем идет имя функции, после него круглые скобки и двоеточие. Это называется заголовком функции. После этого, с отступом так же, как в блоках while и if, идет тело функции.
Например, следующий код определяет функцию message:
def message():
print("This is my very own function!")Если выполнить программу выше, кажется, что ничего не происходит. Это потому, что код в теле функции выполняется только тогда, когда функция вызывается.
Вызвать функцию так же просто, как упомянуть ее имя в коде. Если добавить вызов функции в конец программы выше, вот так
def message():
print("This is my very own function!")
message()получится выведенное сообщение:
This is my very own function!
После определения функцию можно вызвать несколько раз:
def message():
print("This is my very own function!")
message()
message()
message()This is my very own function! This is my very own function! This is my very own function!
Аргументы функции
Функции часто принимают один или несколько аргументов, которые могут влиять на то, что делает функция. Например, встроенные функции Python print и input принимают в качестве аргумента или аргументов текст, который нужно показать:
print("Hi!") # argument is the string "Hi!"
name = input("What is your name? ") # argument is the string "What is your name? "
print(name) # argument is the value of the variable nameРанее упоминалось, что термины аргумент и параметр часто используются для обозначения одного и того же. Различие в том, что аргумент используется для данных, передаваемых функции при вызове, а внутри функции аргументы присваиваются переменным, называемым параметрами. То есть, приблизительно, когда функция вызывается, мы называем переданные части данных аргументами, а когда опр еделяем функцию, называем их параметрами.
Это может показаться бесполезным смысловым различием, и чтобы еще больше все запутать, не все источники следуют такому определению. Однако в этом курсе мы стараемся сохранять различие ясным, поскольку знание правильной терминологии поможет вам понимать источники помимо материалов этого курса.
Определим несколько функций, которые принимают аргументы. В определении функции параметры задаются внутри круглых скобок после имени функции:
def hello(target):
print("Hello", target)Если вызвать эту функцию дважды, вот так
hello("Emily")
hello("world!")она выведет два разных приветствия:
Hello Emily Hello world!
Рассмотрим определение функции подробнее:
def hello(target):
print("Hello", target)В первой строке, в заголовке функции, мы определили, что эта функция принимает аргумент и присваивает его параметру с именем target. В теле функции команда print использует значение, сохраненное в target.
Когда функция вызывается, параметр target получает значение, переданное как аргумент в вызове функции. Например, следующий вызов функции
name = "Alan"
hello(name)приводит к тому, что параметру target присваивается значение "Alan".
Имена функций и их параметров следуют тем же принципам, что и имена переменных. Они должны быть описательными и в основном содержать строчные буквы и символы подчеркивания. Как и раньше, у этих правил есть исключения, но пока мы их проигнорируем.
Еще примеры
Рассмотрим еще несколько примеров функций, которые принимают аргументы. В следующем определении функции параметр - число:
def squared(x):
print(f"The square of the number {x} is {x * x}")
squared(2)
squared(5)The square of the number 2 is 4 The square of the number 5 is 25
А в этом определении функции внутри тела функции есть инструкция if:
def hello(name):
if name == "Emily":
print("Hello", name)
else:
print("Hi", name)
hello("Emily")
hello("Mark")Hello Emily Hi Mark
Эта функция принимает два аргумента:
def sum(x, y):
result = x + y
print(f"The sum of the arguments {x} and {y} is {result}")
sum(1, 2)
sum(5, 24)The sum of the arguments 1 and 2 is 3 The sum of the arguments 5 and 24 is 29
Функция также включает вспомогательную переменную result, которую использует для хранения суммы своих аргументов.
Обратите внимание, что имена параметров в определении функции никак не связаны с переменными вне нее. Мы с таким же успехом могли бы вызвать функцию выше так:
x = 100
y = 30
sum(1, 2)
sum(x + y, 10)Это должно вывести
The sum of the arguments 1 and 2 is 3 The sum of the arguments 130 and 10 is 140
В первом вызове функции параметрам присваиваются значения x = 1 и y = 2. Во втором вызове функции им присваиваются значения x = 130 и y = 10, независимо от одноименных переменных, использованных в вызове функции.
Мы вернемся к определениям функций в начале следующей части курса.
Предупреждение: использование глобальных переменных внутри функций
В примерах выше мы увидели, что внутри определений функций можно присваивать новые переменные. Функция также может видеть переменные, присвоенные вне нее, в главной функции. Такие переменные называются глобальными переменными.
Использовать глобальные переменные изнутри функций обычно плохая идея. Среди прочих проблем это может вызвать ошибки, которые трудно отследить.
Ниже пример функции, которая использует глобальную переменную "по ошибке":
# this is a global variable
name = "Betty"
def hello(given_name):
# using the global variable instead of the parameter by mistake
print("Hello", name)
hello("Steve")
hello("Betty")Hello Betty Hello Betty
С какими бы разными аргументами мы ни вызывали функцию, она всегда будет выводить значение "Betty", сохраненное в глобальной переменной.
Ответьте, пожалуйста, на короткий опрос по материалам этой недели.
Текущие баллы можно посмотреть в синем индикаторе в правом нижнем углу страницы.