1.全局变量与局部变量
这两种变量与其它语言中的变量一样,全局变量简言之就是在整个代码中都可以使用的变量,它的作用域是整个函数,而局部变量的作用域有限,往往就是在一块代码区域。
需要值得注意的是:如果只是在函数中调用全局变量的值而不改变其值,那是完全没有问题的,但是如果要在函数中改变全局变量的值而不进行特殊处理的话,Python语言对于这种情况的处理是会在自动生成一个与被调用的全局变量名称一样的局部变量,也就是屏蔽了全局变量,对该变量的操作不会影响全局变量的值。(虽然看着好像是改变了一样)
例如下面程序,虽然在函数中改变了count的值,但是在函数体外打印的count的值仍是5.
count=5def Myfun(): count=10 print(count) Myfun() print(count)
如果说非要在函数内部修改全局变量的值的话,可以在函数内部使用关键字 global来修饰该变量,这样就是表示该操作是对于全局变量的操作,而不是生成一个与全局变量相同的局部变量。
print("======使用global之后的变量======") count=5def Myfun(): global count#声明与赋值不能一块进行 count=10 print(count) Myfun() print(count)
2.内嵌(内部)函数
简言之,内嵌函数就是在函数内部定义的函数
值得注意的是:内部函数的调用只能在其外部的函数调用,而在之外无法调用。也就是说,在谁的内部,谁才有权利使用。
print("======内部函数的使用======")def fun1(): print("fun1()正在被调用") def fun2(): print("fun2()正在被调用") fun2() fun1()
3.闭包
闭包就是内嵌函数调用其外部函数的参数。
这种函数在调用的时候需要格外注意。
def funX(x): def funY(y): return x*y return funY print(funX(5)(8))
4.闭包中的变量问题
下面这段代码执行起来就会报错。因为在内嵌函数的内部调用外部函数的参数,而参数x对于Fun2()这个函数来说是一个全局变量,由于屏蔽作用,造成函数出错。
def Fun1(): x=5 def Fun2(): x*=x return x return Fun2()#Fun1()
解决上述问题的办法有两个:
一是使用非栈的数据结构来解决问题
二是使用nonlocal关键字来解决
#一种解决办法就是使用非栈存储,使用序列等来存储def Fun1(): x=[5] def Fun2(): x[0]*=x[0] return x[0] return Fun2() print(Fun1(),"\n")#在一种解决办法就是使用nonlocal关键字def Fun3(): x=5 def Fun4(): nonlocal x x*=x return x return Fun4() print(Fun3())
关于函数中的变量问题得需要仔细琢磨琢磨,毕竟与之前学的有些差异。
以上就是Python零基础入门之七变量与内置函数的内容,更多相关内容请关注PHP中文网(www.php.cn)!