python函数局部变量、全局变量、递归知识点总结
函数局部变量全局变量及其作用域
#简单类型(intstr等)变量的局部变量与全局变量及其作用域的关系
name="xxx"#第一级顶头定义的变量都称为全局变量,其作用域从变量定义的位置开始到此程序结束
defPrint_Name():
print("namebeforechange:",name)
#由于name在此函数之前已经被定义为全局变量,此处函数读取变量name是读取的全局变量name“xxx”,函数内部就不能再定义其同名局部变量,否则无法区分变量为局部变量还是全局变量
#name="yyy"#此语句放开以后会报错:IndentationError:unindentdoesnotmatchanyouterindentationlevel
Print_Name()
defChange_Name():
name="yyy"#函数内部首先定义全局变量的同名局部变量,则整个函数内部操作的为局部变量(一个与全局变量同名的临时变量)
print("nameafterchangeis",name)
Change_Name()#yyy实际输出的是局部变量的值
print("globalnameis",name)#xxx此处访问的是全局变量,因为此print语句不是在Change_Name内部。
#函数内部需要强制对全局变量进行修改,使用global关键字
defChange_global_Name():
globalname
print("namebeforechangeis:",name)
name="yyy"
Change_global_Name()#xxx修改前的全局变量
print("globalnameis:",name)#yyy此处由于函数内强制声明name为global变量,整个函数内部可以对global进行操作
#复杂数据类型列表集合字典等复杂数据结构如果函数外部定义了函数里面是可以不用global声明也操作的是全局变量,没有局部变量一说了
names=['111','222','333']
defChange_Names():
names[0]="444"
print("infunctionnames:",names)
Change_Names()#infunctionnames:['444','222','333']
print("globalnames:",names)#infunctionnames:['444','222','333']对于复杂的数据类型,函数内直接操作全局变量,不会再生成局部变量
递归
#函数内部可以调用其它函数,如果函数在内部调用自己就被称为递归函数 defHalf_fun(n): print(n) ifn<2: returnn Half_fun(n/2) Half_fun(100) #递归特性:1、必须有一个明确的结束条件2、每次递归调用问题复杂度需要相比上次简化3、递归会占用大量内存
以上实例很简单,大家可以本次测试下,感谢你的阅读和对毛票票的支持。