Python核心技术——不可或缺的自定义函数(下)

我们在上一节(Python核心技术——不可或缺的自定义函数(中))中主要了解了函数中参数默认值有无的情况和函数的嵌套,本次我们来学习函数变量作用域。

述(最多18字

什么是局部变量

Python语言函数变量作用域和其他语言类似,如果变量在函数内部定义称为局部变量,只在函数内部有效。对于局部变量,在函数执行完后,局部变量会被回收。

我们来看一个例子:

在read_file()函数内部定义了file变量,这个变量只在read_file函数里有效,在函数外面无法访问。

在看一个例子,加深印象:

注意:

test1()函数和test2()函数中的a都是局部变量,在test1()函数中局部变量a,其值有原先的200修改为300,其最终输出的为300,其原先的值被覆盖了。

test1()函数和test2()函数中的a都是局部变量,两个函数名不同,但是各种中局部变量都是a,test1()函数中变量a的值改变,不会影响test2()函数中变量a的值。

什么是全局变量

既然Python语言有局部变量,那么肯定有对应的全局变量,全局变量作用域为函数内外都有效,换而言之,一个变量,既可以在函数内使用,也可以在函数外或者其他函数内使用的变量为全局变量。

看一个例子:

其中min_value和max_value为全局变量,可以在任意地方访问,函数内外都可以。但是不能在函数内部随意改变全局变量的值。我们来看一个例子:

这是由于Python默认函数内部的变量为局部变量,但是发现局部变量max_value没有声明,导致无法执行相关语句。如果要执行,我们一定要在函数内部改变全局变量的值,加上global声明:

其中global为关键字,用于告诉Python解释器,函数内部的变量 max_value,就是之前定义的全局变量,而不是新的全局变量,也不是局部变量。这样程序可以在函数内部访问全局变量的同时修改其值。

注意:如果遇到函数内部局部变量和全局变量同名时,函数内部的局部变量会覆盖全局变量(就近原则)

函数 validation_check() 内部,定义了和全局变量同名的局部变量 max_value,那么max_value在函数内部的值应该是 3 而不是 1 。

嵌套函数的外部函数变量修改

对于嵌套函数,内部函数可以访问外部函数定义的变量,但是不能修改外部函数定义的变量。如果要进行修改,必须加上nonlocal关键字。

若不加 nonlocal 关键字,内部函数的变量和外部函数变量同名时,会发生什么事情呢?

类似函数内部的局部变量和全局变量同名,其内部函数变量会覆盖外部函数的变量。

小结

局部变量:在一个函数中定义的变量,只能在本函数中用

全局变量:在函数外定义的变量,可以在所有的函数中使用

就近原则当全局变量的名字和局部变量的名字相同,那么使用的是局部变量的

全局变量能够在所有的函数中进行访问如果在函数中修改全局变量,那么就需要使用 global 进行声明,否则包错。

#python#

举报/反馈