Когда существует существующая переменная, создание новой под этим именем перезапишет существующую переменную, например:
print = 2 # change the print() function to a variable named 2
print('string')
даст
TypeError: 'int' object is not callable
возвращаясь к вашему коду:
demo01 = lambda: 5 # this is more of an advanced keyword, feel free to do it your way
def demo02():
demo01 = demo01() # "demo01 = [val]" tells python to assign a value to demo01, and you cannot assign a variable to the same variable:
variable = variable
, очевидно, невозможно; дает
NameError: name 'variable' is not defined
при использовании в глобальном состоянии и UnboundLocalError при использовании в локальном (класс или функция).
Ваши имена переменных и другие переменные, если таковые имеются, использованные во время присваивания НЕ ДОЛЖНЫ ИЛИ БЫТЬ ССЫЛКИ НА ПЕРЕМЕННЫЕ, КОТОРЫЕ ВЫ НАСТОЯЩИМ НАЗНАЧАЕТЕ .
Если вам действительно нужно использовать одну и ту же переменную:
variable_ = variable()
variable = variable_