python中的global是什么意思_Python中的global关键字,你了解吗?
前言
今天来了解下 Python 中的 global 关键字。
Python变量的作用域
实战案例演示之前,先要了解下 Python 的作用域。
曾经在闭包的文章 《python小课堂26 - 进阶必修之闭包(一)》中,我写过一段关于作用域的介绍,复制下:
Python变量的作用域一共有4种,分别是:
L (Local) 局部作用域E (Enclosing) 闭包函数外的函数中G (Global) 全局作用域B (Built-in) 内建作用域 以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。
看完概念,接下来看看实例,请自行思考后再看答案。
Python中的global关键字,你了解吗?-1.jpg (27.72 KB, 下载次数: 0)
2020-11-11 12:48 上传
Python中的global关键字,你了解吗?-2.jpg (24.67 KB, 下载次数: 0)
2020-11-11 12:48 上传
Python中的global关键字,你了解吗?-3.jpg (28.35 KB, 下载次数: 0)
2020-11-11 12:48 上传
Python中的global关键字,你了解吗?-4.jpg (23.71 KB, 下载次数: 0)
2020-11-11 12:48 上传
结论:
实例一: 即使变量同名,优先引用的是局部变量。
实例二 & 实例三: 闭包的情况,如果内部函数没有局部变量,则会优先引用闭包的环境变量。
实例四: 引用全局变量。
global关键字
先来解释下,Global 中文含义:全球的,全面的。
global warming:全球变暖。
上面的作用域四个案例如果看明白了,那我们继续。
如果现在有个问题是这样的:
有个变量 x=5 ,现需要让多个函数共享并且在函数内引用它,请用代码实现下。
有的小伙伴可能已经想到,这题的答案不就是上面的实例四吗?
在 func_a 和 func_b 函数中,你们看到外面的 x = 5 已经作为全局变量在这两个函数中分别成功打印。
对于全局变量来说,既然能函数体内直接引用,并且程序没有报错,那为什么还要用 global 关键字?
别急,继续往下看。
现在在重新声明一个 func_c 函数,并且对这个 x 进行加 1 的操作。你觉得会打印什么结果?
Python中的global关键字,你了解吗?-6.jpg (43.8 KB, 下载次数: 1)
2020-11-11 12:48 上传
可以看到已经报错了 ,UnboundLocalError,错误代码第 9 行 x = x+1。
在这个例子中设置的 x=5 属于全局变量,而在函数内部中没有对 x 的定义。
根据 Python 访问局部变量和全局变量的规则:当搜索一个变量的时候,Python 先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那样 Python 就会像上面的案例中介绍的作用域范围逐层寻找。
最终在全局变量中找这个变量,如果找不到则抛出 UnboundLocalError 异常。
但你会想,明明已经在全局变量中找到同名变量了,怎么还是报错?
因为内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改的时候,此时 Python 会认为它是一个局部变量,而函数中并没有 x 的定义和赋值,所以报错。
global 关键字为解决此问题而生,在函数 func_c中,显示地告诉解释器 x 为全局变量,然后会在函数外面寻找 x 的定义,执行完 x = x + 1 后,x 依然是全局变量。
Python中的global关键字,你了解吗?-7.jpg (31.23 KB, 下载次数: 0)
2020-11-11 12:48 上传
结语
好了,这就是本期的内容,关于 global 的相关内容,搞明白作用域,弄清同名变量赋值时的机制,在未来的编程道路中就不会出错啦。
Python中的global关键字,你了解吗?-8.jpg (61.76 KB, 下载次数: 0)
2020-11-11 12:48 上传
如果你有什么想说的,不懂得,欢迎评论区留言!~
python中的global是什么意思_Python中的global关键字,你了解吗?相关推荐
- python中字典和集合的区别_Python中字典和集合学习小结
映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元组等 包含可变对象的列表. ...
- python 函数参数前面两个星号_Python中参数前面一个星号两个星号(*参数,**参数)起什么作用呢?...
摘要: 下文讲述Python中参数前面一个星号两个星号的功能分享,如下所示: 在Python语言中,我们经常看见参数前面 加上一个星号或两个星号 那么这些写法到底起什么作用呢? 下文将一一道来,如下所 ...
- python异常处理时所使用的保留字_Python中,下列哪个保留字不用于异常处理______________。_学小易找答案...
[单选题]维持细胞生存所必需的最基本的基因是 ( ) [单选题]从体细胞克隆高等哺乳动物的成功说明了 ( ) [单选题]细胞决定与细胞分化的关系是 ( ) [多选题]一种类型的分化细胞转变成另-种类型 ...
- python中的列表是指针吗_Python中的指针——到底指什么(二)
在 Python中的指针--到底指什么(一) 中,我们知道在Python的一切都是对象,变量其实是指向PyObject对象的名称,对不可变变量进行操作后,名称指向了另一个PyObject. 扣留对象 ...
- python中遍历字典判断是否存在_python中如何判断值在不在字典中
python中判断值在不在字典中的方法:我们可以通过for循环来进行判断.在python中for循环可以遍历任何序列的项目.语法结构:[for iterating_var in sequence:st ...
- python里删除range里的数字_python中range函数与列表中删除元素
一.range函数使用 range(1,5) 代表从1到4(不包含5),结果为:1,2,3,4 ,默认步长为1 range(1,5,2) 结果为:1, 3 (同样不包含5) ,步长为2 ...
- python语言中print函数的作用_python中如何使用print函数
Python中print语句 1.逗号分隔符 在Python中print语句可根据sys.stdout中包含的文件生成输出,它接受一个逗号分隔的对象表,如下实例:x = 1 y = 2 z = 3 p ...
- python 变量赋值是引用和拷贝_Python 中变量赋值传递时的引用和拷贝
曾经看到这样一个问题,一个字典中的元素是列表,将这个列表元素赋值给一个变量,然后修改这个列表中元素的值,结果发现,字典中那个列表也同样修改了.那个问题如下: dict = {'a':[1,2,3,4, ...
- python中sys模块是什么内容_python中sys模块是做什么用的
python中的sys是提供了一系列有关python运行环境的变量和函数的模块,如sys.argv函数实现从程序外部向程序传递参数:sys.platform函数用于获取当前系统平台. sys模块提供了 ...
- python中转义符的用法大全_Python中的各种转义符\n\r\t
Python中属性和描述符的简单使用 Python的描述符和属性是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过google和阅读源码,现将自己的理解和 ...
最新文章
- 关于运行robot framework 报错解决方法,ModuleNotFoundError: No module named 'robot'
- java抽象类的构造函数如何定义_我们可以在Java的抽象类中定义参数化的构造函数吗?...
- ORA-28056:Writing audit records to Windows Even...
- nginx/tengine设置响应头中的cookie属性
- MVC RC2中关于HtmlHelper给DropDownList设置初始选中值的问题
- linux上验证cudnn是否安装成功_deepin15.7中安装tensorflow+cuda9.0+cudnn7的步骤
- 多线程下不能用truncate吗_那么多的化妆品,怀孕后都不能用了吗?
- 百度测试新搜索结果页面 改进灵感来自谷歌?
- 一步步学敏捷开发:6、Scrum的3种工件
- RocketMQ的一些基本概念和RocketMQ特性的讲解
- C3P0与DBCP数据库连接池的区别,阿里的Druid数据源配置入门
- vue.js--遇到的一些错误
- Android中UI线程与后台线程交互设计的5种方法
- 【路径规划】基于matlab遗传算法多车辆路径规划【含Matlab源码 704期】
- 升讯威周报与工时统计系统 V3
- java指定浏览器_java程序中指定某个浏览器打开的实现方法
- shopee虾皮跨境电商怎么样,虾皮跨境电商的优势和劣势
- Ubuntu 18.04 ibus安装配置中文拼音输入法
- 解决 filezilla 连接服务器失败问题
- Java程序员必看经典书籍,助你早日打通任督二脉,Java菜鸟教程视频