3DCGbook

映像プロダクションに所属しています。主に毎日のアウトプットを配信していこうと思います。

可変長引数でsetAttr

compoundアトリビュートのsetAttrって地味に面倒くさいですよね。
何故ならlistでそのままsetできない!

要するに、

translate = (1,2,3)
cmds.setAttr('pSphere1.translate',translate)

ができないってことです。

これをやるには、

tx,ty,tz = (1,2,3)
cmds.setAttr('pSphere1.translate',tx,ty,tz)

としなければなりません。

でもこの形って見たことありませんか?
可変長引数でなんかそれっぽいことできそうじゃないですか。

例えば以下のような可変長引数の出力関数を作ってみるとします。

def print_args(*args):
    return args
print_args(1,2,3)
# Result: (1, 2, 3)

結果としてはこのような感じです。
引数の入れ方に注目すると、単純に 1,2,3 と入れています。
その表現を*argsですることが可能というわけで...

一番上の表現は、

translate = (1,2,3)
cmds.setAttr('pSphere1.translate',*translate)

とリストの前に*(アスタリスク)をつけることで表現可能となります。
辞書の可変長引数でも面白いことができるのでお試しあれ~。