Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中未定义的行为_Python_Python 3.x_Undefined Behavior - Fatal编程技术网

Python中未定义的行为

Python中未定义的行为,python,python-3.x,undefined-behavior,Python,Python 3.x,Undefined Behavior,Python有什么未定义的行为?语言规范中未定义的含义。我所知道的唯一一个例子是在迭代过程中修改序列。在了解这一点之前,我曾经认为Python没有未定义的行为,因此我认为这是非常罕见的 垃圾收集 Python 3.6中的有序词典 我认为垃圾收集属于这一类。主要的Python实现(例如)使用引用计数进行垃圾收集,但这不是语言规范所要求的 此外,在Python中的任何特定点上,都不能依赖于正在进行垃圾收集(并因此“清理”)的变量 考虑这一点: f=open(“file.txt”).read()

Python有什么未定义的行为?语言规范中未定义的含义。我所知道的唯一一个例子是在迭代过程中修改序列。在了解这一点之前,我曾经认为Python没有未定义的行为,因此我认为这是非常罕见的

  • 垃圾收集
  • Python 3.6中的有序词典

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

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

考虑这一点:

f=open(“file.txt”).read()
这在python新代码中非常常见,而且似乎足够安全,但对打开的文件对象没有显式的
.close()
调用。当对象被销毁时,将隐式调用
.close()
。由于CPython的工作方式,这几乎总是被及时地破坏,这在实践中是正常的。但对于其他python解释器来说,情况并非如此,最终可能会出现悬而未决的文件对象。这就是为什么你总是看到人们说这样做更安全

with open("file.txt") as fl:
   f = fl.read()
因为现在对象的关闭不仅是显式的,而且保证在特定的代码行发生



在Python3.6中,字典的顺序与CPython中的实现细节相同。规范没有强制要求它,但人们开始依赖这种未定义的行为,这会给其他python解释器的用户带来问题,因此在python 3.7中,他们将有序字典作为规范的一部分。

如何定义“未定义的”在您的上下文中?任何未在语言规范中明确定义的行为都是未定义的。请注意,在迭代过程中修改序列是完全可预测的。它的定义与否取决于序列迭代是否在规范中明确定义,我认为这不是很有趣。@juanpa.arrivillaga!你知道我想去哪里了解它的工作原理吗?我假设它是特定于实现的。@RedKnite对于内置序列,它基本上保留一个计数器,返回
self[I]
,然后递增
I
,直到到达
len(self)
。下面是对我给出Python实现的另一个问题的回答