python代码解释4个作用域_Python中作用域的深入讲解
前言
作用域是指变量的生效范围,例如本地变量、全局变量描述的就是不同的生效范围。
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中作用域的深入讲解相关推荐
- python代码turtle是什么意思_python中turtle库中的Turtle()是什么,有什么用?
Python的turtle库是一个直观有趣的图形绘制函数库 也是python的标准库之一 下面是我总结的一些turtle库总结 1.画布: (1) turtle.screensize(宽,高,背景颜色 ...
- python函数def里面嵌套def,python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?,python嵌套,直接上代码def l(l...
python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?,python嵌套,直接上代码def l(l 直接上代码def l(list): def d(): return list return d ...
- Python基础_第3章_Python中的循环结构
Python基础_第3章_Python中的循环结构 文章目录 Python基础_第3章_Python中的循环结构 Python中的循环结构 一.回顾分支练习题 1.判断是否为一个合法三角形 2.求世界 ...
- Python基础_第5章_Python中的数据序列
Python基础_第5章_Python中的数据序列 文章目录 Python基础_第5章_Python中的数据序列 Python中的数据序列 一.字典--Python中的==查询==神器 1.为什么需要 ...
- python代码说明文档怎么写_Python写完代码怎么用
Python写完代码怎么用 python运行有两种方式,一种是在python交互式命令行下运行:另一种是使用文本编辑器,在命令行中直接运行. 一.命令行与交互式命令行 首先要搞清楚这个命令行的概念. ...
- Python代码 | 文本操作 统计英文文本中,每个字母出现的次数
Python代码 | 文本操作 统计英文文本中,每个字母出现的次数 # -*- coding: utf-8 -*- # 使用oepn获取文件路径 # path=open("arrogant. ...
- python函数中变量的作用域_Python中变量的作用域(variable scope)
此文目的 此文主要讨论和总结一下,Python中的变量的作用域(variable scope). 目的在于,通过代码,图解,文字描述,使得更加透彻的了解,Python中的变量的作用域: 以避免,在写代 ...
- python内置作用域_python中的作用域
python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的: G:glo ...
- python 获取用户的一个输入值_Python中,用于获取用户输入的命令为:
[多选题]以下关于机器学习说法正确的是? [判断题]Python内置函数sum____用来返回数值型序列中所有元素之和. [单选题]关于自定义函数的下列说法不正确的是: [判断题]Python内置函数 ...
最新文章
- extensionloaded php,php中extension_loaded()函数的使用详解
- 微信公众号开发Django-网页授权
- blog微服务架构代码_聊聊微服务架构
- 重学前端学习笔记(八)--JavaScript中的原型和类
- 40行中的持久性KeyValue Server和一个可悲的事实
- 【codevs1001】舒适的路线,心累的冰茶几
- apex您所在的地区目前不提供此物品_《APEX英雄》入门指南传奇篇-命脉
- [转]ISO镜像工具PowerISO和UltraISO制作ISO光盘镜像教程
- ButterKnife8.5.1最新版本使用详细步骤
- VMPlayer安装
- 字节跳动的面试算法题,实在太变态了
- ORL Character Recgnition
- Excel快速填充列
- C语言函数之经典例题
- html 走马看花还有vb,走马看花的故事
- 10分钟入门Pandas(添加一些个人见解)
- 前端知识之angular组件库之NG-ZORRO-ANTD结构窥探(一)components
- 四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果)
- 免费小程序开发平台有哪些功能对零售超市行业有利?
- python - alipay sdk 使用 及 注意点