Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 100

>>> def change_local():

... animal = 'wombat'

... print('inside change_local:', animal, id(animal))

...

>>> change_local()

inside change_local: wombat 4330406160

>>> animal

'fruitbat'

>>> id(animal)

4330390832

Что здесь произошло? В первой строке мы присвоили строку 'fruitbat' гло-

бальной переменной с именем animal. Функция change_local() также имеет пере-

менную с именем animal, но она находится в ее локальном пространстве имен.

Мы использовали функцию id(), чтобы вывести на экран уникальное значение

каждого объекта и доказать, что переменная animal, расположенная внутри функции

change_local(), — это не переменная animal, расположенная на основном уровне

программы.

136

Глава 4. Корочка Python: структуры кода

Чтобы получить доступ к глобальной переменной вместо локальной переменной

внутри функции, вам нужно явно использовать ключевое слово global (вы знали,

что я это скажу: явное лучше неявного):

>>> animal = 'fruitbat'

>>> def change_and_print_global():

... global animal

... animal = 'wombat'

... print('inside change_and_print_global:', animal)

...

>>> animal

'fruitbat'

>>> change_and_print_global()

inside change_and_print_global: wombat

>>> animal

'wombat'

Если вы не используете ключевое слово global внутри функции, Python задей-

ствует локальное пространство имен и переменная будет локальной. Она пропадет

после того, как функция завершит работу.

Python предоставляет две функции для доступа к содержимому ваших про-

странств имен:

 locals() — возвращает словарь, содержащий имена локального пространства имен;

 globals() — возвращает словарь, содержащий имена глобального пространства имен.

Вот так они используются:

>>> animal = 'fruitbat'

>>> def change_local():

... animal = 'wombat' # локальная переменная

... print('locals:', locals())

...

>>> animal

'fruitbat'

>>> change_local()