零基础学Python:作用域详解
1.作用域介绍
python中的作用域分4种情况:
- L:local,局部作用域,即函数中定义的变量;
- E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
- G:globa,全局变量,就是模块级别定义的变量;
- B:built-in,系统固定模块里面的变量,比如int, bytearray等。 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。
x = int(2.9) # int built-ing_count = 0 # global
def outer():o_count = 1 # enclosingdef inner():i_count = 2 # localprint(o_count)# print(i_count) 找不到inner()
outer()# print(o_count) #找不到
当然,local和enclosing是相对的,enclosing变量相对上层来说也是local。
2 作用域产生
在Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if、try、for等)是不会引入新的作用域的,如下代码:
if 2>1:x = 1
print(x) # 1
这个是没有问题的,if并没有引入一个新的作用域,x仍处在当前作用域中,后面代码可以使用。
def test():x = 2
print(x) # NameError: name 'x2' is not defined
def、class、lambda是可以引入新作用域的。
3 变量的修改
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
x=6
def f2():print(x)x=5
f2()
错误的原因在于print(x)时,解释器会在局部作用域找,会找到x=5(函数已经加载到内存),
但x使用在声明前了,所以报错:
# local variable 'x' referenced before assignment.
#如何证明找到了x=5呢?简单:注释掉x=5,x=6
# 报错为:name 'x' is not defined
同理
x=6
def f2():x+=1 #local variable 'x' referenced before assignment.
f2()
4 global关键字
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了,当修改的变量是在全局作用域(global作用域)上的,就要使用global先声明一下,代码如下:
count = 10
def outer():global countprint(count)count = 100print(count)
outer()
#10
#100
5 nonlocal关键字
global关键字声明的变量必须在全局作用域上,不能嵌套作用域上,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量怎么办呢,这时就需要nonlocal关键字了
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def outer():count = 10def inner():nonlocal countcount = 20print(count)inner()print(count)
outer()
#20
#20
6小结
(1)变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的全局>python内置作用域;
(2)只有模块、类、及函数才能引入新作用域;
(3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量;
(4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用
nonlocal关键字。nonlocal是python3新增的关键字,有了这个 关键字,就能完美的实现闭包了。
零基础学Python:作用域详解相关推荐
- 零基础学python图文版-杭州零基础学python图文版
杭州零基础学python图文版 来源:教育联展网 编辑:佚名 发布时间:2018-09-19 学习python有什么用? 如果你想学Python,或者你刚开始学习Python,那么你可能会问:&quo ...
- python自学需要哪些基础知识-零基础学Python应该学习哪些入门知识及学习步骤安排...
众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python岗位人才缺口高达4 ...
- 零基础学python需要多久-零基础学python大概要多久
Python是目前公认的全球5大流行语言之一,从云计算.大数据到人工智能,Python无处不在,同时Python被誉为神奇的"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使 ...
- 零基础学python需要多久-零基础学Python要多久
原标题:零基础学Python要多久 这几年Python逐渐被越来越多的人熟知,无论是因为工作还是兴趣,很多人都想学习Python.大部分的人都是零基础学习,自然免不了会问零基础学Python要多久这样 ...
- python自学步骤-零基础学Python应该学习哪些入门知识及学习步骤安排
众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python岗位人才缺口高达4 ...
- 编程没基础学python多长时间--零基础学Python,从入门到精通需要多长时间
求一份小甲鱼的<零基础入门学习Python>视频教程 评论 本系列教程面向础的同学,是一个深入浅通俗易懂的Python3视频教程. 适群 完全零基础入门,不需要任何前置知识. 教程概述 前 ...
- 零基础学python全彩版实战答案-零基础学Python(全彩版)
商品描述: 本店出售的图书均是正版二手书,有一些笔记划线,基本是六-九品新左右,基本都没有光盘.介意者请提前咨询客服.本店所有书籍,因买家导致退货退款的,发出运费参照不包邮运费模板由买家承担.如果签收 ...
- python培训一般多久_零基础学python需要多久
一:明确自己的学习目标.不管我们学习什么样的知识,都要对自己的学习目标有一个明确的认识.只有这样才能朝着目标持续的前进,少走弯路,从而在学习的过程中得到提升,享受整个学习的乐趣. 二:基础的Pytho ...
- 学python需要什么基础-零基础学Python应该学习哪些入门知识及学习步骤安排
众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python岗位人才缺口高达4 ...
- 零基础学python要多久-零基础学Python要多久
原标题:零基础学Python要多久 这几年Python逐渐被越来越多的人熟知,无论是因为工作还是兴趣,很多人都想学习Python.大部分的人都是零基础学习,自然免不了会问零基础学Python要多久这样 ...
最新文章
- sql server密码过期,通过SSMS修改策略报错
- 头脑风暴-如何减少软件项目对于人的依赖性。
- LeetCode Valid Perfect Square(是否是平方数)
- 灰度图像归一化到0~255(对比度拉伸)的OpenCV代码实现
- Android 应用程序集成FaceBook 登录及二次封装
- 菜鸟级三层框架(EF+MVC)项目实战之 系列一 EF零基础创建领域模型
- 仿京东首页上侧导航左侧地址栏布局(1)
- php考察新人的题目,PHP面试指南2020-sql考察题
- android java adb命令大全,Android adb命令备份恢复手机信息
- 机器学习Tensorflow基础知识、张量与变量
- qt 窗口自绘、鼠标响应拖动窗口
- 字典(dict)按键(key)和值(value)排序即item()的常用方式
- 辗转相除法(欧几里得算法)求解最大公约数、最小公倍数
- mysql事件创建_mysql 创建事件
- Like rlike在hive中的区别
- 用好这个数据分析工具,BI平台建设少费一半力
- 【转】现代浏览器的工作原理
- 基于stm32智能车的设计(ucosiii)---北京之行
- 【读书笔记】暗时间~
- kafka接口操作topic