【python基础】python中global关键字介绍

转载自:https://zhuanlan.zhihu.com/p/111284408
仅作学习记录

一、python变量的作用域

Python变量的作用域一共有4种,分别是:

  • L (Local) 局部作用域
  • E (Enclosing) 闭包函数外的函数中
  • G (Global) 全局作用域
  • B (Built-in) 内建作用域

L –> E –> G –>B 的规则查找,即:
在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找

代码示例

在这里插入图片描述
实例一: 即使变量同名,优先引用的是局部变量。

在这里插入图片描述
在这里插入图片描述
实例二 & 实例三: 闭包的情况,如果内部函数没有局部变量,则会优先引用闭包的环境变量。

在这里插入图片描述
实例四: 引用全局变量。

二、global关键字

先来解释下,Global 中文含义:全球的,全面的。

上面的作用域四个案例如果看明白了,那我们继续。

如果现在有个问题是这样的:
有个变量 x=5 ,现需要让多个函数共享并且在函数内引用它,请用代码实现下。

有的小伙伴可能已经想到,这题的答案不就是上面的实例四吗?
在 func_a 和 func_b 函数中,你们看到外面的 x = 5 已经作为全局变量在这两个函数中分别成功打印。

对于全局变量来说,既然能函数体内直接引用,并且程序没有报错,那为什么还要用 global 关键字?

别急,继续往下看。

现在在重新声明一个 func_c 函数,并且对这个 x 进行加 1 的操作。你觉得会打印什么结果?
在这里插入图片描述
可以看到已经报错了 ,UnboundLocalError,错误代码第 9 行 x = x+1。

在这个例子中设置的 x=5 属于全局变量,而在函数内部中没有对 x 的定义

根据 Python 访问局部变量和全局变量的规则:当搜索一个变量的时候,Python 先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那样 Python 就会像上面的案例中介绍的作用域范围逐层寻找。

最终在全局变量中找这个变量,如果找不到则抛出 UnboundLocalError 异常。

但你会想,明明已经在全局变量中找到同名变量了,怎么还是报错?

因为 内部函数 有引用 外部函数的同名变量或者全局变量,并且对这个变量有修改的时候,此时 Python 会认为它是一个局部变量,而函数中并没有 x 的定义和赋值,所以报错。

global 关键字为解决此问题而生,在函数 func_c中,显式地告诉解释器 x 为全局变量,然后会在函数外面寻找 x 的定义,执行完 x = x + 1 后,x 依然是全局变量
在这里插入图片描述

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值