python——函数嵌套,递归,闭包

#函数进阶
#函数变量与作用域
#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()


发布了13 篇原创文章 · 获赞 0 · 访问量 220

猜你喜欢

转载自blog.csdn.net/hcsshui/article/details/104402859