Python封闭范围:在调用点还是在定义点?

Python封闭范围:在调用点还是在定义点?,python,scope,Python,Scope,这是一个封闭范围的示例(是否也称为词法范围?) def外部(a): def inner(): 归还 返回内部 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 内部=外部(10) 打印(内部() 此代码也适用于: def打印机(): 打印(x) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': x=10 打印机() 我的问题是:第二个示例中是否使用了“封闭范围”规则?如果是这样的话,两种类型的封闭作用域之间是否有任何

这是一个封闭范围的示例(是否也称为词法范围?)

def外部(a):
def inner():
归还
返回内部
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
内部=外部(10)
打印(内部()
此代码也适用于:

def打印机():
打印(x)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
x=10
打印机()
我的问题是:第二个示例中是否使用了“封闭范围”规则?如果是这样的话,两种类型的封闭作用域之间是否有任何区别:在调用点/运行时和在定义时

编辑:正如@user2357112所指出的,
x
是全局的。这个不行:

def打印机():
打印(x)
def外部(功能打印):
x=10
func_print()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
外部(打印机)

多么新手的错误…

认为
x
是一个全局名称。@user2357112谢谢,我很尴尬。一旦你在函数中指定了一个名称,它就会变成局部名称(并在函数中隐藏全局名称)。如果您想在上一个示例中更改全局
x
,则必须使用
global x;x=10
。这可能会有所帮助:
x
是一个全局名称。@user2357112谢谢,我很尴尬。一旦你在函数中指定了一个名称,它就会变成局部名称(并在函数中隐藏全局名称)。如果您想在上一个示例中更改全局
x
,则必须使用
global x;x=10
。这也可能有帮助: