Python 中的变量作用域

2023-09-17 22:14:16

通常,块中定义的variable仅在该块中可用。在街区外无法访问。这样的变量称为局部变量。形式参数标识符也表现为局部变量。

以下示例将强调这一点。尝试打印其范围之外的局部变量将引发NameError exception

示例: Local Variable

def greet():
  name = 'Steve'
  print('Hello ', name)
  
greet()
print(name) #NameError

在这里,namegreet() 函数的局部变量,不能在它之外访问。

存在于任何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了解更多信息。