Python中未定义的行为

问题描述 投票:0回答:2

Python有什么未定义的行为?未定义的含义不在语言规范中。我知道的唯一示例是在遍历序列时修改序列。在了解这一点之前,我曾经认为Python没有未定义的行为,因此我认为它非常罕见。

python python-3.x undefined-behavior
2个回答
0
投票

我会认为垃圾收集属于这一类。 Python的主要实现(例如CPython)使用引用计数进行垃圾回收,但这不是语言规范所要求的。

此外,您不能依赖于在Python中的任何特定点对变量进行垃圾回收(并因此“清理”)。

考虑此:

f = open("file.txt").read()

这在新的python代码中很常见,并且看起来足够安全,但是在打开的文件对象上没有显式的.close()调用。销毁对象时,将隐式调用.close()。由于CPython的工作方式,几乎总是及时将其销毁,最终在实践中还可以。但是对于其他python解释器,情况并非如此,最终可能会导致文件对象悬空。这就是为什么您总是看到人们说这样做更安全的原因

with open("file.txt") as fl:
   f = fl.read()

因为现在对象的关闭不仅是显式的,而且可以保证在特定的代码行发生。


-2
投票

该语言不允许的内容基本上是未定义的,例如迭代一个int for i in 34或使用一个可迭代的list(34)转换一个整数,将1参数传递给某个函数,例如map(a)。列表继续

© www.soinside.com 2019 - 2024. All rights reserved.