如何理解Python中的全局和局部作用域?
在Python中理解全局和局部作用域的方法
问题的出现原因是:当在一个作用域中对变量进行赋值时,该变量变成了该作用域的局部变量,遮蔽了外部作用域中同名的变量。因此,在函数foo中最后一条语句给x赋了一个新值后,编译器将其识别为局部变量。因此,在之前的print(x)语句中尝试打印未初始化的局部变量时,会出现错误。
解决方法是:在函数定义时,而不是执行时,决定哪些名称是局部的,哪些是全局的。这意味着解释器首先对作用域中的变量进行初始化操作,然后逐行执行代码。
以下是原文内容的整理:
根据Python文档的FAQ中的解释,你的问题已经有所解释。
这是因为当你在一个作用域中对变量进行赋值时,该变量变成了该作用域的局部变量,遮蔽了外部作用域中同名的变量。由于foo函数中的最后一条语句给x赋了一个新值,编译器将其识别为局部变量。因此,在之前的print(x)语句中尝试打印未初始化的局部变量时,会出现错误。
这是否意味着解释器的第一个操作是对作用域中的变量进行初始化?只有在之后逐行执行代码吗?
语句是按顺序执行的,但决定哪些名称是局部的,哪些是全局的是在函数定义时而不是执行时做出的决策。