前言

作用域是指变量的生效范围,例如本地变量、全局变量描述的就是不同的生效范围。

python的变量作用域的规则非常简单,可以说是所有语言中最直观、最容易理解的作用域。

在开始介绍作用域之前,先抛一个问题:

x=1

def f():

x=3

g()

print("f:",x) # 3

def g():

print("g:",x) # 1

f()

print("main:",x) # 1

上面的代码将输出3、1、1。解释参见再述作用域规则。另外,个人建议,本文最后一小节内容尽量理解透彻。

python作用域规则简介

它有4个层次的作用域范围:内部嵌套函数、包含内部嵌套函数的函数自身、全局作用域、内置作用域。上面4个作用域的范围排序是按照从内到外,从小到大排序的。

其中:

内置作用域是预先定义好的,在__builtins__模块中。这些名称主要是一些关键字,例如open、range、quit等

全局作用域是文件级别的,或者说是模块级别的,每个py文件中处于顶层的变量都是全局作用域范围内的变量

本地作用域是函数内部属于本函数的作用范围,因为函数可以嵌套函数,嵌套的内层函数有自身的内层范围

嵌套函数的本地作用域是属于内层函数的范围,不属于外层

所以对于下面这段python代码来说,如果它处于a.py文件中,且没有嵌套在其它函数内:

X=1

def out1(i):

X=2

Y='a'

print(X)

print(i)

def in1(n):

print(n)

print(X,Y)

in1(3)

out1(2)

那么:

处于全局作用域范围的变量有:X、out1

处于out1本地作用域范围的变量有:i、X、Y、in1

处于嵌套在函数out1内部的函数in1的本地作用域范围的变量有:n

注意上面的函数名out1和in1也是一种变量。

如下图所示:

搜索规则

当在某个范围引用某个变量的时候,将从它所在的层次开始搜索变量是否存在,不存在则向外层继续搜索。搜索到了,则立即停止。

例如函数ab()中嵌套了一个函数cd(),cd()中有一个语句print(x),它将首先检查cd()函数的本地作用域内是否有x,如果没有则继续检查外部函数ab()的本地作用域范围内是否有x,如果没有则再次向外搜索全局范围内的变量x,如果还是没有,则继续搜索内置作用域,像”x”这种变量名,在内置作用域范围内是不存在的,所以最终没有搜索到,报错。如果一开始在cd()中就已经找到了变量x,就不会再搜索ab()范围以及更外层的范围。

python代码解释4个作用域_Python中作用域的深入讲解相关推荐

  1. python代码turtle是什么意思_python中turtle库中的Turtle()是什么,有什么用?

    Python的turtle库是一个直观有趣的图形绘制函数库 也是python的标准库之一 下面是我总结的一些turtle库总结 1.画布: (1) turtle.screensize(宽,高,背景颜色 ...

  2. python函数def里面嵌套def,python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?,python嵌套,直接上代码def l(l...

    python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?,python嵌套,直接上代码def l(l 直接上代码def l(list): def d(): return list return d ...

  3. Python基础_第3章_Python中的循环结构

    Python基础_第3章_Python中的循环结构 文章目录 Python基础_第3章_Python中的循环结构 Python中的循环结构 一.回顾分支练习题 1.判断是否为一个合法三角形 2.求世界 ...

  4. Python基础_第5章_Python中的数据序列

    Python基础_第5章_Python中的数据序列 文章目录 Python基础_第5章_Python中的数据序列 Python中的数据序列 一.字典--Python中的==查询==神器 1.为什么需要 ...

  5. python代码说明文档怎么写_Python写完代码怎么用

    Python写完代码怎么用 python运行有两种方式,一种是在python交互式命令行下运行:另一种是使用文本编辑器,在命令行中直接运行. 一.命令行与交互式命令行 首先要搞清楚这个命令行的概念. ...

  6. Python代码 | 文本操作 统计英文文本中,每个字母出现的次数

    Python代码 | 文本操作 统计英文文本中,每个字母出现的次数 # -*- coding: utf-8 -*- # 使用oepn获取文件路径 # path=open("arrogant. ...

  7. python函数中变量的作用域_Python中变量的作用域(variable scope)

    此文目的 此文主要讨论和总结一下,Python中的变量的作用域(variable scope). 目的在于,通过代码,图解,文字描述,使得更加透彻的了解,Python中的变量的作用域: 以避免,在写代 ...

  8. python内置作用域_python中的作用域

    python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的: G:glo ...

  9. python 获取用户的一个输入值_Python中,用于获取用户输入的命令为:

    [多选题]以下关于机器学习说法正确的是? [判断题]Python内置函数sum____用来返回数值型序列中所有元素之和. [单选题]关于自定义函数的下列说法不正确的是: [判断题]Python内置函数 ...

最新文章

  1. extensionloaded php,php中extension_loaded()函数的使用详解
  2. 微信公众号开发Django-网页授权
  3. blog微服务架构代码_聊聊微服务架构
  4. 重学前端学习笔记(八)--JavaScript中的原型和类
  5. 40行中的持久性KeyValue Server和一个可悲的事实
  6. 【codevs1001】舒适的路线,心累的冰茶几
  7. apex您所在的地区目前不提供此物品_《APEX英雄》入门指南传奇篇-命脉
  8. [转]ISO镜像工具PowerISO和UltraISO制作ISO光盘镜像教程
  9. ButterKnife8.5.1最新版本使用详细步骤
  10. VMPlayer安装
  11. 字节跳动的面试算法题,实在太变态了
  12. ORL Character Recgnition
  13. Excel快速填充列
  14. C语言函数之经典例题
  15. html 走马看花还有vb,走马看花的故事
  16. 10分钟入门Pandas(添加一些个人见解)
  17. 前端知识之angular组件库之NG-ZORRO-ANTD结构窥探(一)components
  18. 四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果)
  19. 免费小程序开发平台有哪些功能对零售超市行业有利?
  20. python - alipay sdk 使用 及 注意点

热门文章

  1. 大连交大c语言题库,大连理工大学C语言题库(共12套) .pdf
  2. Springboot-项目启动加载类
  3. 数据拯救单身狗!助攻两性相处的6个小数据
  4. Java之IK 分词器
  5. 【JavaScript速成之路】JavaScript数据类型转换
  6. Serverless 开发前端初尝试
  7. 修改Ubuntu时区
  8. word中的交叉引用
  9. error LNK1123: 转换到 COFF 期间失败
  10. python异常常见处理