[英]How to sum only digits from a list using decorate?
我试图将列表传递给 function somme(计算列表中数字的总和)
但我得到unsupported operand type(s) for +=: 'int' and 'str'
。
我决定创建nettoyage function 来过滤列表并且不返回任何数字!
这就是我到目前为止所尝试的?
def nettoyage(func):
def inner(*args):
digits = []
for i in args:
if(str(i).isdigit()):
digits.append(i)
t=tuple(digits)
return func(*t)
return inner
@nettoyage
def somme(l):
s=0
for i in l:
s+=i
return s #or just sum(l)
print(somme([1,2,3,4,5,'a','b'])) # -> [1,2,3,4,5]
类型错误:somme() 缺少 1 个必需的位置参数:'l'
PS:我知道我可以使用过滤器 function 或只是循环列表并仅累积数字 function 但是
我想了解更多关于装饰的信息。
args
将func
function 的所有 arguments 表示为一个列表,因此要获得第一个,值列表执行args[0]
。 然后不需要构建一个tuple
并在单个参数处传递列表digits
,调用func(*t)
调用func(1, 2, 3, 4, 5)
,这不是somme
定义
def nettoyage(func):
def inner(*args):
digits = []
for i in args[0]:
if str(i).isdigit():
digits.append(i)
return func(digits)
return inner
可以在list-comprehension
中转换
def nettoyage(func):
def inner(*args):
return func([i for i in args[0] if str(i).isdigit()])
return inner
给15
不是[1,2,3,4,5]
print(somme([1, 2, 3, 4, 5, 'a', 'b'])) # -> 15
您可以通过一些打印( args
, l
)来解决所有这些问题。 当某些东西不适用于变量时:打印它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.