知行编程网知行编程网  2022-12-11 17:30 知行编程网 隐藏边栏  1 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于如何快速掌握Python函数的作用域?的相关知识,包括函数形式参数的作用域,以及python的作用域有哪几种这些编程知识,希望对大家有参考作用。


之前小编在文中提到了范围,有小伙伴要求小编详细解释一下这方面的内容,所以小编不负众望,收集了很多内容。我希望为你做一个非常深入和容易理解的。下面小编就着重介绍这部分内容,为大家整理以下步骤。



关于




作用域



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


l


L (Local) 局部作用域


l


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


l


G (Global) 全局作用域


l


B (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




但是这样就

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

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享