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个作用域的范围排序是按照从内到外,从小到大排序的。

cf0e982f8458e7664b252d6ea517957d.png

其中:

内置作用域是预先定义好的,在__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也是一种变量。

如下图所示:

44c8cb75ec9a069e16ea0a6f2653c853.png

搜索规则

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值