1. 如果要在一个函数内修改全局变量,就使用 global 语句。

如果在函数的顶部有 global eggs 这样的代码,它就告诉Python:“这个函数中,eggs 指的是全局变量,所以不要用这个名字创建一个局部变量。”

示例代码:
sameName2.py

def spam():
    global eggs
    eggs = 'spam'

eggs = 'global'
spam()
print(eggs)
  • 理解思路:
    因为 eggs 前面加了 global, 所以 eggs 是全局变量,spam() 函数定义中,它被赋值为字符串 spam,这个赋值语句发生在全局作用域,所以函数定义结束后的赋值没有生效。
    调用函数 spam() 时,全局变量 eggs 的值为 ‘spam’,执行 print(eggs) 后打印出 spam 。

执行结果:

glove的python实现 python globa_全局变量

  1. 区分一个变量是处于局部作用域还是全局作用域的4条法则
  • 如果变量在全局作用域中使用(即在所有函数之外),它就总是全局变量。
  • 如果在一个函数中,有针。对该变量的 global 语句,它就是全局变量。
  • 如果该变量用于函数中的赋值语句,它就是局部变量。
  • 如果该变量没有用在赋值语句中,它就是全局变量。

示例代码:
sameName3.py

def spam():
    global eggs
    eggs = 'spam'

def bacon():
    eggs = 'bacon'

def ham():
    print(eggs)

eggs = 42
spam()
print(eggs)
  • 理解思路:
    spam() 函数定义中,给 eggs 加了 global,因此 eggs 是全局变量,且被赋值为 ‘spam’,往后使用到变量 eggs 时,它的值都是 ‘spam’,不能被改变。
    所以最后3行程序,只有后2句真正执行,调用 spam() 函数后,eggs 的值为 ‘spam’,打印结果自然为 spam。

执行结果:

glove的python实现 python globa_全局变量_02

  1. 在一个函数中,一个变量要么总是全局变量,要么总是局部变量

函数中的代码没办法先使用名为 eggs 的局部变量,之后又在同一个函数中使用全局 eggs 变量。

如果想在一个函数中修改全局变量中存储的值,就必须对该变量使用 global 语句。

示例代码:
sameName4.py

def spam():
    print(eggs)
    eggs = 'spam local'

eggs = 'global'
spam()
  • 理解思路:
    调用函数 spam() 时,spam() 函数中有针对 eggs 的赋值语句,因此 eggs 是局部变量。但是 print(eggs) 在赋值语句之前,此时局部变量 eggs 并不存在,所以产生错误。

执行结果:

glove的python实现 python globa_全局变量_03


(End)