Python进阶之路 global语句

global语句

如果需要在一个函数内修改全局变量,就使用global语句。如果在函数的顶部有global eggs这样的代码,它就告诉Python,"在这个函数中"eggs指的是全局变量,所以不要用这个名字创建一个局部变量。输入以下代码:

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

eggs = 'global'
spam()
print(eggs)

输出结果:

spam

因为eggs在spam()的顶部被声明为global❶,所以当eggs被赋值为’spam’时❷,赋值发生在全局作用域的eggs上。没有创建局部eggs变量。

有4条法则,来区分一个变量是处于局部作用域还是全局作用域:

  • 如果变量在全局作用域中使用(即在所有函数之外),它就总是全局变量。
  • 如果在一个函数中,有针对该变量的global语句,它就是全局变量。
  • 否则,如果该变量用于函数中的赋值语句,它就是局部变量。
  • 但是,如果该变量没有用在赋值语句中,它就是全局变量。

为了更好的理解这些法则,这里有一个例子程序。

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


def bacon():
    eggs = 'bacon'def ham():
    print(eggs)❸


eggs = 42
spam()
print(eggs)

输出结果:

spam

在spam()函数中,eggs是全局eggs变量,因为在函数的开始处,有针对eggs变量的global语句❶。在bacon()中,eggs是局部变量,因为在该函数中有针对它的赋值语句❷。在ham()中❸,eggs是全局变量,因为在这个函数中,既没有赋值语句,也没有针对它的global语句。

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

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

在一个函数中,如果试图在局部变量赋值之前就使用它,像下面的程序这样,Python就会报错。

def spam():
    print(eggs)
    eggs = 'spam local'❶
    
eggs = 'global'❷
spam()

发生这个错误是因为,Python看到spam()函数中有针对eggs的赋值语句❶,因此认为eggs变量是局部变量。但是因为print(eggs)的执行在eggs赋值之前,局部变量eggs不存在。Python不会退回到全局eggs变量❷。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值