使用名称列表定义变量

时间:2014-04-16 09:35:19

标签: python variables loops

我正在尝试在我的脚本中做一些脏事。

我有一个函数可以对名为model的对象应用一些转换。 model可以包含多个属性,其中包括alphadelta。但是,该函数必须能够使用自己的可选参数覆盖这些属性。

我想我必须检查函数是否已收到这些参数,如果没有,则将该属性重新分配给平面名称。 (从model.alphaalpha)。这里的主要问题是为任何给定的情况编写解决此问题的循环。

我设法做到这一点的唯一方法是使用locals() dict,但我觉得很脏。有什么建议?这是我的代码,粗略。

 def transform(model, alpha=None, theta=None):
        for p in ('alpha', 'theta'): #the list is longer, actually
            if not locals()[p] and hasattr(model, p):
                locals()[p] = getattr(model, p)

        _rotate(model, alpha)
        _translate(model, delta)

最后,该函数的可选参数是否有内部列表?像__parameters__这样的东西?这样,我就可以for p in __parameters__等等。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用**kwargs语法,然后直接在kwargs词典而不是本地词典上操作:

def transform(model, **kwargs):
    for p in ('alpha', 'theta', ...):
        if 'p' not in kwargs and hasattr(model, p):
            kwargs[p] = getattr(model, p)

(您可能仍希望显式迭代期望名称列表,以过滤掉可能也存在于kwargs中的任何意外参数。)

答案 1 :(得分:0)

如果你声明你的功能:

def transform(model, **kwargs):
    ...

然后所有关键字参数将作为字典传递给kwargs中的函数。