我这里有这个代码:
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)
但那当然不存在。你有什么建议?
答案 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方式。
如果m
是None
(或其他评价为“错误”的内容),则返回m
,但如果m
为“true-ish”,那么返回m.group(1)
。
答案 3 :(得分:2)
你有什么是python的条件运算符。 IMO它完全是pythonic as-is,不需要改变。请记住,explicit is better than implicit
。你现在拥有的是可读的,并且可以立即理解。