Визначення функцій у Python 3

Пропозиція від 8host.com

визначення

Функція – це призначений для виконання конкретного завдання ізольований блок коду, який можна використовувати повторно. Функції роблять код програми модульним і компактнішим.

Python пропонує багато вбудованих функцій. Ви, напевно, знайомі з такими:

  • print() виводить об'єкт у термінал.
  • int() перетворює рядки або числа на цілі числа.
  • len() повертає довжину об'єкта.

Ім'я функції містить круглі дужки та може містити параметри.

Даний посібник навчить вас визначати функції користувача.

Визначення функції

Для початку спробуйте перетворити просту програму Hello, World! у функцію.

Створіть новий текстовий файл hello.py та визначте функцію.

Для визначення функції використовується ключове слово def, потім вказується ім'я функції та круглі дужки, в яких можуть бути параметри (якщо параметрів немає, дужки залишаються порожніми), в кінці ставиться двокрапка.

Щоб визначити функцію hello(), додайте файл hello.py:

Це вихідне визначення функції.

Далі потрібно додати другий рядок із 4 пробілами на початку. Вона визначатиме завдання, яке виконує функція (у цьому випадку функція виводитиме в консоль фразу Hello, World!):

def hello(): print("Hello, World!")

Тепер функцію визначено. Але якщо на цьому етапі запустити програму, нічого не станеться: щоб функція працювала, її потрібно не тільки визначити, він і викликати.

Після визначення функції викличте її:

def hello(): print("Hello, World!") hello()

Тепер запустіть програму:

Вона має повернути:

Функція hello() досить простий приклад. Функції можуть бути набагато складнішими: містити цикли for, умовні вирази та інші компоненти.

Читайте також:

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

# Визначення функції names() def names(): # Змінна name з вступними даними name = str(input('Enter your name: ')) # Пошук голосних у рядку name if set('aeiou').intersection(name.lower()): print('Your name contains a vowel.') else: print('Your name does not contain a vowel.') # Ітерація рядка name for letter in name: print(letter) # Виклик функції names()

На прикладі функції names(), яка використовує умовний вираз і цикл for, можна побачити, як у визначенні функції має бути організований код. Хоча, звичайно, код функції багато в чому залежить від її мети. У деяких випадках умовний вираз і цикл for потрібно розділити на два різні блоки.

Параметри функції

Щойно ви написали просту функцію без параметрів: круглі дужки залишилися порожніми. Тепер спробуйте створити функцію параметрів.

Параметр – іменований об'єкт, визначальний аргумент, який може прийняти функція.

Спробуйте написати просту програму з параметрами x, y та z. Створіть функцію, яка складає ці параметри та виводить результат. Викличте функцію та передайте їй числа. Створіть файл add_numbers.py і додайте код:

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

Параметр x має значення 1, y – 2, а z – 3.

Значення надаються кожному параметру запорядку.

Програма виконує такі обчислення:

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

Також програма виводить значення a, b та c. Давайте запустимо програму і подивимося на результат:

python add_numbers.py 3 4 5

Параметри – це аргументи, які функції визначаються як змінні. При запуску методу їм можна надавати значення та передавати їх функції.

Іменовані аргументи

Параметри можна викликати як до порядку. Іменовані аргументи дозволяють викликати параметри на ім'я.

При цьому параметри можна викликати в порядку, в якому вони визначені. Інтерпретатор Python використовуватиме ім'я параметра для пошуку потрібного значення.

Створіть функцію, яка виводитиме інформацію про профіль користувача. Відкрийте файл profile.py і передайте їй параметри username (рядок) та followers (ціле число).

# Визначення функції з параметрами def profile_info(username, followers): print("Username: " + username) print("Followers: " + str(followers)) username followers profile_info()

У визначенні функції profile_info() параметри username і followers взяті у круглі дужки. Блок функції виводить рядок з інформацією користувача на основі двох параметрів.

Викличте функцію та надайте їй параметри:

def profile_info(username, followers): print("Username: " + username) print("Followers: " + str(followers)) # Виклик функції з наданими параметрами profile_info(" 8hostblog", 945) # Виклик функції з іменованим аргументом profile_info(username="AlexFisher", followers=342)

У першому дзвінку використовується ім'я 8hostblog з кількістю передплатників 945. У другому дзвінку використовується іменовані аргументи.

python profile.py Username: 8hostblog Followers: 945 Username: AlexFisher Followers: 342

У виводі ви бачите ім'я та кількість передплатників кожного користувача.

Ви можете змінити порядок відображення параметрів у цій програмі:

def profile_info(username, followers): print("Username: " + username) print("Followers: " + str(followers)) # Зміна порядку параметрів profile_info(followers=820 , username="Cameron-Tailor")

Спробуйте знову запустити програму. Ви отримаєте такий результат:

Username: Cameron-Tailor Подружжя: 820

Завдяки іменованим аргументам ви можете викликати параметри функції у будь-якому порядку.

Значення параметрів за замовчуванням

Також можна встановлювати параметри за замовчуванням. Спробуйте встановити параметр followers значення за замовчуванням 1.

def profile_info(username, followers=1): print("Username: " + username) print("Followers: " + str(followers))

Тепер можна запустити функцію з параметром username, а followers буде за промовчанням мати значення 1. За бажання значення followers можна змінити.

def profile_info(username, followers=1): print("Username: " + username) print("Followers: " + str(followers)) profile_info(username="Steve") profile_info(username="8hostblog", followers=945)

