关于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在函数内和函数外都能被使用。

关于Python作用域自学总结

本地范围的产生(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仅在函数内使用。在其他地方调用时错误的。

关于Python作用域自学总结

嵌套范围的产生(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作用域自学总结

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)不会向内找,也不会从和它同级的层内找。

关于Python作用域自学总结

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(),就停止向外层查找。

关于Python作用域自学总结

同一作用域内两个名称是独立的,互不干扰。

比如两个同一级别的函数内,可以定义同名的变量,或嵌套同名的函数。


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,作用域
0
投稿

猜你喜欢

  • 教你如何升级SQL Server数据库系统

    2009-01-19 14:42:00
  • Navicat数据存放位置和备份数据库路径设置方式

    2024-01-16 14:32:53
  • PDO取Oracle lob大字段,当数据量太大无法取出的问题的解决办法

    2009-04-30 18:41:00
  • Python实现确认字符串是否包含指定字符串的实例

    2022-04-28 07:40:28
  • CentOS7.6安装MYSQL8.0的步骤详解

    2024-01-17 02:48:28
  • js中火星坐标、百度坐标、WGS84坐标转换实现方法示例

    2024-04-25 13:12:57
  • MySQL多表查询的案例详解

    2024-01-24 13:11:26
  • 设置jupyter中DataFrame的显示限制方式

    2022-09-17 17:28:57
  • 解决python3 pika之连接断开的问题

    2021-09-28 18:40:09
  • MySQL 密码设置

    2024-01-28 11:53:59
  • JavaScript设计模式之代理模式简单实例教程

    2024-04-22 12:54:07
  • Python用内置模块来构建REST服务与RPC服务实战

    2023-05-09 19:32:16
  • JavaScript缓动库

    2009-05-25 12:50:00
  • vue通知提醒消息举例详解

    2024-05-10 14:17:03
  • Python实现文本特征提取的方法详解

    2023-05-09 05:09:19
  • Python爬虫requests库多种用法实例

    2021-01-10 13:31:56
  • 使用python编写批量卸载手机中安装的android应用脚本

    2022-07-04 19:41:27
  • pytorch tensor内所有元素相乘实例

    2023-05-16 15:28:16
  • 解决TensorFlow程序无限制占用GPU的方法

    2021-11-22 13:13:44
  • Python3中的re.findall()方法及re.compile()

    2023-04-12 11:54:47
  • asp之家 网络编程 m.aspxhome.com