Python 中的变量作用域
2023-09-17 22:14:16
通常,块中定义的variable仅在该块中可用。在街区外无法访问。这样的变量称为局部变量。形式参数标识符也表现为局部变量。
以下示例将强调这一点。尝试打印其范围之外的局部变量将引发NameError
exception。
示例: Local Variable
def greet():
name = 'Steve'
print('Hello ', name)
greet()
print(name) #NameError
在这里,name
是 greet()
函数的局部变量,不能在它之外访问。
存在于任何function块之外的任何变量都称为全局变量。它的值可以从任何函数内部访问。在下面的示例中,name
变量在函数定义之前初始化。
因此,它是一个全局变量。
示例: Global Variable
name='John'
def greet():
print ("Hello ", name)
greet()
print(name)
在这里,您可以访问全局变量name
因为它是从函数中定义的。
但是,如果我们为函数内的全局声明变量分配另一个值,则会在函数的命名空间中创建一个新的局部变量。 此赋值不会更改全局变量的值。例如:
示例: Local and Global Variables
name = 'Steve'
def greet():
name = 'Bill'
print('Hello ', name) #Hello Bill
greet()
print(name) #steve
现在,更改函数内全局变量name
的值不会影响其全局值。
如果需要从函数中访问和更改全局变量的值,则此权限由 global
关键字授予。
示例: Access Global Variables
name = 'Steve'
def greet():
global name
name = 'Bill'
print('Hello ', name)
greet()
print(name) #Bill
以上将在Python shell中显示以下输出。
也可以同时使用具有相同名称的全局变量和局部变量。内置函数 globals()
返回所有全局变量及其各自值的字典对象。
使用变量的名称作为键,可以访问和修改其值。
示例: Global Variables
name = 'Steve'
def greet():
globals()['name'] = 'Ram'
name='Steve'
print ('Hello ', name)
greet()
print(name) #Ram
上述代码的结果显示了具有相同名称的全局变量和局部变量之间的冲突以及如何解决冲突。
访问Globals and Locals in Python了解更多信息。