Step 7 (S-15553)

From Stepik Wiki
Revision as of 12:05, 24 July 2017 by Valeriy Shagur (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/3372/step/7

S-15553-1.png

Переменные, которые объявлены вне всяких функции, называются глобальными. И их можно использовать во всей программе. Например: у нас есть функция print_value, внутри которой мы никак не инициализировали значение переменной а. Но тем не менее, используем его для вывода. Такой код будет работать, если перед вызовом функции мы инициализируем глобальную переменную а.

S-15553-2.png

Что происходит при вызове функции? Интерпретатор, обнаружив переменную а, которая ни связана ни с каким значением внутри функции, будет смотреть глобальный контекст. Если переменная а определена глобально, он подставит ее значение в функцию. В противном случае - сообщит об ошибке.

S-15553-3.png

Мы можем попробовать написать такую функцию:

S-15553-4.png

Которая будет использовать значение переменной а глобально, потом изменять его и выводить новое значение. Однако, если мы запустим этот код, то увидим сообщение об ошибке. Почему так происходит?

Если внутри функции мы пытаемся изменить значение переменной (присвоить ей другое значение), то в таком случае переменная считается локальной внутри всей функции. Поскольку переменная считается локальной, при первом вызове функции print поиск по глобальным переменным не будет происходить, а локальная переменная а к этому моменту еще не инициализирована . Сообщение об ошибке будет выведено, даже не смотря на то, что в глобальной области определена переменная с именем а.