2.24 全局变量与局部变量
Last updated
Was this helpful?
Last updated
Was this helpful?
全局变量在函数之外声明,不定义在某个函数内部。它的作用范围是从定义的这条语句开始直到整个程序结束。
局部变量在函数内容声明,它的作用范围也仅仅是在这个函数内部。
函数如果有参数的话,参数也是局部变量,不需要在函数内部重复定义。
全局变量可以不需要任何特殊的声明即能读取,但如果想要修改全局变量的值,就必须在函数开始之处用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就起到局部变量的作用,它的作用范围也仅仅是在这个函数内部。