局部变量和全局变量

 

 

一、定义

局部变量:就是在函数内部定义的变量。这个变量只能在定义这个变量的函数内部使用。

全局变量:就是在函数外部定义的变量。(注意是定义在所有函数的外部)。所有的函数内部都可以使用这个变量。

 

 

 

 

二、局部变量的使用

1. 函数外部不能使用局部变量。【例1】【例2】

2. 函数执行时,执行到创建局部变量的地方,局部变量才会创建。当函数执行完后,局部变量也就死亡了。只有在生命周期内才能使用这个变量。

3.  不同的函数内部,可以定义相同的局部变量。彼此之间没有任何关系。【例3】

 

例1:函数外部不能使用局部变量

局部变量和全局变量

 

结果:

局部变量和全局变量

 

例2:函数外部不能使用局部变量

局部变量和全局变量

 

结果:

局部变量和全局变量

 

 

例3:

局部变量和全局变量

 

结果:

局部变量和全局变量

 

三、全局变量的使用

1. 全局变量就是在函数外部定义的变量。【例1】

2. Python有一个限制:在函数内部不允许改变全局变量的值。【例2】

    如果确实需要在函数内部对全局变量进行修改,可以使用global关键字声明一下。【例3】

3. 要注意全局变量定义的位置。虽然也可以定义在函数下方【例4】,但是有时候容易出错【例5】,最好是把所有的全局变量统一放在所有函数的上方进行定义。【例6】

    在实际代码开发的时候,最好这样写:

    局部变量和全局变量

 

4. 全局变量的命名建议

    如果全局变量起名字的时候很普通,那么在函数内部起名字的时候有可能也起了这个名字,这个时候就会混淆。所以有的公司规定,在给全局变量起名字的时候加上"g_"或"gl_"的前缀。【例7】

 

 

 

 

 

例1:

局部变量和全局变量

 

结果:

局部变量和全局变量

 

 

例2:在函数内部不能修改全局变量的值

局部变量和全局变量

 

 

结果:

局部变量和全局变量

 

执行完fun2()之后,输出的值还是10。说明fun1()中的语句并不是改变全局变量num的。

 

 

例3:使用global关键字

局部变量和全局变量

 

结果:

局部变量和全局变量

 

执行完fun2()之后,输出的值是20。说明fun1()中的语句改变了全局变量num的值。

 

 

 

例4:代码可以成功执行么?

局部变量和全局变量

 

结果:

局部变量和全局变量

 

fun1()中是认识num1的。为什么呢?

先执行第1句。

然后到第3句,发现是个函数定义,就会跳过。不执行。

再执行第9行,现在有了num1了。

在执行第11行。会调用fun1()

进入fun1()之后,执行第5句的时候因为已经有全局变量num,所以输出。执行第6句的时候,因为已经有全局变量num1,所以会输出。

 

所以上面的程序是可以成功执行的。

 

 

 

例5:代码可以成功执行么?

局部变量和全局变量

 

结果:

局部变量和全局变量

 

 

当执行到12行的时候,已经知道num和num1这两个变量了。但是还不知道num2这个变量。所以调用fun1()时,找不到num2。

 

 

例6:

局部变量和全局变量

 

结果:

局部变量和全局变量

 

 

例7:推荐给全局变量这么起名字,这样函数里面的变量名就不可能重了。

局部变量和全局变量

 

结果:

局部变量和全局变量