• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

如何快速掌握Python函数的作用域?

python 搞java代码 3年前 (2022-05-21) 17次浏览 已收录 0个评论

之前小编跟大家在文章内提过关于作用域,部分小伙伴要求小编在详细讲解这方面的内容,于是小编不负众望,搜罗了超级多的内容,希望给大家制作一个非常深刻,便于理解的内容,下面小编就着重针对这部分,给大家整理了以下步骤。关于作用域

Python的作用域可以分为四种:

L (Local) 局部作用域

E (Enclosing) 闭包函数外的函数中

G (Global) 全局作用域

B (Built-in) 内建作用域

影响变量/函数作用范围的有

函数:def 或 lambda

类:class

关键字:global noglobal

文件:*py

推导式:[],{},()等,仅限Py3.x中,Py2.x会出现变量泄露。

1、赋值在前,引用在后

# ------同作用域内------
name = "MING"
print(name)
 
# ------不同作用域内------
name = "MING"
def main():
print(name)

www#gaodaima.com来源gaodai#ma#com搞@代~码网搞代码

2、引用在前,赋值在后(同一作用域内)

print(name)
name = "MING"
# UnboundLocalError: local variable 'name' referenced before assignment

3、赋值在低层,引用在高层

# L -> E -> G -> B
# 从左到右,由低层到高层
def main():
    name = "MING"
print(name)
# NameError: name 'name' is not defined

关于改变作用域

变量的作用域,与其定义(或赋值)的位置有关,但不是绝对相关。因为我们可以在某种程度上去改变向上的作用范围。

关键字:global将 局部变量 变为全局变量

关键字:nonlocal可以在闭包函数中,引用并使用闭包外部函数的变量(非全局的噢)

global好理解,这里只讲下nonlocal。

先来看个例子

def deco():
    age = 10
    def wrapper():
        age += 1
    return wrapper
 
deco()()

运行一下,会报错:

# UnboundLocalError: local variable 'age' referenced before assignment

但是这样就OK

def deco():
    age = 10
    def wrapper():
        nonlocal age
        age += 1
    return wrapper
 
deco()()
# 输出:11

其实,你如果不使用 +=、-=等一类的操作,不加nonlocal也没有关系。这就展示了闭包的特性。

def deco():
    age = 10
    def wrapper():
        print(age)
    return wrapper
 
deco()()
# 输出:10

以上是关于python作用域内容整合集锦,大家可以了解下哦~另外,作用域在大家的项目实践里,是经常能遇到的事情,因此,掌握好作用域也至关重要,多看两遍以上内容,很容易就掌握住了。

来源:搞代码网:原文地址:https://www.gaodaima.com


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何快速掌握Python函数的作用域?
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址