Локальные и глобальные переменные, функция НОД (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?
UnboundLocalError
2
Что выводит эта программа? x = 1 ⏎ def f(): ⏎ x = 2 ⏎ print(x) ⏎ f() ⏎ print(x)
2 и 1 (на двух строках)
3
Напишите функцию oshir(x), которая увеличивает b = 5 на 1 без global и возвращает результат в b.
def oshir(x): ⏎ return x + 1 ⏎ b = 5 ⏎ b = oshir(b) ⏎ print(b)
4
Почему советуют как можно меньше использовать глобальные переменные?
Любая функция может их изменить, из-за чего ошибки трудно найти; параметры и return понятнее.