☰ Содержание · Информатика

Локальные и глобальные переменные, функция НОД (EKUB)

Уроки 49–50 · 2 урока · М. Р. Файзиева, Д. М. Сайфуров, Н. С. Хайтуллаева. Информатика и информационные технологии, 9 класс. «Nashriyot uyi Tasvir», Ташкент, 2020
49

Функции и переменные

Учебник: с. 96–98
ЦельЗнает различие между локальными и глобальными переменными, использует ключевое слово global и понимает, что если параметр изменяется внутри функции, внешняя переменная не меняется.
Новые слова
локальная переменная: переменная, созданная внутри функции; существует только там · lokal o‘zgaruvchiглобальная переменная: переменная, созданная вне функций; её можно читать везде · global o‘zgaruvchiglobal: ключевое слово, позволяющее функции изменять глобальную переменную · globalобласть видимости: часть программы, в которой можно использовать имя · ko‘rinish doirasi
Объяснение

Переменная, объявленная внутри функции, является локальной и существует только в этой функции: когда функция заканчивается, она исчезает, а при использовании вне функции появляется NameError. Переменная, объявленная вне функций (в основной программе), является глобальной и может читаться внутри функции. Чтобы изменить значение глобальной переменной в функции, в начале функции нужно написать global имя; иначе Python считает имя локальным, и b = b + 1 даёт UnboundLocalError. Параметр – тоже локальная переменная: если в функцию передано k = 7, то удвоение параметра внутри не меняет внешнее k. Глобальные переменные могут запутать программу, поэтому по возможности лучше передавать значения параметрами, а результат возвращать с помощью return. Локальные переменные защищают значение от случайной порчи в другом месте.

Примеры
Локальная переменная: def f(): ⏎     t = 7 ⏎     print(t) ⏎ f() ⏎ print(t) f() выводит 7, а затем последний print(t) даёт NameError, потому что t существует только внутри f.
global и параметр: hisob = 0 ⏎ def oshir(): ⏎     global hisob ⏎     hisob = hisob + 1 ⏎ oshir() ⏎ oshir() ⏎ print(hisob) благодаря global hisob функция изменяет внешнее hisob; после двух вызовов выводится 2. Параметр: def f(n): ⏎     n = n * 2 ⏎     print(n) ⏎ k = 7 ⏎ f(k) ⏎ print(k) внутри получается 14, а снаружи k остаётся 7.
Работа в классе

«Граница круга»: класс – это «функция», круг из парт; ученик внутри использует карточку в руке (локальную) только в этом круге, а запись на доске (глобальная) видна всем. Учитель задаёт вопросы, чтобы выяснить, кто что видит.

Упражнения
1
Какая ошибка появится, если в функции выполнить b = b + 1 без записи global?
2
Что выводит эта программа? x = 1 ⏎ def f(): ⏎     x = 2 ⏎     print(x) ⏎ f() ⏎ print(x)
3
Напишите функцию oshir(x), которая увеличивает b = 5 на 1 без global и возвращает результат в b.
4
Почему советуют как можно меньше использовать глобальные переменные?