python 装饰器 递归函数 记录

  • 第一步:简单实现装饰器
def login(func):
    print("in Login")
    return func

def tv(name):
    print("{name} in TV".format(name = name))

tv = login(tv)
tv('Jack')

# out:
# in Login
# Jack in TV
  • 第二步:同上
    效果相同,但是使用的是@login
def login(func):
    print("in Login")
    return func

@login
def tv(name):
    print("{name} in TV".format(name = name))

#tv = login(tv)
tv('Jack')

# out:
# in Login
# Jack in TV

但是出现问题,注销最后的执行语句仍有输出,原因在于@login的调用,即@login相当于执行了tv = login(tv) 所以才有输出。

def login(func):
    print("in Login")
    return func

@login
def tv(name):
    print("{name} in TV".format(name = name))

#tv = login(tv)
#tv('Jack')

# out:
# in Login

如下调整可解决

def login(func):
    def inner(arg):
        print("in Login")
        # return func
        func(arg)
    return inner
@login
def tv(name):
    print("{name} in TV".format(name = name))

#tv = login(tv)
tv('Jack')

# out:
# in Login
# Jack in TV

简单的递归函数

#!/usr/bin/env python
#递归函数

def calc(num):
    print("Number:",num)
    if num/2 > 1:
        calc(num/2)
        print("After Number:",num/2)
calc(10)

# Number: 10
# Number: 5.0
# Number: 2.5
# Number: 1.25
# After Number: 1.25
# After Number: 2.5
# After Number: 5.0

递归实现斐波那契数列

#   Fibonacci sequence
#   F[n]=F[n-1]+F[n-2](n>=2,F[0]=1,F[1]=1)
#   斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...


fibList = [1,1]

def getFib(fibList):
    print(fibList)
    if fibList[-1] + fibList[-2] < 300:
        fibList.append(fibList[-1] + fibList[-2])
        getFib(fibList)
        pass
    pass

getFib(fibList)
print("[FINAL]:",fibList)


# [1, 1]
# [1, 1, 2]
# [1, 1, 2, 3]
# [1, 1, 2, 3, 5]
# [1, 1, 2, 3, 5, 8]
# [1, 1, 2, 3, 5, 8, 13]
# [1, 1, 2, 3, 5, 8, 13, 21]
# [1, 1, 2, 3, 5, 8, 13, 21, 34]
# [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
# [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
# [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
# [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]
# [FINAL]: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值