以下两个循环构造基本相同。我只是不知道如何在第一个语法中插入两个变量start = start+2和end = end+2。谢谢
第一种结构(清单理解):
start = 1
end = 3
clips = [ImageClip(os.path.join(folder,pic))
.resize(width=w*9.3/16)
.set_start(start)
.set_end(end)
.set_pos(lambda t:(max((402), (int(w-3*w*t))), "center"))
for pic in picfiles]第二个构造(规则循环):
start = 1
end = 3
clips = []
for pic in picfiles:
clips.append(ImageClip(os.path.join(folder,pic))
.resize(width=w*9.3/16)
.margin(left=31, opacity=0)
.set_start(start)
.set_end(end)
.set_pos(lambda t:(max((402), (int(w-3*w*t))), "center")) # move from right to center
)
start = start + 2
end = end + 2发布于 2016-06-04 20:21:59
做这件事有很多方法。例如,您可以执行如下操作:
clips = [
ImageClip(os.path.join(folder,pic))
.resize(width=w*9.3/16)
.set_start(index*2+1)
.set_end(index*2+3)
.set_pos(lambda t:(max((402), (int(w-3*w*t))), "center"))
for index, pic in enumerate(picfiles)
]它使用函数枚举。下面是一个例子,说明它是有效的。
list(enumarate(['a','b','c'])) = ((1, 'a'), (2, 'b'), (3, 'c'))但是,在使用这种结构时,您应该非常清楚,因为它有时会导致无法理解的公式。对于您的代码,我认为它是可以的,但当您正在进行更复杂的计算时,常规循环通常更干净。
如果您的其他值是不相关的,也可以使用该构造(如您的示例所示,在循环indice、start和stop之间有一个简单的关系)。
[obj.setStart(start).setStop(stop) for obj, start, stop in objects, starts, stops]你可以用你想要的方式定义开始和停止。在你的具体问题中,它应该是:
clips = [
ImageClip(os.path.join(folder,pic))
.resize(width=w*9.3/16)
.set_start(start)
.set_end(stop)
.set_pos(lambda t:(max((402), (int(w-3*w*t))), "center"))
for start, stop, pic in
(
itertools.count(1, step=2),
itertools.count(3, step=2),
enumerate(picfiles)
)
]https://stackoverflow.com/questions/37634607
复制相似问题