我需要做很多次以下改写这个模式:如何用简单的结构
value1 = kwargs.get('par1')
if value1 is not None: value1 = int(value1)
是否有可能直接通过一个过滤器(int
在这种情况下,通过由.get
返回的值),只有如果有匹配?
我当然可以为此实现一个函数,但我想知道是否有更多pythonic的方式来做到这一点。
我需要做很多次以下改写这个模式:如何用简单的结构
value1 = kwargs.get('par1')
if value1 is not None: value1 = int(value1)
是否有可能直接通过一个过滤器(int
在这种情况下,通过由.get
返回的值),只有如果有匹配?
我当然可以为此实现一个函数,但我想知道是否有更多pythonic的方式来做到这一点。
您可以实现自己的字典通过延长UserDict
但你需要包装kwargs
,这是一个有点贵(不是很多,因为kwargs
通常很小,但仍...)。
你总是可以打电话给int()
,发现异常,但速度也会很慢。
你不能猴子补丁dict
,因为它是一种内部类型。否则,你可以说dict.getInt = getAsInt
其中getAsInt
是一个新功能。
您可以使用int(kwargs['par1']) if par1 in kwargs else None
但它会搜索字典两次。
我会使用一个新的功能是:
def asInt(v): return None if v is None else int(v)
value1 = asInt(kwargs['par1'])
是的,这看起来很容易阅读。我不知道在调用这个函数的性能方面是什么惩罚... – dangonfast 2013-02-15 08:32:13
当然,它比内联代码更昂贵。但其他一切都取决于你多久打电话给它。 – 2013-02-15 11:40:39
假设你的意思if value1 is not None
有:
value1 = int(kwargs['par1']) if 'par1' in kwargs else None
正如其他人指出如下,您的代码示例中,'没有定义par1'。你的意思是'价值1'吗? – Thanatos 2013-02-15 08:29:30
当然,对不起。纠正。 – dangonfast 2013-02-15 08:30:37