Python——变量的作用域
原创声明:本文系博主原创文章,转载及引用请注明出处。
1. 在编程语言中,变量都有一定的作用域,用来限定其生命周期,且不同类型的变量作用域不同。
在Python中解释器引用变量的顺序(优先级)为:当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量
2. 在局部作用域中引用外部变量时(即比当前局部作用域块更大时),如果需要修改局部作用域以外的变量,需要显式声明为global变量。
在python3中引入了nonlocal关键字,用来区分全局变量和非局部变量,即有: global > nonlocal > local
1) global关键字用来在函数或其他局部作用域中使用全局变量。但是如果不修改全局变量也可以不使用global关键字;
2) nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。
3. 在python2中要实现nonlocal的功能,参考:https://blog.csdn.net/chaoguo1234/article/details/81278013
4. 函数定义了本地作用域,而模块定义的是全局作用域。如果想要在函数内定义全局作用域,需要加上global修饰符。
5. 变量名解析:LEGB原则
当在函数中使用未认证的变量名时,Python搜索4个作用域:
- L:本地作用域,函数内部声明但没有使用global的变量;
 - E:上一层结构中def或者lambda的本地作用域;
 - G:全局作用域,函数中使用global声明的变量或在模块层声明的变量
 - B:内置作用域,即python的内置类和函数等。
 
并且在第一处能够找到这个变量名的地方停下来。如果变量名在整个的搜索过程中都没有找到,Python就会报错。
补充说明:
上面的变量规则只适用于简单对象,当出现引用对象的属性时,则有另一套搜索规则:属性引用搜索一个或多个对象,
而不是作用域,并且有可能涉及到所谓的"继承"。
6. python中在模块层面定义的变量(无需global修饰),如果在函数中没有再定义同名变量,可以在函数中当做全局变量使用。
【参考资料】
- https://www.cnblogs.com/z360519549/p/5172020.html
 - https://blog.csdn.net/chaoguo1234/article/details/81278013
 - https://blog.csdn.net/carolzhang8406/article/details/6855525
 - https://www.cnblogs.com/summer-cool/p/3884595.html
 
Python——变量的作用域的更多相关文章
- Python变量的作用域在编译过程中确定
		
为了节省读友的时间,先上结论(对于过程和细节感兴趣的读友可以继续往下阅读,一探究竟): [结论] 1)Python并不是传统意义上的逐行解释型的脚本语言 2)Python变量的作用域在编译过程就已经确 ...
 - Python - 变量的作用域
		
变量作用域 Python能够改变变量作用域的代码段是 def . class . lamda. if/elif/else.try/except/finally.for/while 并不能涉及变量作用域 ...
 - 『无为则无心』Python函数 — 30、Python变量的作用域
		
目录 1.作用于的概念 2.局部变量 3.全局变量 4.变量的查找 5.作用域中可变数据类型变量 6.多函数程序执行流程 1.作用于的概念 变量作用域指的是变量生效的范围,在Python中一共有两种作 ...
 - Python变量的作用域
		
局部变量 局部变量是指在函数内部定义并使用的变量,他只在函数内部有效.即函数内部的名字只在函数运行时才会创建,在函数运行之前或者运行完毕之后,所有的名字就都不存在了.所以,如果在函数外部使用函数内部定 ...
 - python中对变量的作用域LEGB、闭包、装饰器基本理解
		
一.作用域 在Python程序中创建.改变.查找变量名时,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域.python的作用域是静态的,在源代码中变量名被赋值的位置决定了该变量 ...
 - Python学习之变量的作用域
		
学习地址:http://www.jianshu.com/p/17a9d8584530 1.变量作用域LEGB 1.1变量的作用域 在Python程序中创建.改变.查找变量名时,都是在一个保存变量名的空 ...
 - python命名空间、作用域、闭包与传值传引用
		
(以下内容,均基于python3) 最近在看python函数部分,讲到了python的作用域问题,然后又讲了Python的闭包问题. 在做作业的时候,我遇到了几个问题,下面先来看作业. 一. 作业1: ...
 - Python中变量的作用域(variable scope)
		
http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...
 - python学习笔记11(函数二): 参数的传递、变量的作用域
		
一.函数形参和实参的区别 形参全称是形式参数,在用def关键字定义函数时函数名后面括号里的变量称作为形式参数. 实参全称为实际参数,在调用函数时提供的值或者变量称作为实际参数. >>> ...
 
随机推荐
- 如何申请阿里云免费SSL证书(可用于https网站)并下载下来
			
前提条件:你要有阿里云的账号,并且要有一个域名. 注意:阿里云系统也在不断更新,界面以后可能会有稍许变化,但是原理是相通的. 具体步骤: 1.登录到阿里云后台,并选择 “SSL证书(应用安全)” 菜单 ...
 - redis5.0 数据结构与命令
			
1.redis 支持如下5种数据结构 数据结构 说明 简介 String 字符串 key-val Hash 哈希 filed-val 映射表 List 列表 双向链表 Set 集合 element(元 ...
 - Qt Model/View理解(二)---构造model(细心研读,发现超简单,Model就是做三件事:返回行数量、列数量、data如何显示。然后把model与view联系起来即可,两个例子都是如此)good
			
数据是一个集合,显示也是一个集合.例如一篇<西游记>的文章,所有的文字就是数据集合,展示方式就是显示的集合,可以以书本的形式,也可以以电纸书的形式,更可以用视频的方式展现. 下面是将一个二 ...
 - 使用kafka-eagle监控Kafka
			
# 监控kafka集群,开启监控趋势图使用 # 有一个问题,需要在kafka-server-start.sh文件中配置端口,有如下三种办法 # 第一种:复制并修改kafka目录,比如kafka-1,k ...
 - 05docker仓库---搭建本地仓库
			
Docker仓库 仓库(Repository)是集中存放镜像的地方,分别公有仓库和私有仓库. 注册服务器是存放仓库的具体服务器.一个注册服务器上可以有多个仓库,每一个仓库里面可以有多个镜像. eg:仓 ...
 - Scala学习十——特质
			
一.本章要点 类可以实现任意数量的特质 特质可以要求实现它们的类具备特定的字段,方法或超类 和Java接口不同,Scala特质可以提供方法和字段实现 当你将多个特质叠加在一起时,顺序很重要——其方法先 ...
 - C#文本_文件夹操作
			
1我们常用的File类 可以用来对文件的一些操作 下面看代码. using System;using System.Collections.Generic;using System.IO;using ...
 - SpringCloud 配置文件 application.yml和 bootstrap.yml区别
			
前言: SpringBoot默认支持properties和YAML两种格式的配置文件.前者格式简单,但是只支持键值对.如果需要表达列表,最好使用YAML格式.SpringBoot支持自动加载约定名称的 ...
 - 一、maven学习
			
1.下载(maven 自带Tomcat 命令tomcat:run) 2.配置环境变量(cmd测试 mvn -v) 3.配置config 4.命令 mvn clean (删除target目录) ...
 - O054、Attach Volume 操作(Part II)
			
参考https://www.cnblogs.com/CloudMan6/p/5631328.html 计算节点作为iSCSI initiator 访问存储节点 iSCSI Target 上的v ...