Python学习之旅(十一)
Python基础知识(10):函数(Ⅱ)
一、全局变量和局部变量
局部变量:在函数内定义的变量,在函数内使用
全局变量:在函数外定义的变量,在程序任何地方都可以使用
1、全局变量与局部变量同名
这时函数内部只调用局部变量,如果要调用全局变量需要在函数内加一句“global 同名变量”
x=1 #x:全局变量 def test(): global x x=5 #x:局部变量 print(x) return x test()
结果:1
2、一个函数中的内层函数调用外层函数中的变量
内层函数调用外层函数中的变量要在内层函数中加一句“nonlocal 变量”
def demo1(): num=2 def demo2(): nonlocal num num+=1 return demo2() demo1() demo1()
结果:3
3、全局变量一般不可修改,如果函数中想要修改全局变量要加上“global 变量”语句
如果B函数要调用A函数中的c变量,需要在A函数内部加一句“global c”
x=1 def test1(): global x global y y=2 x=x+y print(x) return x def test2(): print(y) print(x) test1() test2()
结果:
3
2
二、函数递归
1、一个函数自己调用自己
2、有明确的结束条件:加if判断
3、无穷递归:运行后它会永远运行下去,进而导致程序崩溃
4、理论上所有递归函数都可以写成循环的方式
计算阶乘
#用循环语句 def fact1(num): result=num for i in range(1,num): result *=i return result print(fact1(3)) #用递归函数 def fact2(n): if n==1: return 1 else: return n*fact2(n-1) print(fact2(3))
结果:6
5、使用递归函数时要防止栈溢出,解决栈溢出的方法是通过尾递归优化
6、匿名函数
用lambda定义,只能有一个表达式,没有函数名
lambda x:x+1等价于def test(x):x+=1 retrun x
(1)可以把匿名函数赋值给一个变量,用该变量调用匿名函数
y=lambda x:x+2 y(1) 结果:3
(2)可以把匿名函数作为返回值返回