Ari*_*ide 11 python history loops if-statement
Python循环语句可能有一个else子句,当且仅当循环未被a终止时才执行该子句break.换句话说,当条件变为False(有while)或迭代器耗尽时(带for).
这个循环 - 其他构造是否源自另一种语言(理论上的或实际的)?它是否被任何较新的语言所采用?
也许我应该问问Guido的前任,但他肯定太忙了,无法进行如此徒劳的调查.;-)
相关讨论和示例: 在for循环中使用'else'的Pythonic方法
Common Lisp 的 LOOP 宏中也有类似的功能,Peter Seibel 在此处进行了描述:
...LOOP 提供了两个关键字,initially 和finally,它们引入了要在循环主体之外运行的代码。
在最初或最后之后,这些子句由所有 Lisp 形式组成,直到下一个循环子句开始或循环结束。所有初始形式都组合成一个序言,该序言在所有局部循环变量初始化之后和循环体之前立即运行一次。最后的形式类似地组合成尾声,在循环体的最后一次迭代之后运行。序言和结尾代码都可以引用局部循环变量。
即使循环体迭代零次,序言也始终运行。如果发生以下任一情况,循环可以返回而不运行尾声:
- 执行 return 子句。
- RETURN 、 RETURN-FROM 或其他控制构造的传输是从主体内的 Lisp 形式中调用的......
例如,在链接问题中找到的 Python 示例的一部分:
for v in known_variables:
if self.bindings[v] is cell:
return v
else:
raise CannotSimplify
Run Code Online (Sandbox Code Playgroud)
可能看起来像这样:
(loop for v in known-variables
when (eq (gethash v (slot-value self bindings)) cell)
do (return v)
finally (signal cannot-simplify))
Run Code Online (Sandbox Code Playgroud)
另一个观察:
Common Lisp 的条件系统也是独一无二的。有一次,有人问它来自哪里,并被指给肯特·皮特曼 (Kent Pitman) 的论文,他说是从 Maclisp 那里得到的。同样,Common Lisp 看起来怪异的 FORMAT 函数显然来自 Multics 通过Dan Weinreb。
共同点是,语言特征往往不会遵循最能激发该语言灵感的祖先语言,而是被喜爱它们的个人带到他们正在开发的任何新语言中。因此,如果您想找出 Python for-的实际来源else,我会查找添加它的人,并查看他们在此之前使用的语言。
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |