从列表动态创建变量名称

时间:2012-05-03 03:27:46

标签: python maya

所以我开始在maya中使用Python API,一些工具要求我在各种对象上迭代代码。这需要将对象引用及其名称附加到对象创建者的输出,然后在调用后立即运行函数。

而不是运行(假设的例子):

className.myObject1 = mayaClass.create(myObject1)
func1()
func2()

className.myObject2 = mayaClass.create(myObject2)
func1()
func2()

等。

有没有办法可以这么说:

myObjs = ['myObject1','myObject2','myObject3']
for obj in myObjs:
    className.obj = mayaClass.create(obj)
    func1()
    func2()

它肯定会节省很多打字,缩小脚本大小并使事情更容易维护。

3 个答案:

答案 0 :(得分:2)

setattr()

  

如果对象允许,该函数会将值赋给属性。例如,setattr(x, 'foobar', 123)相当于x.foobar = 123

答案 1 :(得分:1)

setattr()会将对象的属性(由字符串给出)设置为指定值
vars()将局部变量作为字典

查看http://docs.python.org/library/functions.html有关Python的重要内置函数

myObjs = ['myObject1','myObject2','myObject3']

for obj in myObjs:
    setattr(className, obj, mayaClass.create(vars()[objs]))
    func1()
    func2()

编辑: 我注意到另一个答案提到了exec。在任何python代码中使用它时要小心。

答案 2 :(得分:0)

除了Ignacio的setattr()回答之外,我还想提一下使用exec()语句的可能性。这允许您在当前作用域中将字符串作为python代码执行。