Область видимості змінної

Останнє оновлення 2026-07-01 | Редагувати цю сторінку

Огляд

Питання

  • Як насправді працюють виклики функцій?
  • Як можна визначити, де виникають помилки?

Цілі

  • Розрізняти локальні та глобальні змінні.
  • Розглядання параметрів як локальних змінних.
  • Аналіз повідомлень про помилки (traceback) та визначення файлу, функції й номера рядка, де виникла помилка, тип помилки та текстове повідомлення про неї.

Область видимості змінної - це частина програми, яка може “бачити” цю зміну.


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

PYTHON

pressure = 103.9

def adjust(t):
    temperature = t * 1.43 / pressure
    return temperature
  • pressure – це глобальна змінна.
    • Визначається поза будь-якою конкретною функцією.
    • Є видимою у будь-якому місці програми.
  • Змінні t та temperature є локальними у межах функції adjust.
    • Визначені всередині функції.
    • Не є видимими у головній програмі.
    • Нагадування: параметр функції – це змінна, якій автоматично присвоюється значення під час виклику функції.

PYTHON

print('adjusted:', adjust(0.9))
print('temperature after call:', temperature)

ВИВІД

adjusted: 0.01238691049085659

ПОМИЛКА

Traceback (most recent call last):
  File "/Users/swcarpentry/foo.py", line 8, in <module>
    print('temperature after call:', temperature)
NameError: name 'temperature' is not defined
Обговорення

Використання локальних і глобальних змінних

Відстежте значення всіх змінних у цій програмі під час її виконання. (Використовуйте ‘—’ як значення змінних до моменту їх створення та після того, як вони припиняють існувати.)

PYTHON

limit = 100

def clip(value):
    return min(max(0.0, value), limit)

value = -22.5
print(clip(value))
Вправа

Читання повідомлень про помилки

Прочитайте наведене нижче повідомлення про помилку та визначте наступне:

  1. Скільки рівнів вкладеності відображає це повідомлення?
  2. Як називається файл, у якому сталася помилка?
  3. Як називається функція, у якій сталася помилка?
  4. В якому рядку цієї функції виникла помилка?
  5. Який тип помилки?
  6. Яке повідомлення про помилку?

ПОМИЛКА

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-2-e4c4cbafeeb5> in <module>()
      1 import errors_02
----> 2 errors_02.print_friday_message()

/Users/ghopper/thesis/code/errors_02.py in print_friday_message()
     13
     14 def print_friday_message():
---> 15     print_message("Friday")

/Users/ghopper/thesis/code/errors_02.py in print_message(day)
      9         "sunday": "Aw, the weekend is almost over."
     10     }
---> 11     print(messages[day])
     12
     13

KeyError: 'Friday'
  1. Три рівні.
  2. errors_02.py
  3. print_message
  4. Рядок 11
  5. KeyError. Ці помилки виникають при спробі звернутися до ключа, який не існує (зазвичай в структурі даних на кшталт словника). Докладніше про KeyError та інші вбудовані винятки див. документацію Python.
  6. KeyError: 'Friday'
Ключові моменти
  • Область видимості змінної - це частина програми, яка може “бачити” цю зміну.