2.24 全局变量与局部变量

全局变量在函数之外声明,不定义在某个函数内部。它的作用范围是从定义的这条语句开始直到整个程序结束。

局部变量在函数内容声明,它的作用范围也仅仅是在这个函数内部。

函数如果有参数的话,参数也是局部变量,不需要在函数内部重复定义。

全局变量可以不需要任何特殊的声明即能读取,但如果想要修改全局变量的值,就必须在函数开始之处用global关键字进行声明,否则Python会将此变量按照新的局部变量处理。

比如下图这个例子:

我们先给number赋初值为5,它并没有定义在某个函数内部,所以是个全局变量。然后我们定义了一个函数func1。

第一个5是调用func1()所输出的,虽然在func1中并没有定义一个叫number的局部变量,但由于有一个同名的全局变量,所以全局变量的访问不管是在外面还是在某个函数内部都是有效的,输出的是5。后一句的print(number)指代的也是这个全局变量number,输出的也是5。

然后我们又定义了一个函数func2:

在这个func2中,“number = 3”相当于在这个函数内部重新定义了一个局部变量number,并且输出了它的值,也就是3。一旦离开了这个函数,这个局部变量也就不复存在。所以里面的赋值不会影响外面的number,我们在最后输出的还是这个全局变量number,也就是5。

我们再来看第三个例子,我们定义了一个函数func3:

在func3内部声明了一个全局变量number。global是一个关键词,说明这个number不是func3中的局部变量,而是外面的一个全局变量。这时给number重新赋值为3,并且输出它的值。所以在调用func3()时,会影响外面的number,因此最后输出的时候,number的值为3。

最后我们再强调一点,函数参数也是局部变量,可以直接在函数内部使用,不需要在函数内部重复定义。

比如我们刚刚求n阶乘的例子:

我们并没有在函数中定义n,但是我们在for循环中用到了n。当我们调用fact(5)的时候,5就作为形式参数赋值给了n,n就起到局部变量的作用,它的作用范围也仅仅是在这个函数内部。

> 示例代码

1.py
number = 5
 
def func1():
    print (number)
    
func1()
print(number)
2.py
number = 5

def func2():
    number = 3
    print (number)

func2()
print(number)
3.py
number = 5

def func3():
    global number
    number = 3
    print (number)

func3()
print(number)
4.py
# 定义一个求 n!的函数
def fact(n):
    result=1
    for i in range(1,n+1):
        result=result*i
    return result

Last updated