python – Decorator使函数返回None
发布时间:2020-12-20 11:56:46 所属栏目:Python 来源:网络整理
导读:我建立了两个函数来找到素数因子.一个版本比大数字上的另一个版本慢.我想评估这两个函数的运行时间.为此,我建立了一个装饰器来评估黯然失色的时间. 因为我插入了装饰器,我的两个函数返回None.我的代码有什么问题? import mathimport timedef time_usage(fun
我建立了两个函数来找到素数因子.一个版本比大数字上的另一个版本慢.我想评估这两个函数的运行时间.为此,我建立了一个装饰器来评估黯然失色的时间.
因为我插入了装饰器,我的两个函数返回None.我的代码有什么问题? import math import time def time_usage(func): def wrapper(*args,**kwargs): beg_ts = time.time() func(*args,**kwargs) end_ts = time.time() print("[INFO] elapsed time: %f" % (end_ts - beg_ts)) return wrapper @time_usage def find_factors(n): factors = [] i = 2 while i < n: while (n % i) == 0: factors.append(i) n /= i i += 1 if n > 1: factors.append(n) return factors @time_usage def improved_prime_factor(n): factors = [] # No need to test whether the number is divisible by any # even number other than 2 while n % 2 == 0: factors.append(2) n /= 2 i = 3 # If n = p * q,either p or q must be <= sqrt(n) max_factor = math.sqrt(n) while i <= max_factor: while n % i == 0: factors.append(i) n /= i # Update the upper band on possible factors max_factor = math.sqrt(n) i += 2 if n > 1: factors.append(n) return factors if __name__ == '__main__': print(improved_prime_factor(125556)) # return None print(find_factors(125556)) # return None 解决方法
你需要返回func(* args,** kwargs).使用functools.wraps装饰包装器方法也是一种好习惯
import functools def time_usage(func): @functools.wraps def wrapper(*args,**kwargs): beg_ts = time.time() result = func(*args,**kwargs) # save the result to a name end_ts = time.time() print("[INFO] elapsed time: %f" % (end_ts - beg_ts)) return result # return the name return wrapper (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |