Python新手,请原谅,如果我对我的术语有点偏离(请纠正我:)但是是否可以将标志和值传递给第二个函数,然后将函数传递给第三个功能?将标志传递给另一个函数?
因此,像这样:
def changeLayers(var1, var2, layers, flag, value):
# do lots of stuff with var1 and var2...
# finally:
for layer in layers:
changeLayerState(layer, flag = value)
changeLayers('foo', 'bar', someLayers, 'visible', True)
changeLayers('foo', 'bar', otherLayers, 'layerState', 'normal')
所以预期的效果运行像changeLayers( '富', '酒吧',someLayers, '可见的',真正的),并最终对changeLayerState(layer,visible = True)进行评估。
如果我运行这样的东西,我得到一个语法错误,我假设因为我通过它作为一个标志字符串'可见'。
这简化了一点,但是我想要做的事情的本质。有没有办法做到这一点?
希望是有道理的..
编辑:所以我是用伪代码广泛撒网,而不是吓唬人关谁是不熟悉玛雅Python,但我想这是更混乱。因此,这里是一个片段,它查看场景中的所有显示图层,将以“Control”结尾的所有图层都变为不可见,并将所有以“Geometry”结尾的图像设置为正常的layerState(也就是说,不是参考或模板化,以便可以在视口中轻松选择它们):
import maya.cmds as cmds
layers = cmds.ls(type='displayLayer')
controlLayers = []
geomLayers = []
for layer in layers:
if layer.endswith('Control'):
conLayers.append(layer)
elif layer.endswith('Geometry'):
geomLayers.append(layer)
for layer in controlLayers:
cmds.layerButton(layer, edit = True, layerVisible = False)
cmds.setAttr(layer + '.visiblity' , False)
for layer in geomLayers:
cmds.layerButton(layer, edit = True, layerState = 'normal')
cmds.setAttr(layer + '.displayType', 0)
而且工作正常。但是,如果我尝试functionize那些改变图层状态这样的台词:
import maya.cmds as cmds
layers = cmds.ls(type='displayLayer')
controlLayers = []
geomLayers = []
def changeLayerState(layers, flag, value, attr, attrValue):
for layer in layers:
cmds.layerButton(layer, edit = True, flag = value)
cmds.setAttr(layer + '.' + attr, attrValue)
for layer in layers:
if layer.endswith('Controls'):
controlLayers.append(layer)
elif layer.endswith('Geometry'):
geomLayers.append(layer)
changeLayerState(geomLayers, 'layerState', 'normal', 'displayType', 0)
changeLayerState(controlLayers, 'layerVisible', False, 'visibility', False)
我报错了:
// Error: Invalid flag 'flag'
# Traceback (most recent call last):
# File "<maya console>", line 17, in <module>
# File "<maya console>", line 8, in changeLayerState
# TypeError: Invalid flag 'flag' //
是否让更多的什么,我试图做有意义吗?我试图通过一个标志来使用另一个函数的函数。
标志和值,只要你想你可以传递尽可能多的值(标志),没有理由为什么它不可能,但是如果没有你所得到的错误的知识,没有人能够帮助你。 'SyntaxError'意味着你的代码中有语法错误,所以发布整个错误回溯和相关的代码。 – yedpodtrzitko