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