0

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

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

是否可以直接.get通过过滤器返回的值(int在这种情况下),只有在匹配的情况下?

我当然可以为此实现一个函数,但我想知道是否有更 Pythonic 的方式来实现它。

4

2 回答 2

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'])
于 2013-02-15T08:26:04.503 回答
1

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

value1 = int(kwargs['par1']) if 'par1' in kwargs else None
于 2013-02-15T08:21:32.003 回答