2013-02-15 27 views
0

我需要做很多次以下改写这个模式:如何用简单的结构

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

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

我当然可以为此实现一个函数,但我想知道是否有更多pythonic的方式来做到这一点。

+0

正如其他人指出如下,您的代码示例中,'没有定义par1'。你的意思是'价值1'吗? – Thanatos 2013-02-15 08:29:30

+0

当然,对不起。纠正。 – dangonfast 2013-02-15 08:30:37

回答

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']) 
+0

是的,这看起来很容易阅读。我不知道在调用这个函数的性能方面是什么惩罚... – dangonfast 2013-02-15 08:32:13

+0

当然,它比内联代码更昂贵。但其他一切都取决于你多久打电话给它。 – 2013-02-15 11:40:39

1

假设你的意思if value1 is not None有:

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

如果'kwargs ['par1']'存在并且它本身不是None,那么这不是等效的。 (在这种情况下,它会提出原始给出无的情况。) – Thanatos 2013-02-15 08:24:26

+1

@Thanatos问题中的代码有点模棱两可,因为'par1'根本没有定义。 – 2013-02-15 08:26:57

+0

但是,我的评论的确如你在帖子中所做的一样。 ;-) – Thanatos 2013-02-15 08:27:43