Python函数的作用域是什么

Python函数的作用域是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!

公司主营业务:网站设计、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出闽清免费做网站回馈大家。

关于作用域

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

l L (Local) 局部作用域

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

l G (Global) 全局作用域

l B (Built-in) 内建作用域

变量/函数 的查找顺序:L –> E –> G –>B

意思是,在局部找不到的,便去局部外的局部作用域找(例如 闭包),再找不到的就去全局作业域里找,再找不到就去内建作业域中找。

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

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函数的作用域是什么大概了解了吗?希望文章内容对大家有所帮助。如果想了解更多相关文章内容,欢迎关注创新互联行业资讯频道。


分享标题:Python函数的作用域是什么
分享地址:http://ybzwz.com/article/gihhej.html