更多pythonic的方式来写这个?

时间:2010-09-29 16:55:49

标签: python

我这里有这个代码:

import re
def get_attr(str, attr):
    m = re.search(attr + r'=(\w+)', str)
    return None if not m else m.group(1)

str = 'type=greeting hello=world'

print get_attr(str, 'type')   # greeting    
print get_attr(str, 'hello')  # world
print get_attr(str, 'attr')   # None

哪个有效,但我并不特别喜欢这一行:

return None if not m else m.group(1)

在我看来,如果我们可以使用三元运算符,这看起来会更清晰:

return (m ? m.group(1) : None)

但那当然不存在。你有什么建议?

4 个答案:

答案 0 :(得分:10)

Python 三元运算符。你正在使用它。它只是X if Y else Z形式。

那就是说,我很容易写出这些东西。如果你牺牲清晰度,在一条线上拟合东西并不是那么好。

def get_attr(str, attr):
    m = re.search(attr + r'=(\w+)', str)
    if m:
        return m.group(1)

    return None

答案 1 :(得分:4)

另一种选择是使用:

return m.group(1) if m else m

这是明确的,你不必做任何逻辑谜题来理解它:)

答案 2 :(得分:3)

return m and m.group(1)

将是一种Pythonic方式。

如果mNone(或其他评价为“错误”的内容),则返回m,但如果m为“true-ish”,那么返回m.group(1)

答案 3 :(得分:2)

你有什么是python的条件运算符。 IMO它完全是pythonic as-is,不需要改变。请记住,explicit is better than implicit。你现在拥有的是可读的,并且可以立即理解。