刚开始的var='Hi'是定义了一个全局变量,当你在函数内部定义了一个与全局变量同名的局部变量,这个变量的值不会影响全局变量的值,除非你用global声明了这个变量就是全局变量
- var = ' Hi '#这是全局变量
- def fun1():
-
- global var #声明函数里的这个var就是之前声明的var,全局变量
- var = ' Baby ' #此时的var就是全局的var,所以全局var的值变为'Baby'
- return fun2(var) #将var的值作为fun2()的参数进行处理并返回
- def fun2(var): #这里的var是只是fun2()参数的一个名字,就算你把fun2()的全部var换成x,也不影响最后结果
- var += 'I love you'
- fun3(var) #fun3()也是个带参函数,跟fun2一样,这里不会影响全局变量var的值
- return var
- def fun3(var):
- var += ' 小甲鱼 '
- print(fun1())
复制代码
fun3(var)不会影响var的值主要是因为全局var是一个不可变类型,不可变类型还包括int,float等,可变类型为序列,如列表,元组,字典
python规定不可变类型值作为函数参数时,其本身不会被修改,只会提供值进行运输,你最后打印一次var,会发现fun2()也没有修改var的值