Область видимості або scope визначає контекст змінної, в рамках якого її можна використовувати. У Python є два типи контексту: глобальний та локальний.
Глобальний контекст значить, що змінна є глобальною, вона визначена поза будь-якою з функцією і доступна будь-якій функції в програмі. Наприклад:
name = "Tom" def say_hi(): print("Hello", name) def say_bye(): print("Good bye", name) say_hi() say_bye()
Тут змінна name є глобальною і має глобальну область видимості. І обидві визначені тут функції можуть вільно її використовувати.
На відміну від глобальних змінних локальна змінна визначається всередині функції і доступна тільки з цієї функції, тобто має локальну область видимості:
def say_hi(): name = "Sam" surname = "Johnson" print("Hello", name, surname) def say_bye(): name = "Tom" print("Good bye", name) say_hi() say_bye()
В даному випадку в кожній з двох функцій визначається локальна змінна name. І хоча ці змінні називаються однаково, але тим не менше це дві різних змінних, кожна з яких доступна тільки в рамках своєї функції. Також в функції say_hi визначена змінна surname, яка також є локальною, тому в функції say_bye ми її використовувати не зможемо.
Є ще один варіант визначення змінної, коли локальна змінна приховує глобальну з тим же іменем:
name = "Tom" def say_hi(): print("Hello", name) def say_bye(): name = "Bob" print("Good bye", name) say_hi() # Hello Tom say_bye() # Good bye Bob
Тут визначена глобальна змінна name. Однак у функції say_bye визначена локальна змінна з тим же ім'ям name. І якщо функція say_hi використовує глобальну змінну, то функція say_bye використовує локальну змінну, яка приховує глобальну.
Якщо ж ми хочемо змінити в локальній функції глобальну змінну, а не визначити локальну, то необхідно використовувати ключове слово global:
def say_bye(): global name name = "Bob" print("Good bye", name)
В Python, як і в багатьох інших мовах програмування, не рекомендується використовувати глобальні змінні. Єдиною допустимою практикою є визначення невеликого числа глобальних констант, які не змінюються в процесі роботи програми.
PI = 3.14 # обчислення площі кола def get_circle_square(radius): print("Площа кола з радіусом", radius, "дорівнює", PI * radius * radius) get_circle_square(50)
В даному випадку число 3.14 представлено константою PI. Зрозуміло, що це значення в принципі не зміниться, тому його можна винести з функцій і визначити у вигляді константи. Як правило, ім'я константи визначається великими літерами.