当前位置: 代码网 > it编程>前端脚本>Python > Python函数作用域示例详解

Python函数作用域示例详解

2025年07月01日 Python 我要评论
一、legb 规则legb 规则是 python 查找变量的顺序,即当在代码中引用一个变量时,python 会按照以下顺序在不同的作用域中查找该变量:local(局部作用域):函数内部定义的变量和参数

一、legb 规则

legb 规则是 python 查找变量的顺序,即当在代码中引用一个变量时,python 会按照以下顺序在不同的作用域中查找该变量:

  • local(局部作用域):函数内部定义的变量和参数,只在函数内部可见。
  • enclosing(闭包作用域):嵌套函数中,内部函数可以访问外部函数的局部变量,这些外部函数的局部变量所在的作用域就是闭包作用域。
  • global(全局作用域):在模块级别定义的变量和函数,在整个模块内都可以访问。
  • built - in(内置作用域):python 内置的函数和变量,如 printlen 等,在任何地方都可以访问。

二、作用域实例

2.1 局部作用域(local)

局部作用域是指函数内部的作用域,函数内部定义的变量和参数只能在该函数内部访问。

def test_function():
    # 局部变量
    local_variable = 10
    print(local_variable)
test_function()
# 以下代码会报错,因为 local_variable 是局部变量,在函数外部无法访问
# print(local_variable)

2.2 闭包作用域(enclosing)

当一个函数嵌套在另一个函数内部,并且内部函数引用了外部函数的局部变量时,就形成了闭包。内部函数可以访问外部函数的局部变量,即使外部函数已经执行完毕。

def outer_function():
    # 外部函数的局部变量
    enclosing_variable = 20
    def inner_function():
        # 内部函数可以访问外部函数的局部变量
        print(enclosing_variable + 1)
    return inner_function
closure = outer_function()
closure()

2.3 全局作用域(global)

全局作用域是指在模块级别定义的变量和函数,在整个模块内都可以访问。可以使用 global 关键字在函数内部修改全局变量。

# 全局变量
def modify_global():
    global global_variable  # 申明修改全局变量
    global_variable = 50  # 函数内部修改全局变量
    return global_variable
print(global_variable)
print(modify_global())

2.4 内置作用域(built - in)

内置作用域包含了 python 内置的函数和变量,如 printlenint 等,这些函数和变量在任何地方都可以直接使用。

# 使用内置函数 len
my_list = [1, 2, 3]
length = len(my_list)
print(length)

2.5 作用域的嵌套和查找顺序

当在代码中引用一个变量时,python 会按照 legb 规则从内到外依次查找该变量。如果在局部作用域中找到了该变量,则使用该变量;如果没有找到,则继续在闭包作用域中查找,以此类推。

# 全局变量
x = 10
def outer():
    # 闭包作用域变量
    x = 20
    def inner():
        # 局部变量
        x = 30
        print(x)  # 输出 30
    inner()
    print(x)  # 输出 20
outer()
print(x)  # 输出 10
  • 在上述代码中,inner 函数内部的 print(x) 会先在局部作用域中查找 x,找到局部变量 x = 30 并输出;
  • outer 函数内部的 print(x) 会在闭包作用域中查找 x,输出闭包作用域变量 x = 20
  • 最后,在全局作用域中调用 print(x) 会输出全局变量 x = 10

到此这篇关于【python】python系列之函数作用域的文章就介绍到这了,更多相关python函数作用域内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com