如何使用更简单的结构重写此模式

时间:2013-02-15 08:19:14

标签: python

我需要做很多次以下的事情:

value1 = kwargs.get('par1')
if value1 is not None: value1 = int(value1)

是否可以直接通过过滤器(在这种情况下为.get)传递int返回的值,如果存在匹配?

我当然可以为此实现一个函数,但我想知道是否有更多的pythonic方法。

2 个答案:

答案 0 :(得分:3)

你可以通过扩展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'])

答案 1 :(得分:1)

假设你的意思是if value1 is not None

value1 = int(kwargs['par1']) if 'par1' in kwargs else None