我想用更pythonic的方式编写这段代码。你知道我怎么能这样做吗?
def counter():
for x in self.get_xs():
total_x = 0
result = (re.sub('[^0-9]', '', x))
for number in result:
total_x += int(number)
yield(total_x)
答案 0 :(得分:2)
您可以使用sum()
和生成器表达式计算总和。如果传递给sum()
的iterable为空(即re.sub()
返回''
),那么它只会返回默认的start
值0。
def counter():
r = re.compile('[^0-9]')
for x in self.get_xs():
yield sum(int(number) for number in r.sub('', x))
在Python 3.3+中,您可以使用yield from
:
def counter():
r = re.compile('[^0-9]')
yield from (sum(map(int, r.sub('', x))) for x in self.get_xs())