关于Python作用域自学总结
作者:laozhang 发布时间:2023-11-02 12:19:53
作用域:顾名思义,作用的范围。
如果你是自学者,而且已经进军到函数这一部分了,那么就应当了解下Python的作用域。否则你可能会像我一样,总是对一个变量名同时存在函数内和函数外且有不同值搞的晕头转向。
在这里就总结一下,在本人的知识范围内所了解到的作用域是什么样的,LEGB规则到底规定了什么。
全局范围的产生(global):
我们创建一个xxx.py文件,就是一个模块,这时一个作用域就产生了。这个范围是整个模块,称作Global ,全局范围。
例如:创建一个文件demo.py。
声明一个变量,bd="百度"。
变量bd就是个全局变量。
bd="百度"
if True:
print(bd)
#==============
def function_1():
print(bd)
function_1()
bd在函数内和函数外都能被使用。
本地范围的产生(Local):
当函数被定义后,一个属于这个函数的小天地就产生了。可以在内部定义变量,也可以在它的内部嵌套函数。这个范围就是局部范围。在局部范围的变量只能局部范围内使用。
def locals():
x=100
print("local_x = ",x+20)
locals()
输出:local_x = 120
如果在全局范围内打印x就会报错:
def locals():
x=100
print("local_x = ",x+20
print(x)
提示名字错误:x没有被定义(NameError: name 'x' is not defined)
所以局部变量x仅在函数内使用。在其他地方调用时错误的。
嵌套范围的产生(Enclosed ):
这个范围在函数嵌套时产生,介于全局和局部范围之间。
比如一个函数嵌套了另一个函数,这个函数的作用域就是嵌套的范围,被嵌套的就是本地范围,如果有更多层的嵌套,那就有多层的嵌套范围。
x=20
def local_out():
y=30
def local_in():
z=40
print('本地变量z:',z)
print('嵌套变量y:',y)
local_in()
print("全局变量x:",x)
local_out()
输出:
全局变量x: 20
嵌套变量y: 30
本地变量z: 40
python的内建函数:(Built-in)内建函数是天生就有的,你在那个作用域都可以以调用。用的最多的莫过于print()关于内建函数你可以在python的documentation内找到。python的内建函数:(Built-in)内建函数是天生就有的,你在那个作用域都可以以调用。用的最多的莫过于print()关于内建函数你可以在python的documentation内找到。
LEGB规则:
LEGB是Local,Enclosed ,Global,Built-in首字母的缩写联合。
它们的范围是有小到大是这样排列的,Local----Enclosed----Global----Built-in,而且上层套下层:
2、python脚本运行时找名称的顺序:
1)从它本身所在的层级找名;
2)如果没有就向外层找;
3)不会向内找,也不会从和它同级的层内找。
3、如果在某个层内找到,就停止寻找,即使外面有同名的。
def max(s):
m=min(s)
return m
numList=[1,2,4,5,7,8,9]
maxNun=max(numList)
print('最大值=',maxNun)
输出:最大值= 1
在全局范围内,调用max()函数,因为有个自定义函数和内建的函数max()同名,所以它调用了,自定义的函数max(),就停止向外层查找。
同一作用域内两个名称是独立的,互不干扰。
比如两个同一级别的函数内,可以定义同名的变量,或嵌套同名的函数。
a=3
def add_1():
a=30
print('add_1的 a =',a)
def add_2():
a = 3000
print('add_2的 a =', a)
add_1()
add_2()
print('全局变量的 a =', a)
输出:
add_1的 a = 30
add_2的 a = 3000
全局变量的 a = 3
结束语以上就是关于,作用域的一些规则。个人认为,尽管作用域是独立的,但避免写同名的函数,和变量。可起的名字很多,何必给自己找麻烦。以上就是关于,作用域的一些规则。个人认为,尽管作用域是独立的,但避免写同名的函数,和变量。可起的名字很多,何必给自己找麻烦。


猜你喜欢
- 前言虽然标题是全站,但目前只做了等级 top 100 直播间的全天弹幕收集。弹幕收集系统基于之前的B 站直播弹幕姬 Python 版修改而来
- 前言……最近在学习yolo1、yolo2和yolo3,写这篇博客主要是为了让自己对yolo2的结
- 每天一个JS 小demo之新建文件夹。主要知识点:DOM方法的综合运用<!DOCTYPE html><html lang=
- 1. File->Setting 打开如下所示的对话框,可以在Editor->General->Font下设置
- llama Index是什么《零开始带你入门人工智能系列》第一篇:还用什么chatpdf,让llama Index 帮你训练pdf。Llam
- 一、偏好资源的积累利用DreamWeaver 4制作网页会应用到许多各种类型的要素,比如色彩、图片、模板、脚本等。利用站点资源面板将这些东东
- python窃取摄像头照片源码+获取授权码方法+py打包成exe教你用python做一个属于自己的窃取摄像头照片的软件。需要安装python
- 前言在学习操作系统的时候,我们应该都学习过临界区、互斥锁这些概念,用于在并发环境下保证状态的正确性。比如在秒杀时,100 个用户同时抢 10
- 以下代码涉及 Vue 2.0 及 ES6 语法。目标纯 javascrpit 实现,兼容ie9及以上浏览器,在本地做好文件格式、长宽、大小的
- 先来回顾一下栈和队列的基本概念:相同点:从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。不同点:栈(
- 一、说明自己一是想跟上潮流二是习惯于直接干三是没有人可以请教,由于这三点经常搞得要死要活。之前只简单看过没写过Diango,没看过Djang
- 1.函数的声明定义//func关键字//getStudent函数名//(id int, classId int) 参数列表//(name s
- jQuery.post( url, [data], [callback], [type]
- 一、前言:Thrift 是一种接口描述语言和二进制通信协议。以前也没接触过,最近有个项目需要建立自动化测试,这个项目之间的微服务都是通过 T
- Vue3新属性:CSS 中的 v-bind()写在前面:本文主要介绍Vue3中的新增的v-bind()的常用使用方式,主要包括在css,le
- 1. 新建.py文件# pip install kafka-pythonfrom kafka import KafkaConsumerimp
- osql 工具是一个 Microsoft Windows 32 命令提示符工具,您可以使用它运行 Transact-SQL 语句和脚本文件。
- 在定义图结构之前不用加入gpu:0,只有在session中计算之前在加入,否则的话会提示不能使用gpu保存模型等问题。 with  
- PDO::rollBackPDO::rollBack — 回滚一个事务(PHP 5 >= 5.1.0, PECL pdo >=
- xlwt与xlrd只能针对xls格式的excel进行操作,如果想对xlsx格式进行操作请使用openpyxl模板对excel进行操作xlwt