Lambdas 和迴圈
Lambda 是將行為連線到 GUI 元素的有用快捷方式。
b = cmds.button("make a cube", command = lambda _: cmds.polyCube())
但是,由於 Python 捕獲 lambdas 中的變數的方式,如果在迴圈內使用 lambdas 繫結命令,則會出現意外結果。例如,這看起來應該生成建立不同大小的球體的按鈕:
# warning: doesn't work like it looks!
for n in range(5):
b = cmds.button("sphere size %i" % n, command = lambda _: cmds.polySphere(radius=n))
按鈕將被正確標記,但都將使用相同的半徑(4),因為 lambda 將在迴圈關閉時捕獲該值。 TLDR: 如果你在迴圈內部生成回撥,請使用 functools.partial
或其他方法來捕獲值 - lambda 不適用於此應用程式。有關詳細資訊,請參見此處