【发布时间】:2016-08-02 08:35:21
【问题描述】:
有没有办法通过使用装饰器从集合中移除一个项目?我有一个函数可以生成一个数字的所有因子 - num,并返回一个集合。对于我正在处理的问题,我想返回不包括值的集合 - num。我想通过使用装饰器来做到这一点,但不确定如何。
我在 euler.py 中的因子函数:
def factors(n):
return set(reduce(list.__add__,
([i, n//i] for i in range(1, int(n**0.5) + 1) if n % i == 0)))
我要装饰的功能:
from euler import factors
def remove_last(func, *args, **kwargs):
def wrapper(x):
func.remove(x)
return func
factors = remove_last(factors(10))
print factors
当前输出:
set([1, 10, 2, 5])
想要的输出:
set([1, 2, 5])
【问题讨论】:
-
你有什么特别的理由想用装饰器来做这个吗?简单地让
factors删除值本身似乎很简单,并且您在示例中使用remove_last的方式表明您可能需要一个不同于装饰器提供的 API。