网络工程师学Python-作用域

举报
wljslmz 发表于 2023/04/20 18:00:32 2023/04/20
【摘要】 在 Python 中,每个变量都有一个定义它的作用域,这是指变量在程序中可见的范围。作用域决定了在哪里可以访问变量以及在何处可以更改它。在本文中,我们将介绍 Python 中的作用域规则以及如何在程序中使用它们。 全局作用域在 Python 中,定义在最外层的变量属于全局作用域。全局作用域包含了整个程序。如果我们定义一个变量在全局作用域内,那么它可以在程序的任何地方使用。下面是一个例子:x ...

在 Python 中,每个变量都有一个定义它的作用域,这是指变量在程序中可见的范围。作用域决定了在哪里可以访问变量以及在何处可以更改它。在本文中,我们将介绍 Python 中的作用域规则以及如何在程序中使用它们。

全局作用域

在 Python 中,定义在最外层的变量属于全局作用域。全局作用域包含了整个程序。如果我们定义一个变量在全局作用域内,那么它可以在程序的任何地方使用。

下面是一个例子:

x = 5

def print_x():
    print(x)

print_x()  # 输出 5

在这个例子中,变量 x 定义在程序的最外层,所以它属于全局作用域。函数 print_x() 可以访问全局变量 x 并将其打印到控制台上。

局部作用域

在 Python 中,每个函数都有自己的作用域,称为局部作用域。局部作用域只包含定义在函数内部的变量。这意味着函数外部定义的变量对于函数内部是不可见的。

下面是一个例子:

def print_x():
    x = 5
    print(x)

print_x()  # 输出 5

print(x)   # NameError: name 'x' is not defined

在这个例子中,变量 x 定义在 print_x() 函数内部,所以它属于局部作用域。这意味着它只能在函数内部使用。如果我们尝试在函数外部访问变量 x,Python 将引发 NameError 异常。

嵌套作用域

在 Python 中,函数可以嵌套在其他函数中。嵌套函数可以访问其父函数的变量,这些变量属于嵌套作用域。

下面是一个例子:

def outer():
    x = 5
    
    def inner():
        print(x)
    
    inner()

outer()  # 输出 5

在这个例子中,函数 inner() 嵌套在函数 outer() 中。函数 inner() 可以访问其父函数 outer() 中定义的变量 x。这是因为变量 x 属于嵌套作用域。

global 关键字

有时我们希望在函数内部修改全局变量。为了实现这一点,我们可以使用 global 关键字。

下面是一个例子:

x = 5

def change_x():
    global x
    x = 10

print(x)      # 输出 5
change_x()
print(x)      # 输出 10

在这个例子中,我们定义了一个全局变量 x,然后编写了一个函数 change_x(),它将全局变量 x 的值修改为 10。为了实现这一点,我们在函数内部使用 global 关键字来告诉 Python 我们希望修改全局变量 x 的值。

nonlocal 关键字

类似地,如果我们在一个嵌套函数中想要修改其父函数中的变量,可以使用 nonlocal 关键字。

下面是一个例子:

def outer():
    x = 5
    
    def inner():
        nonlocal x
        x = 10
    
    inner()
    print(x)   # 输出 10
outer()

在这个例子中,我们定义了一个外部函数 outer() 和一个嵌套函数 inner()。变量 x 被定义在外部函数 outer() 中。嵌套函数 inner() 使用 nonlocal 关键字来告诉 Python 我们想要修改其父函数 outer() 中的变量 x。

总结

Python 中有三种作用域:全局作用域、局部作用域和嵌套作用域。在函数内部,我们可以使用 global 和 nonlocal 关键字来访问和修改全局变量和父函数中的变量。了解作用域的概念和规则对于编写清晰、可维护的 Python 代码至关重要。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。