*args 在 manim ReplacementTransform 动画中的使用
Use of *args in manim ReplacementTransform animation
关于这段代码,我有一个问题,它转换了 TexMobject 的元素(例如,元素 2 转换为 8,3 转换为 9 等等):
changes = [
[(2,4,3), (8,11,9)],
[(0,0), (7,10)]
]
for pre_ind, post_ind in changes:
self.play(
*[
ReplacementTransform(formula[i].copy(), formula[j])
for i,j in zip(pre_ind, post_ind)
]
)
self.wait()
self.wait()
我看到有一个用于生成索引对的列表理解,但我不明白为什么 self.play()
中的方括号前有一个 args 星号 (*)?在这种情况下使用 *args 符号的目的是什么,如果列表理解没有它就可以工作?
你必须先了解几个概念:
- 列表理解仅适用于列表、元组、字典和集合。
self.play()
指的是Scene.play()
,因为我们知道self
指的是定义的class。
- ALL METHODS 具有以下形式:
class.method(*args,**kwargs)
,或
class.method(*args_1, *args_2, *args_3, ..., *args_n,**kwargs_1, **kwargs_2, ..., **kwargs_m)
其中 args
是一个 LIST/TUPLA 而 kwargs
是一个字典。在这种情况下,Scene.play
是这样使用的:
Scene.play(Animation1(...), Animation2(...), ..., **kwargs)
# Example:
Scene.play(Write(mob1), Write(mob2), run_time=4)
# But, this is the same as:
Scene.play(*[Write(mob1), Write(mob2)], run_time=4)
# Or better:
Scene.play(*[Write(mobs) for mobs in [mob1,mob2]], run_time=4)
我想(你没有说得很清楚)你指的是为什么你不能做类似的事情:
Scene.play([ReplacementTransform(...) for _ in ...])
或
Scene.play(ReplacementTransform(...) for _ in ...)
凭直觉我们可以理解这是一个语法错误,因为 Python 解释器将无法理解所给出的参数,请记住这不是使用方法的方式。
运算符*
被称为“扩展运算符”,它的作用是“取出”列表中的所有元素。更多信息 .
关于这段代码,我有一个问题,它转换了 TexMobject 的元素(例如,元素 2 转换为 8,3 转换为 9 等等):
changes = [
[(2,4,3), (8,11,9)],
[(0,0), (7,10)]
]
for pre_ind, post_ind in changes:
self.play(
*[
ReplacementTransform(formula[i].copy(), formula[j])
for i,j in zip(pre_ind, post_ind)
]
)
self.wait()
self.wait()
我看到有一个用于生成索引对的列表理解,但我不明白为什么 self.play()
中的方括号前有一个 args 星号 (*)?在这种情况下使用 *args 符号的目的是什么,如果列表理解没有它就可以工作?
你必须先了解几个概念:
- 列表理解仅适用于列表、元组、字典和集合。
self.play()
指的是Scene.play()
,因为我们知道self
指的是定义的class。- ALL METHODS 具有以下形式:
class.method(*args,**kwargs)
,或
class.method(*args_1, *args_2, *args_3, ..., *args_n,**kwargs_1, **kwargs_2, ..., **kwargs_m)
其中 args
是一个 LIST/TUPLA 而 kwargs
是一个字典。在这种情况下,Scene.play
是这样使用的:
Scene.play(Animation1(...), Animation2(...), ..., **kwargs)
# Example:
Scene.play(Write(mob1), Write(mob2), run_time=4)
# But, this is the same as:
Scene.play(*[Write(mob1), Write(mob2)], run_time=4)
# Or better:
Scene.play(*[Write(mobs) for mobs in [mob1,mob2]], run_time=4)
我想(你没有说得很清楚)你指的是为什么你不能做类似的事情:
Scene.play([ReplacementTransform(...) for _ in ...])
或
Scene.play(ReplacementTransform(...) for _ in ...)
凭直觉我们可以理解这是一个语法错误,因为 Python 解释器将无法理解所给出的参数,请记住这不是使用方法的方式。
运算符*
被称为“扩展运算符”,它的作用是“取出”列表中的所有元素。更多信息