python基础——递归函数、闭包、函数引用、装饰器(1)

递归函数

# 含义: 如果一个函数在内部不调用其它函数,而调用它本身,就是递归函数
# 条件:(1)明确的结束条件;(2)每进行一次递归,问题规模要比上一次有所减少;(3)相邻两次递归之间有紧密的联系
# 优点:简洁、逻辑清晰、解体有思路
# 缺点:反复调用自己,消耗内存,效率低
def add(n):
    if n==1:
        return 0
    else:
        return n +add(n-1)
print(add(100))

def funFBN(n):
    if n<=1:
        return n
    return funFBN(n-2)+funFBN(n-1)
print(funFBN(3))

闭包:

# 闭包:在嵌套函数(定义)的前提下,内部函数使用了外部函数的变量,而且外部函数返回了内部函数。把使用了外部函数变量的内部函数称为闭包。

def outer(m):    # 外层函数
    n=10        # 外层函数的局部变量
    def inner():    # 内层函数
        print(m+n)    # 内层函数使用外层函数的局部变量
    return inner # 外层函数返回值是内层函数的函数名
print(outer(7))  # 返回内层函数的内存地址,返回函数而非函数的执行结果(即不加小括号)
# 写法一
outer(7)()
# 写法二   
ot = outer(7)
ot()

闭包变量

# 每次开启内函数,都在使用同一份闭包变量
# 总结:使用闭包的过程中,一旦外函数被调用一次,返回了内函数的引用,虽然每次调用内函数,会开启一个函数,执行后消亡;但闭包变量实际上只有一份,那次开始内函数都在使用一份闭包变量
def outer(m):
    print("outer()函数中的值",m)
    def inner(n):
        print("inner()函数中的值:",n)
        return m+n
    return inner
ot=outer(10)    # 调用外函数,给outer()传值
print(ot(20))   # 调用内函数,给inner()传值。第一次调用
print(id(ot(20)))
print(ot(40))   # 第二次调用内函数
print(id(ot(40)))

函数调用和函数引用

# 函数调用: 加小括号;
# 函数引用:函数所在位置的引用,内存地址就是引用
# 判断两个变量是否是一个值的引用:
a=1
print(id(a))
a=2
print(id(a))
print(id(2))

装饰器

# 装饰器:本质上是一个函数,在让其他函数不做修改变动的前提下,增加额外功能,其返回值是一个函数对象。
# 满足要求:(1)不修改原程序或函数的代码;(2)不改变函数或程序调用方法
posted @ 2026-04-17 16:41  MyEngine  阅读(5)  评论(0)    收藏  举报