如何用更pythonic的方式写?

时间:2015-01-21 08:48:08

标签: python

我想用更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)

1 个答案:

答案 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())