#函数进阶
#函数变量与作用域
#1、局部变量
def fun():
a = 1
print(a)
fun()
#2、全局变量
a = 12
def func():
print(a+23)
func()
print(a)
#3、global关键字(当内部作用域想修改外部用途域的变量时,要用global关键字)
a = 12
def func():
global a
a = 200
print(a+23)
func()
print(a)
num = 2
def sum(arg1,arg2):
num = arg1+arg2
print('这是局部变量:'+str(num))
return num
num = sum(23,56)
print(str(num)+':是全局变量')
#函数嵌套和调用
任意一个函数定义完成 之后,如果没有通过名字调用它,就永远不会执行
对嵌套函数进行封闭隐藏,可以避免代码和功能的重复,以达到灵活简洁的目的
1、函数的嵌套:分为内函数和外函数,在函数内部还有函数
2、函数嵌套调用:在一个函数中调用了另外一个函数
#函数的嵌套
def func1():
print('这是外部函数')
def func2():
print('这是内部函数')
func2()#内部函数不可以直接调用,往前与func1()齐平的时候才可以调用
func1()
def func1():
print('这是第一个函数')
def func2():
print('这是第二个函数')
func1()
func2()
#函数的递归调用(一个函数内部调用自己,调用的次数过多会导致栈溢出)
#1、必须有一个明确的结束条件
#2、进入更深一层递归的时候,问题规模应比上次有所减少
#3、相邻两次调用有紧密的联系,前一次要为后一次估准备:通常上次输出是下次输入
def sum(num):
print(num)
if num == 1:
return sum
else:
sum(num - 1)
sum(3)
#递归求sum = n+(n-1)+(n-2)+(n-3)...+1的和
#递归调用的次数过多会导致栈溢出
#方式一:
def sum(n):
if n > 0:
return n + sum(n-1)
else:
return 0
new_sum = sum(10)
print(new_sum)
#方式二:
def sum(n):
if n == 1:
return 1
else:
return n + sum(n-1)
new_sum = sum(11)
print(new_sum)
#递归求n!
def fac(n):
if n == 1:
return 1
else:
return n*fac(n-1)
new_sum = fac(15)
print(new_sum)
#三元运算
a = 12
b = 23
if a > b:
print(a)
else:
print(b)
a,b = 12,23
print(a) if a > b else print(b)
#匿名函数
#变量名= lambda 参数列表:表达式
func = lambda:1==3
f = func()
print(f)
func2 = lambda x,y,z:x+y+z
f = func2(12,23,34)
print(f)
func3 = lambda x,y:y if x > y else x
f = func3(12,34)
print(f)
#函数闭包:
#step1:嵌套函数
def outer():
b = 20
print(b)
def inner():
a = 10
print(a)
inner()
outer()
#step2:返回函数
def outer():
b = 20
print(b)
def inner():
a = 10
print(a)
return inner
test = outer()#return的inner函数赋给了test,test()就可以调用
test()
#step3:闭包
def outer():
b = 20
print(b)
def inner():
a = 10 + b
print(a)
return inner
test = outer()
test()
python——函数嵌套,递归,闭包
最新推荐文章于 2022-12-29 17:01:48 发布