Запустіть програму. На екрані з'явиться:

Username: Steve Followers: 1 Username: 8hostblog Followers: 945

Повернення значення

Ви можете передавати значення параметра у функцію, але й сама функція може повертати значення.

Для цього використовується оператор return, який зупиняє виконання функції та повертає значення. Без аргументів оператор return повернезначення None.

До цього замість return функції використовувався оператор print(). Тепер спробуйте створити програму, яка повертатиме значення за допомогою return.

У текстовому файлі square.py створіть програму, яка зводить квадрат значення х і повертає значення змінної y. Викличте змінну result, значення якої виходить шляхом виконання функції square() з аргументом 3.

def square(x): y = x ** 2 return y result = square(3) print(result)

python square.py 9

def square(x): y = x ** 2 # return y result = square(3) print(result)

python square.py None

Без висловлювання return програма не може повернути значення, тому повертає значення за замовчуванням, None.

Повернемося до попереднього прикладу add_numbers.py. Замініть print() оператором return.

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

Поза тілом функції визначено змінну sums, значення якої дорівнює результату функції з параметрами 1, 2 і 3.

python add_numbers.py (3, 4, 5)

Програма повертає такий самий результат, як і з print(). В даному випадку як результат повертається кортеж.

Читайте також: Кортежі в Python 3

Досягаючи оператора return, функція припиняє виконання.

# Файл return_loop.py def loop_five(): for x in range(0, 25): print(x) if x == 5: # Stop function at x == 5 return print("This line will not execute.") loop_five()

Оператор return у циклі for припиняє виконання функції, тому рядки після функції не будуть запущені. Якби замість нього використовувався оператор break,програма припинила виконання циклу, а чи не функції, і останній вираз print() було б оброблено.

Функція main()

Поверніться до файлу hello.py та додайте функцію main(), зберігши при цьому функцію hello().

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

До функції main() додайте вираз print(). Потім викличте функцію hello() усередині функції main().

def hello(): print("Hello, World!") def main(): print("This is the main function") hello()

Наприкінці файлу викличте функцію main().

def hello(): print("Hello, World!") def main(): print("This is the main function.") hello() main( )

Тепер можна запустити програму:

python hello.py Ця основна функція. Hello, World!

Тепер спробуйте використати кілька функцій.

Якщо ви визначаєте змінну всередині блоку функції, ви зможете використовувати її лише всередині цієї функції. Якщо ви хочете використовувати змінну в декількох функціях, оголосіть глобальну змінну.

У Python область виконання високорівневого коду називається __main__. Коли програма запускається зі стандартного введення, скрипту або інтерактивного запиту, __name__ дорівнює __main__.

Тому в програмах використовується така конструкція:

if __name__ == '__main__': # Код основної програми

Ця конструкція працює як роздільник, завдяки чому файл можна використовувати як:

  • Основну програму (і запустити код після конструкції if).
  • Модуль (і не виконувати код після if).

Весь код, який знаходиться поза цим виразом, буде виконано під час запуску. Якщо ви використовуєте файл програми як модуля, код поза цим виразом буде виконано післяімпорту під час виконання вторинного файла.

Спробуйте розширити програму names.py. Створити новий файл more_names.py; у цьому файлі оголосіть глобальну змінну та змініть вихідну функцію names(), розділивши завдання на дві дискретні функції.

Перша функція, has_vowel(), перевірятиме рядок name на наявність голосних. Друга функція, print_letters(), виводитиме кожну букву рядка name.

# Оголошення глобальної змінної (для роботи з усіма функціями) name = str(input('Enter your name: ')) # Визначення функції, яка шукатиме голосні в name def has_vowel(): if set('aeiou').intersection(name.lower()): print('Your name contains a vowel.') else: print('Your name does not contain a vowel.') # Ітерація літер рядка name def print_letters(): for letter in name: print(letter)

Тепер визначте функцію main(), яка викликатиме has_vowel() і print_letters().

# Оголошення глобальної змінної (для роботи з усіма функціями) name = str(input('Enter your name: ')) # Визначення функції, яка шукатиме голосні в name def has_vowel(): if set('aeiou').intersection(name.lower()): print('Your name contains a vowel.') else: print('Your name does not contain a vowel.') # Ітерація літер рядка name def print_letters(): for letter in name: print(letter) # Визначення головного методу, який викликає інші функції def main(): has_vowel() print_letters()

Потім додайте конструкцію if __name__ == '__main__': до кінця файлу.

У разі всі функції поміщені у функцію main(). Тому після конструкції необхідно викликати функцію main().

# Оголошення глобальної змінної (для роботи з усіма функціями) name= str(input('Enter your name: ')) # Визначення функції, яка шукатиме голосні в name def has_vowel(): if set('aeiou').intersection(name.lower ()): print('Your name contains a vowel.') else: print('Your name не є contain a vowel.') # Ітерація літер рядка name def print_letters(): for letter in name: print(letter) # Визначення головного методу, який викликає інші функції def main(): has_vowel() print_letters () # Виклик функції main() if __name__ == '__main__': main()

Тепер можна запустити програму:

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

Якщо ви не хочете визначати функцію main(), ви можете закінчити програму так:

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

Функція main() і конструкція if __name__ == '__main__': дозволяють логічно організувати код, роблять його модульним і легкочитаним.

Висновок

Функції – це блоки коду, призначені для виконання того чи іншого завдання, які можна повторно використати.