Python 如何以更通俗的方式写作?

Python 如何以更通俗的方式写作?,python,Python,我想用一种更具python风格的方式来编写这段代码。你知道我怎么做吗 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) 可以使用和生成器表达式计算总和。如果传递

我想用一种更具python风格的方式来编写这段代码。你知道我怎么做吗

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)

可以使用和生成器表达式计算总和。如果传递给
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()) 

结果来自哪里?结果来自哪里?也许你的意思是:
re.sub(“[^0-9]”,“,”,x)
。是的,很抱歉弄错了。我认为,在这种情况下,如果从中只有一个
屈服,你也可以在Python2中执行
return()
。最好将编译后的正则表达式移出函数,这样它就可以被重用,而不是每次重新编译。此外,函数可能需要一个
self
参数。@poke IIRC Python缓存正则表达式。文档中说:“传递给re.match()、re.search()或re.compile()的最新模式的编译版本被缓存,因此一次只使用几个正则表达式的程序不必担心编译正则表达式。”
re.sub
未被提及。@AshwiniChaudhary有趣,我不知道!