python3作用域
python3的作用域和C/C++有所不同
1、 按照L -> E -> G -> B的顺序查找变量
L (Local) 局部作用域
E (Enclosing) 函数外上一层的函数中
G (Global) 全局作用域
B (Built-in) 内建作用域
2、只有在模块module,类class,函数def、lambda中才可以改变作用域,其他情况不可。
例1
def func(): x= 100 print(x) func() print(x)
报错,因为第二个print(x)找不到变量x
例2
for i in range(4):x = i print(x)
正确,因为for语句并不能隔离作用域
例3
x= 1 def func():print xx= 2 print func()
报错
UnboundLocalError: local variable 'x' referenced before assignment
,因为虽然python是逐行解释的。但每个函数属于一个区块,这个区块范围是一次性解释的,并不会读一行忘记一行,而是一直读,读完整个区块再解释。python读完整个fun区块后,检测到定义了x,所以x是局部变量。但是print x的时候会去寻找局部变量x,此时x还没被赋值,所以报错。详见python3代码块例4
x= 1 def func():x += 1return x print func()
报错
UnboundLocalError: local variable 'x' referenced before assignment
,因为x+=1实际上是x=x+1,函数内部只要是赋值操作就表示声明为局部变量,所以x是局部变量。所以出现了为赋值前就使用x,所以报错例5
x= "abc" def func1():print(x) def func2():x= "def"func1() func2()
输出abc,函数的定义位置决定了它所看见的变量,所以当调用func1()时,func1出于全局域中,会输出abc。
例6
x=3 def func1():x=4def func2():print(x)x=5func2() func1()
输出5,因为func2定义位置决定了看见的是func1的x,而在调用func2之前,func1的x已经赋值为5,故输出5
例7
x=3 def func1():x=4def func2(x=x):x += 3print(x)x=5func2() func1()
输出7,这里使用了默认参数,而默认参数是在生成函数而非调用函数时查找的,这里x=x,在执行到def的时候就引用为4了,但是其他参数,是在函数调用时查找的。
3、nonlocal默认将内层函数中的变量修饰为上一层函数的作用域范围,如果上一层函数中不存在该变量,则修饰为上上层、上上上层直到顶层函数,但不能修饰为全局作用域范围。
4、global可以声明一个或多个变量为全局变量,多个变量使用逗号隔开,也可以声明事先不存在的变量为全局变量,但nonlocal修饰的变量必须已经存在于上层或上上层(或更多层)函数,不能只存在于全局。
参考链接:https://www.cnblogs.com/f-ck-need-u/p/9925021.html#python%E4%BD%9C%E7%94%A8%E5%9F%9F%E8%A7%84%E5%88%99%E7%AE%80%E4%BB%8B
python3作用域相关推荐
- python3代码块
代码块可以使得一段python代码作为一个单元.一个整体执行.以下是 官方手册 的描述. 所以,有以下几种类型的代码块: 模块文件是一个代码块 函数体是一个代码块 class的定义是一个代码块 交互式 ...
- python3初学者注意事项
1.python3没有字符类型,一个字符就是长度为1的字符串 2.python3字符串可以从右往左以-1索引,C++不支持 3.python3有列表[],元组(),集合{},字典{key:value} ...
- Python3 完全教程
Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k.相对于 Python 的早期版本,这是一个较大的升级.为了不带入过多的累赘,Python 3.0 在设计的时候没有考 ...
- python语言入门w-python3入门之类
在面向对象的语言中,类是最重要的一环,python自然拥有类这个机制.python的类机制,与C++,java的区别不是很大,类的大多数的重要特性都被沿用了,一样可以多态,抽象,封装: python3 ...
- Python课程学习笔记 上
笔记目录 学前准备 Python解释器安装包 下载 安装 Pycharm 下载 常用的快捷键 Python程序执行机制 语法基础 注释和中文乱码 变量 数据类型 运算符 数值运算符 复合运算符 比较运 ...
- Python3 局部变量与全局变量作用域
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author:sking 4 #Python3 局部变量与全局变量作用域 5 6 name01 ...
- 浅谈Python3函数命名空间与作用域
日期:2020年1月23日 作者:Commas 注释:前一章节讲述了命名空间和作用域的知识,现在我们来谈一谈Python3函数的命名空间吧. 如果您想了解更多有关Python的知识,那么请点<我 ...
- python3 获取 当前作用域 全部参数的内置方法 locals()
在写程序时,经常会碰见传递过多参数的情况.先看一个例子 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author: wxnacy(wxnacy@gma ...
- [Python3] 020 借函数,谈一谈变量的作用域
目录 1. 概述 2. 分类 3. 变量的作用范围 少废话,上例子 4. 将局部变量提升为全局变量 少废话,上例子 5. 内建函数 globals() 与 locals() 少废话,上例子 6. 邪恶 ...
最新文章
- 【opencv4】opencv视频教程 C++ 7、手动调整图像亮度与对比度 g(i, j) = αf(i, j) + β(点操作与邻域操作概念)
- 分享18道Java基础面试笔试题
- SAP License:搞砸SAP项目的3种方法
- python 玩公众号游戏_从零基础开始,用python手把手教你玩跳一跳小游戏,直接打出高分...
- 寄存器之通用寄存器(一)
- 【Django 2021年最新版教程33】Jmeter如何进行性能测试
- opengl工具库glfw一 创建窗口
- C# NamePipe使用小结
- Adobe Flash Player v26.0.0.126发布:请尽快更新
- COPRA-for-AutoCAD 2005
- figure字体 latex_Latex字体大小和样式
- word2010转html默认页面视图,word2010中,切换到页面视图方式的组合键
- ctf解密图片得到flag_图片隐藏flag怎么找
- 基于单片机的防盗报警监控系统设计(#0401)
- 《Python机器学习及实践:从零开始通往Kaggle竞赛之路》第4章 实战篇 学习笔记(三)4.3IMDB影评得分估计总结
- Codeforces Round #612 (Div. 2) C. Garland题解
- 三种方式实现echarts树图的背景图片设置
- 第二届“梧桐杯”复赛开战在即,邀您观赛!
- 【软考中级】软件设计师学习笔记
- [算法竞赛入门]第一章_算法概述
热门文章
- python3菜鸟教程-总算理解python3中文入门教程
- 在电脑上安装python的步骤-python中pygame安装过程(超级详细)
- python可以干嘛知乎-Python到底可以干什么?老男孩Python视频教程
- python快速入门答案-Python 快速入门笔记(1):简介
- python安装modify setup选哪-python 之禅 import this
- python比c语言好学吗-python和c语言哪个更适合初学者
- python发明者叫什么-近 50 年来最具影响力的 10 种编程语言,都是谁发明的?
- Teamviewer连接服务器显示不能够全屏 或 向日葵连接服务器不能够全屏 或 Teamviewer只显示一个640x480的分辨率选项
- 用Python提取解析pdf文档中内容
- protobuf3在php中的使用