我已经从previous question了解了一些关于FFL分号的内容。但是,仍然不清楚它们执行的评估或执行顺序。所以这是一个更具体的例子:
[ expr_a, expr_b ; expr_c, expr_d ; expr_e, expr_f ]
上述代码的执行顺序应该是什么?在我的脑海中,它应该是:
现在让我们想象一下expr_b = add(test_list, ['b saw ' + str(test_list)])
和所有其他表达式的相似之处。那么test_list
的最终内容是什么?
在我脑海中,它应该是:
锯[]
b见[]
c看到[锯[],b看[]]
看到[锯[],b见[]]
[锯] [锯[],锯[],锯[锯[],锯[]],锯[锯[],锯[]] 看到[锯[],锯[],锯[锯[],锯[]],锯[锯[],锯[]]
请解释为什么不是这样。
答案 0 :(得分:3)
首先,您可能不希望完全像这样编写代码。通常,分号的优先级非常低,但列表文字不是运算符,代码将如下所示:
[a, (b; c), (d; e), f]
这意味着您将并行启动四个命令管道(尽管其中两个只有一个成员)。它将评估a
,b
,d
,f
。然后它将执行a
的结果,然后执行b
的结果。执行b
将触发命令管道中的下一步,因此它将评估并执行c
。然后它将执行d
,然后评估并执行e
,最后它将执行f
。
所以:
a saw []
b saw []
c saw [a saw [], b saw []]
d saw []
e saw [a saw [], b saw [], c saw [a saw [], b saw []], d saw []]
f saw []