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 不适用于此应用程序。有关详细信息,请参见此处