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

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

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

lL (Local) 局部作用域

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

lG (Global) 全局作用域

lB (Built-in) 内建作用域

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

l函数:def 或 lambda

l类:class

l关键字:global noglobal

l文件:*py

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

1、赋值在前,引用在后# ------同作用域内------

name = "MING"

print(name)

# ------不同作用域内------

name = "MING"

def main():

print(name)

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

关于改变作用域

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

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

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

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

先来看个例子def deco():

age = 10

def wrapper():

age  = 1

return wrapper

deco()()

运行一下,会报错:# UnboundLocalError: local variable 'age' referenced before assignment

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值