# Области видимости - область программы в пределах которой идентификатор некоторой переменной
# продолжает быть связан с этой переменной и возвращает ее значение\
# За пределами области видимости этот же идентификатор может быть связан с другой переменной, либо быть свободным.

# Это набор функций или модулей, внутри которых допустимо использование имени объекта

def my_f(var):
    my_var = 999
    print('Внутри функции:', my_var)

a = 1
my_f(a)
print('После выполения функции', a)


def some_f():
    a = 999
    print('Переменная внутри функции', a) # Тут заканчивается область видимости функции

a = 1
some_f()
print('Переменная после выполения функции', a)

# Локальные и глобальные переменные
global_var = 1
def my_f():
    # Локальная функция
    local_val = 100
    # Мы можем использовать локальную переменную внутри функции
    print(local_val)
    # Глобальная переменная объявленная в модуле
    print(global_var)
    # Но эту переменную нельзя изменить
    # global_val = 999

my_f()
print(global_var)
# а тут недоступна локальная переменная
# print(local_val)

global_var = 2

def my_f():
    rezult = global_var**5
    print(rezult)

def my_change():
    global global_var
    global_var = 'anzer change'

my_f()

# Вложенные функции друг в друга, тогда рассматриваем область видимости относительно какой то функции
def a():
    def b():
        def c():

# Пример

m = 'Меня видно везде'

def a():
    ma = 'Меня видно в в() и а ()' - # Данная функция глобальна для функций b и с
    def b():
        print(m)
        print(ma)
        mb = 'Меня видно в с() и в (), но не видно в а()'

        def c():
            print(m)
            print(ma)
            print(mb)
            mc = 'Меня видно только в С()'

            #print(mc)

        c()
    b()

a()

