Как определять функции в Python 3

Введение

В Python есть известные для многих возможности:

  • функцию Python print() отображает объект на печать в терминале;
  • int() превращает данные в целое число;
  • len() возвращает длину объекта.

В данной статье мы рассмотрим, как определять возможности, чтобы их можно легко было использовать в собственных проектах.

Определение возможности

Начнем с превращения в возможность классический «Hello, World!». Создадим в текстовом редакторе новый файл и назовем его hello.py. Далее определим возможность.

Функцию определяется при помощи ключевого слова def, за которым следует название и настройки возможности в круглых скобках(могут быть пустыми). Строку заканчиваем двоеточием.

В нашем случае определяем возможность с названием hello():

hello.pydef hello():

Мы создали начальную инструкцию для создания возможности.

Сейчас добавляем вторую строку, в которой устанавливаем инструкции для возможности. В примере мы будем печатать в консоли «Hello, World»!

hello.pydef hello(): print("Hello, World!")

Сейчас Python строковая функцию в полном объеме определена, но если мы запустим программу, ничего не произойдет, поскольку мы не вызвали ее. Так что вызовем возможность при помощи hello():

hello.pydef hello(): print("Hello, World!")hello()

Запускаем программу:

python hello.py

Должно получиться следующее:

РезультатHello, World!

Возможности могут быть и сложнее, чем hello(). В блоке возможности можно использовать циклы for, условные инструкции и иное.

К примеру, следующая функцию использует условную инструкцию для проверки того, включает ли значение переменной name гласную, а далее применяет цикл for для итерации по буквам.

names.py# Определяем возможность names()def names(): # Задаем имя переменной с вводом name = str(input('Введите имя: ')) # Проверить, включает ли имя гласную if set('aeiou').intersection(name.lower()): print('Имя включает гласную.') else: print('Имя не включает гласную.')    # Итерация по имени for letter in name:        print(letter)# Вызываем функциюnames()

Python вызов возможности names(), которую мы определили, задает условную инструкцию и цикл for. Из этого примера видно, как можно легко организовать программный код в пределах возможности. Также можно без проблем определить условное выражение и цикл for как две отдельные возможности.

Работа с настройками

До сих пор мы рассматривали возможности без аргументов. Но в скобках можно легко определять настройки для возможностей. Настройка — это переменная в определении возможности, указывающая аргумент, который функцию должна принять.

Создадим небольшую программу с настройками x, y и z. Определим возможность, которая суммирует настройки в разных конфигурациях. Она возвращает их сумму. Далее мы вызовем возможность и передадим в нее числа.

add_numbers.pydef add_numbers(x, y, z):    a = x + y b = x + z c = y + z print(a, b, c)add_numbers(1, 2, 3)

Мы передали число 1 в настройка x, число 2 в настройка y, и число 3 в настройка z. Данные значения соответствуют каждому параметре в том порядке, в котором они приведены.

Программа выполняет математические вычисления на основе значений настроек:

a = 1 + 2b = 1 + 3c = 2 + 3

Функцию Python отображает результаты математических расчетов a, b, и c, где a должно равняться 3, b4 и c5. Запускаем программу:

python add_numbers.pyРезультат3 4 5

Когда значения 1, 2 и 3 мы передаем в виде настроек возможности add_numbers(), то получаем ожидаемый результат.

Настройки — это аргументы, которые выступают в виде переменных в определениях возможностей. Им можно задать значения при запуске способа для передачи аргументов в возможность.

Именованные аргументы

Кроме вызова настроек по порядку, в вызове возможностей можно без проблем использовать именные аргументы. В них элемент, вызывающий возможность, определяет аргументы по имени параметры.

Применяя именные аргументы, настройки можно задействовать не по порядку, так как интерпретатор Python будет использовать ключевые слова, соответствующие значениям настроек.

Создадим Python математическую возможность, которая будет выводить информацию о профиле посетителя. Передадим настройки в возможность в виде username(строка) и followers(число).

profile.py# Определяем возможность с параметрамиdef profile_info(username, followers):    print("Имя Username: " + username)    print("Followers: " + str(followers))

В определении возможности username и followers находятся в скобках. Блок возможности отображает информацию о посетителе в виде строк с применением двух настроек.

Сейчас можем вызвать возможность и назначить ей настройки:

profile.pydef profile_info(username, followers):    print("Имя Username: " + username)    print("Followers: " + str(followers))# Вызываем возможность с указанными выше параметрамиprofile_info("sammyshark", 945)# Вызываем возможность с именованными аргументамиprofile_info(username="AlexAnglerfish", followers=342)

