作用域:顾名思义,作用的范围。

如果你是自学者,而且已经进军到函数这一部分了,那么就应当了解下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

结束语以上就是关于,作用域的一些规则。个人认为,尽管作用域是独立的,但避免写同名的函数,和变量。可起的名字很多,何必给自己找麻烦。以上就是关于,作用域的一些规则。个人认为,尽管作用域是独立的,但避免写同名的函数,和变量。可起的名字很多,何必给自己找麻烦。

python作用域总结_关于Python作用域自学总结相关推荐

  1. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  2. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  3. spark python入门教程_你是如何自学 Python 的?

    我是机械类专业出身,现在在一家NGO组织从事数据分析方面的工作,主要的工具是Python.SQL.Spark.平时会写一些分析用的脚本,偶尔会写写爬虫,跑跑算法,应该说Python算是我吃饭的家伙,很 ...

  4. python培训班-Python培训机构_高品质Python线下开发培训班推荐-黑马程序员

    Python编程基础基础班1 课时:15天技术点:97项测验:2次学习方式:线下面授 学习目标 1.掌握Python开发环境基本配置|2.掌握运算符.表达式.流程控制语句.数组等的使用|3.掌握字符串 ...

  5. 使用python预测基金_使用python先知3 1创建预测

    使用python预测基金 This tutorial was created to democratize data science for business users (i.e., minimiz ...

  6. python 字节流分段_由Python历史「解密」Python底层逻辑

    一次纯粹的hacking Python的作者,Guido von Rossum,荷兰人.1982年,Guido从阿姆斯特丹大学获得了数学和计算机硕士学位.尽管,他算得上是一位数学家,但他更加享受计算机 ...

  7. 上海 python量化 培训_上海python量化投资课程

    Linux基本安装.使用.配置和生产开发环境配置 Python语言概述及发展,搭建Python多系统开发环境 Python内置数据结构.类型.字符及编码,流程控制 列表和元组,集合和字典精讲.文件操作 ...

  8. python秒表项目_上海python秒表课程作业

    Linux基本安装.使用.配置和生产开发环境配置 Python语言概述及发展,搭建Python多系统开发环境 Python内置数据结构.类型.字符及编码,流程控制 列表和元组,集合和字典精讲.文件操作 ...

  9. 机械专业与python的联系_使用python进行机械设计计算

    分析 这一过程的核心在于机械设计,python的编程的用途有两个 1.当作计算器,缺点在于没有casio计算器那样的自然显示,优点在于可以反复调用,使用lambda函数简化运算 2.当设计需要修改时, ...

  10. python集群_使用Python集群文档

    python集群 Natural Language Processing has made huge advancements in the last years. Currently, variou ...

最新文章

  1. Netflix是这样炼成的:谁构建,谁运维
  2. python开始之路—基础中的基础
  3. javascript 将毫秒值转换为天-小时-分钟-秒钟
  4. 这个0day 影响启用 Sandbox 的多数 Windows 10 版本
  5. oracle表的操作简述
  6. R:读取大的TXT文件
  7. guide, manual, tutorial之间的区别
  8. oracle 误删表数据,还原到某个时间点
  9. excel中的if函数使用方法
  10. Win7怎么设置自动关机?Win7设置自动关机的方法
  11. matlab中多元线性回归regress函数精确剖析(附实例代码)
  12. 90行代码轻松实现!结合 Whisper + Stable-diffusion 的语音生成图像任务!
  13. 联想笔记本打字不显示选字框
  14. 分享qq,wx,qqZone,weibo基于vue
  15. pci总线定时协议_PCI协议
  16. 有没有这样的后浪,月薪3000
  17. 【Linux系统】Linux的系统目录结构
  18. python工资管理系统课程设计_工资管理系统 课程设计 总结报告
  19. /dev下面存在设备,却open 失败的问题open: No such device or address
  20. K8S系列:Deployment更新、锁定、解锁、回滚版本

热门文章

  1. linux设置开机自启动的方式总结
  2. @Resource 注解和 @Autowired 注解的对比
  3. C++_ 多态与虚函数介绍
  4. C++_模板全特化、偏特化
  5. 论文笔记_S2D.64_2021_MonoRec_动态环境下单目移动相机的半监督稠密重建
  6. 基于深度学习的单目图像深度估计
  7. Python将矩阵格式数据在Console全部显示
  8. 图像/视频超分之降质过程
  9. Notepad++一键编译运行(Python、Java、C++)
  10. Binary XML file line #23: Error inflating class android.widget.TextView