python递归函数使用装饰器

(分钟前 更新) 108 3538

最新回答

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

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

tv login(tv)
tv(&39;Jack&39;)

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(&39;Jack&39;)

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(&39;Jack&39;)

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(&39;Jack&39;)

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]
三生皆缘 2024-05-22

扩展回答

热门问答

装修专题

首页 >  python递归函数使用装饰器

其他人还看了

页面运行时间: 0.04549503326416 秒