При первом Python вызове возможности мы ввели имя посетителя sammyshark и его 945 подписчиков. При втором вызове возможности мы использовали именованные аргументы, присваивая значения переменным аргументов.

Запускаем программу:

python profile.pyРезультатUsername: sammysharkFollowers: 945Username: AlexAnglerfishFollowers: 342

В результате получаем имена посетителей и число их подписчиков.

Из следующего примера видим, что для той же программы, но с иным вызовом, можно без труда менять последовательность настроек:

profile.pydef profile_info(username, followers):    print("Имя Username: " + username)    print("Followers: " + str(followers))# Изменяем последовательность параметровprofile_info(followers=820, username="cameron-catfish")Снова запустив программу, получаем следующее:РезультатUsername: cameron-catfishFollowers: 820

При использовании именованных Python аргументов возможности последовательность их передачи при вызове возможности не имеет в себя значения.

Значения аргументов по умолчанию

Также можно без труда указать значения по умолчанию для обоих настроек. Создадим значение по умолчанию для параметры followers со значением 1:

profile.pydef profile_info(username, followers=1):    print("Имя Username: " + username)    print("Followers: " + str(followers))

Сейчас можно без труда запустить возможность с настройкою username, а число подписчиков по умолчанию будет 1. При желании можно без проблем настроить число посетителей:

profile.pydef profile_info(username, followers=1):    print("Имя Username: " + username)    print("Followers: " + str(followers))profile_info(username="JOctopus")profile_info(username="sammyshark", followers=945)

Запустив программу командой python profile.py, получаем следующее:

РезультатUsername: JOctopusFollowers: 1Username: sammysharkFollowers: 945

Определяя начальные настройки, не необходимо устанавливать значения для каждого аргумента.

Возврат значения

Можно без проблем передавать значение аргумента в возможность Python. При этом функцию также может возвращать значение при помощи инструкции return, которая завершит выполнение возможности и передаст значения к месту ее вызова. Используя return без аргументов, функцию будет возвращать None.

До сих пор мы использовали print() , а не return . Создадим программу, которая вместо вывода в терминал будет возвращать переменную.

В новом текстовом файле создадим программу, которая будет возводить в квадрат настройка x и возвращать переменную y . Выполняем вызов, чтобы вывести переменную result после запуска возможности square() с аргументом 3 :

square.pydef square(x):    y = x ** 2 return yresult = square(3)print(result)

Запускаем программу, чтобы увидеть результат:

python square.pyРезультат9

В виде выходных данных получаем число 9 , что и будет результатом возведения в квадрат числа 3 . Рассмотрим действие инструкции return в программе:

square.pydef square(x):    y = x ** 2    # return yresult = square(3)print(result)

Снова запускаем программу:

python square.pyРезультатNone

Без return программа не может вернуть значение, так что оно равно None .

В следующем примере Python математической возможности заменим print() из программы add_numbers.py на инструкцию return :

add_numbers.pydef add_numbers(x, y, z):    a = x + y b = x + z c = y + z return a, b, csums = add_numbers(1, 2, 3)print(sums)

Вне возможности объявляем переменную sums , которая равна результату действия возможности для чисел 1 , 2 и 3 из примера, приведенного выше. Далее выводим переменную sums . Снова запускаем программу, сейчас с инструкцией return :

python add_numbers.pyРезультат(3, 4, 5)

На выходе получаем те же числа, что и с использованием инструкции print() . Сейчас результат предоставлен в виде кортежа, поскольку в списке выражений инструкции return имеется запятая.

Возможности Python немедленно завершаются, когда встречают инструкцию return , независимо от того, возвращают они значение или нет:

return_loop.pydef loop_five():    for x in range(0, 25):        print(x)        if x == 5:            # Функцию останавливается на x == 5 return print("Эта строка не будет выполняться.")loop_five()

Инструкция return в цикле for завершает возможность, так что строка вне цикла не будет выполняться. При использовании инструкции break был бы завершен только цикл, и выполнялась последняя строка print() .

Инструкция return завершает возможность и может возвращать значение в случае применения настроек.

Использование main() в виде возможности

Хотя в Python можно вызывать возможность, которая находится в конце программы, во многих языках программирования (таких как C++ и Java ) для выполнения программы требуется функцию main . Применение возможности main() не обязательно, но поможет организовать логику программы, помещая важные элементы в одну возможность.

Начнем с добавления Python возможности main() в составленную программу hello.py . Оставляем возможность hello() и определяем возможность main() :

