欢迎访问宙启技术站
智能推送

Python中函数的作用域和变量可见性是怎么样的?

发布时间:2023-05-20 04:40:53

Python中函数的作用域和变量可见性是很重要的知识点,对于刚开始学习Python的人来说是必须掌握的。Python的作用域和变量可见性分为全局变量和局部变量,全局变量指在函数外定义的变量,而局部变量则是在函数内部定义的变量,下面我们就来详细看一下Python中函数的作用域和变量可见性。

1、Python函数作用域及命名空间

Python定义了四种不同的作用域,分别是:

    1.1 L(Local):局部作用域

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

    1.3 G(Global):全局作用域

    1.4 B(Built-in):内建作用域

下面我们详细来看一下这四种作用域的含义。

1.1 局部作用域(L)

局部作用域是Python中最小的作用域,它只在本函数内起作用,在函数体内定义的变量只有在函数内部可见,外部无法访问。如果在函数体内和函数外部使用相同变量名,则在函数体内的变量是该变量名的一个新实例。

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

闭包函数外的函数中表示的是指在函数内部定义一个函数,并且这个内部函数使用外围函数的变量时,这个外围函数就成为了闭包函数。在闭包函数中,内部函数可以访问外部函数中的变量,但不能修改外部函数中的变量。

1.3 全局作用域(G)

在Python程序中定义的变量,一般都是全局的,如果找不到一个变量的定义,Python会默认在全局作用域中查找这个变量。全局作用域里的变量可以在当前模块的任意位置被访问和修改。

1.4 内建作用域(B)

内建作用域是Python内置的一些变量,例如常用的float、int、print等。这些变量在任何模块中都可以访问。

Python的作用域决定了变量在哪个作用域中可用,以及何时可以访问它们。

2、Python变量可见性

在Python中,变量作用域的可见性受到一些规则的保护。如果在函数内部定义了一个变量,则该变量会默认作为局部变量,如果引用并修改全局变量,则需要使用global声明。下面我们看一下Python中变量可见性的几个例子:

2.1 局部变量

在函数体内部定义的变量只有在函数内部可见,外部无法访问。如果在函数体内和函数外部使用相同的变量名,则在函数体内的变量是该变量名的一个新实例。

def test():

    x = 10

    print(x)

    

test()         # 10

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

这里定义了一个函数test(),函数内部定义了一个变量x,当在函数内部调用x时,输出的值为10,如果在函数外调用x,则会出现NameError的错误提示。

2.2 全局变量

当在函数内部访问外部定义的全局变量时,默认情况下,Python会认为该变量是在局部作用域之外定义的全局变量,因此Python会优先使用函数内的局部变量。

x = 10

def test():

    print(x)

    

test()       # 10

在这个例子中,定义了一个全局变量x,在函数内部调用了该变量,输出的结果为10。

2.3 修改全局变量

当我们在函数内部修改全局变量时,我们需要使用global关键字来声明变量为全局变量。

x = 10

def test():

    global x

    x += 5

    print(x)

    

test()       # 15

print(x)     # 15

在这个例子中,我们在函数内部修改了全局变量x的值,并使用global关键字声明x是一个全局变量。当在函数内部使用x时,输出的值为15。