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:作用域详解相关推荐

  1. 零基础学python图文版-杭州零基础学python图文版

    杭州零基础学python图文版 来源:教育联展网 编辑:佚名 发布时间:2018-09-19 学习python有什么用? 如果你想学Python,或者你刚开始学习Python,那么你可能会问:&quo ...

  2. python自学需要哪些基础知识-零基础学Python应该学习哪些入门知识及学习步骤安排...

    众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python岗位人才缺口高达4 ...

  3. 零基础学python需要多久-零基础学python大概要多久

    Python是目前公认的全球5大流行语言之一,从云计算.大数据到人工智能,Python无处不在,同时Python被誉为神奇的"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使 ...

  4. 零基础学python需要多久-零基础学Python要多久

    原标题:零基础学Python要多久 这几年Python逐渐被越来越多的人熟知,无论是因为工作还是兴趣,很多人都想学习Python.大部分的人都是零基础学习,自然免不了会问零基础学Python要多久这样 ...

  5. python自学步骤-零基础学Python应该学习哪些入门知识及学习步骤安排

    众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python岗位人才缺口高达4 ...

  6. 编程没基础学python多长时间--零基础学Python,从入门到精通需要多长时间

    求一份小甲鱼的<零基础入门学习Python>视频教程 评论 本系列教程面向础的同学,是一个深入浅通俗易懂的Python3视频教程. 适群 完全零基础入门,不需要任何前置知识. 教程概述 前 ...

  7. 零基础学python全彩版实战答案-零基础学Python(全彩版)

    商品描述: 本店出售的图书均是正版二手书,有一些笔记划线,基本是六-九品新左右,基本都没有光盘.介意者请提前咨询客服.本店所有书籍,因买家导致退货退款的,发出运费参照不包邮运费模板由买家承担.如果签收 ...

  8. python培训一般多久_零基础学python需要多久

    一:明确自己的学习目标.不管我们学习什么样的知识,都要对自己的学习目标有一个明确的认识.只有这样才能朝着目标持续的前进,少走弯路,从而在学习的过程中得到提升,享受整个学习的乐趣. 二:基础的Pytho ...

  9. 学python需要什么基础-零基础学Python应该学习哪些入门知识及学习步骤安排

    众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python岗位人才缺口高达4 ...

  10. 零基础学python要多久-零基础学Python要多久

    原标题:零基础学Python要多久 这几年Python逐渐被越来越多的人熟知,无论是因为工作还是兴趣,很多人都想学习Python.大部分的人都是零基础学习,自然免不了会问零基础学Python要多久这样 ...

最新文章

  1. sql server密码过期,通过SSMS修改策略报错
  2. 头脑风暴-如何减少软件项目对于人的依赖性。
  3. LeetCode Valid Perfect Square(是否是平方数)
  4. 灰度图像归一化到0~255(对比度拉伸)的OpenCV代码实现
  5. Android 应用程序集成FaceBook 登录及二次封装
  6. 菜鸟级三层框架(EF+MVC)项目实战之 系列一 EF零基础创建领域模型
  7. 仿京东首页上侧导航左侧地址栏布局(1)
  8. php考察新人的题目,PHP面试指南2020-sql考察题
  9. android java adb命令大全,Android adb命令备份恢复手机信息
  10. 机器学习Tensorflow基础知识、张量与变量
  11. qt 窗口自绘、鼠标响应拖动窗口
  12. 字典(dict)按键(key)和值(value)排序即item()的常用方式
  13. 辗转相除法(欧几里得算法)求解最大公约数、最小公倍数
  14. mysql事件创建_mysql 创建事件
  15. Like rlike在hive中的区别
  16. 用好这个数据分析工具,BI平台建设少费一半力
  17. 【转】现代浏览器的工作原理
  18. 基于stm32智能车的设计(ucosiii)---北京之行
  19. 【读书笔记】暗时间~
  20. kafka接口操作topic

热门文章

  1. 修改Docker0网桥默认网段
  2. Android事件传递(分发)机制
  3. 12864液晶——读写、划点、划线、汉字、32*16的字符
  4. Linux中的Kdump
  5. 安装eclipse时遇到的问题
  6. 微软Silverlight 3正式版已经出炉
  7. linux查看终端进程,Linux查看进程
  8. Oracle数据库查看用户状态
  9. GAE、SAE与BAE的对比分析
  10. SAP AUTHORITY-CHECK 的使用