hello.pydef hello():    print("Hello, World!")def main():

Применяем инструкцию print() , чтобы знать, что мы находимся в возможности main() . Кроме этого вызовем возможность hello() внутри возможности main() :

hello.pydef hello():    print("Hello, World!")def main():    print("Это главная функцию")    hello()

Ниже вызываем возможность main() :

hello.pydef hello():    print("Hello, World!")def main():    print("Это главная функцию.")    hello()main()

Сейчас запускаем программу:

python hello.pyПолучаем следующее:РезультатЭто главная функцию.Hello, World!

Так как мы вызвали Python строковую возможность hello() внутри main() , а далее вызвали только возможность main() , то получили текст «Hello, World!» один раз после строки, которая сообщает, что мы находимся в главной возможности.

Дальше мы будем работать с несколькими возможностями, так что рассмотрим область видимости глобальных и локальных переменных. Если определяете переменную в пределах блока возможности, то можете без труда использовать переменную только в данной возможности. Для применения в различных возможностях лучше объявить глобальную переменную.

На языке Python ‘__main__’ — это имя области, в которой будет выполняться код верхнего уровня. Если программа запускается стандартным вводом или при помощи интерактивного запроса, то __name__ устанавливается равным ‘__main__’ .

В связи с данным существует соглашение о применении следующей конструкции:

if __name__ == '__main__':    # Код для выполнения, когда это главная программа

Так мы получаем функция использовать программные файлы в виде:

  • главной программы и запускать ту часть, которая следует после инструкции if ;
  • модуля и не запускать то, что следует после инструкции if .

Любой программный код, не содержащийся в данной инструкции, будет выполняться после запуска. Если вы используете программный файл в виде модуля, то программный код, не являющийся частью данной инструкции, будет выполнен при импорте вторичного файла.

Расширим программу names.py и создадим новый файл more_names.py . Объявим в данной программе глобальную переменную и изменим возможность names() так, чтобы инструкции находились в двух отдельных Python возможностях.

Первая функцию has_vowel() будет проверять, включает ли строка name гласную. Вторая функцию print_letters() выведет все буквы строки name :

more_names.py# Объявляем глобальную переменную name для применения во всех функцияхname = str(input('Введите имя: '))# Определяем возможность, чтобы проверить, включает ли имя гласную буквуdef has_vowel():    if set('aeiou').intersection(name.lower()):        print('Имя включает гласную.')    else:        print('Имя не включает гласную.')# Итерация по буквам в строке имениdef print_letters():    for letter in name:        print(letter)

Определим main() , которая включает вызов Python математических возможностей has_vowel() и print_letters() :

more_names.py# Объявить имя глобальной переменной для применения во всех функцияхname = str(input('Введите имя: '))# Определяем возможность, чтобы проверить, включает ли имя гласную буквуdef has_vowel():    if set('aeiou').intersection(name.lower()):        print('Имя включает гласную.')    else:        print('Имя не включает гласную.')# Итерация по буквам в строке имениdef print_letters():    for letter in name:        print(letter)# Определяем основной способ для вызова иных функцийdef main():    has_vowel()    print_letters()

В конце файла добавляем конструкцию if __name__ == ‘__main__’: . Для запуска всех Python возможностей вызываем main() после инструкции if .

more_names.py# Объявляем глобальную переменную name для применения во всех функцияхname = str(input('Введите имя: '))# Определяем возможность, чтобы проверить, включает ли имя гласную буквуdef has_vowel():    if set('aeiou').intersection(name.lower()):        print('Имя включает гласную.')    else:        print('Имя не включает гласную.')# Итерация по буквам в строке имениdef print_letters():    for letter in name:        print(letter)# Определяем основной способ для вызова иных функцийdef main():    has_vowel()    print_letters()# Выполняем возможность main()if __name__ == '__main__':    main()

Запускаем программу:

python more_names.py

Программа генерирует тот же результат, что и программа names.py , но программный код в ней лучше организован, и его можно использовать в виде модуля без изменений.

Если не хотели бы объявлять Python возможность main() , то можете закончить программу так:

more_names.py...if __name__ == '__main__':    has_vowel()    print_letters()

Применение main() в виде возможности в сочетании с инструкцией if __name__ == ‘__main__’ : поможет организовать программный код в логическом порядке, сделать его модульным и удобным для чтения.

Заключение

Возможности — это блоки кода с инструкциями, которые выполняют действия в рамках программы, делают код модульным и дают функция использовать его многократно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *