问题标签 [python-internals]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
108935 浏览

python - 元组比 Python 中的列表更有效吗?

在实例化和检索元素时,元组和列表之间是否存在性能差异?

0 投票
7 回答
289263 浏览

python - time.sleep -- 休眠线程或进程?

在 Python for *nix 中,会time.sleep()阻塞线程还是进程?

0 投票
11 回答
94645 浏览

python - "is" 运算符对整数的行为异常

为什么以下在 Python 中会出现意外行为?

我正在使用 Python 2.5.2。尝试一些不同版本的 Python,似乎 Python 2.3.3 显示了 99 到 100 之间的上述行为。

基于上述,我可以假设 Python 是在内部实现的,因此“小”整数的存储方式与较大的整数不同,is操作员可以分辨出差异。为什么有泄漏的抽象?当我事先不知道它们是否是数字时,比较两个任意对象以查看它们是否相同的更好方法是什么?

0 投票
11 回答
288977 浏览

python - __slots__ 的用法?

Python的目的是什么__slots__——尤其是关于我什么时候想用它,什么时候不想用?

0 投票
8 回答
71690 浏览

python - CPython 中的全局解释器锁 (GIL) 是什么?

什么是全局解释器锁,为什么会出现问题?

从 Python 中删除 GIL 引起了很多争论,我想了解为什么这如此重要。我自己从来没有写过编译器或解释器,所以不要吝啬细节,我可能需要他们理解。

0 投票
10 回答
79776 浏览

python - 如何覆盖 Python 对象的复制/深度复制操作?

copy我了解与deepcopy复制模块中的区别。我之前成功地使用过copy.copyand copy.deepcopy,但这是我第一次真正开始重载__copy__and__deepcopy__方法。我已经在 Google 上搜索并查看了内置的 Python 模块以查找__copy__and__deepcopy__函数的实例(例如sets.pydecimal.pyfractions.py),但我仍然不能 100% 确定我做对了。

这是我的场景:

我有一个配置对象。最初,我将使用一组默认值实例化一个配置对象。此配置将移交给多个其他对象(以确保所有对象都以相同的配置开始)。然而,一旦用户交互开始,每个对象都需要独立调整其配置,而不会影响彼此的配置(这对我来说,我需要对我的初始配置进行深度复制以进行处理)。

这是一个示例对象:

在这个对象上实现copydeepcopy方法以确保copy.copycopy.deepcopy给我正确的行为的正确方法是什么?

0 投票
3 回答
69814 浏览

python - 关于 Python 内置的 sort() 方法

Python中的内置sort()方法使用什么算法?是否可以查看该方法的代码?

0 投票
2 回答
15993 浏览

python - Python编译/解释过程

我试图更清楚地理解 python 编译器/解释器过程。不幸的是,我没有上过口译课,也没有读过很多关于口译的文章。

基本上,我现在所理解的是,.py文件中的 Python 代码首先被编译成 python 字节码(我假设是.pyc我偶尔看到的文件?)。接下来,字节码被编译成机器码,一种处理器真正理解的语言。差不多,我读过这个线程Why python compile the source to bytecode before interpreting?

有人可以给我一个很好的解释整个过程,记住我对编译器/解释器的了解几乎不存在吗?或者,如果这不可能,也许可以给我一些资源来快速概述编译器/解释器?

谢谢

0 投票
4 回答
320 浏览

python - 访问分配给正在创建的对象的名称

我正在编写一些代码来确定分配给对象的名称。这是用于一般调试工作并进一步熟悉 python 内部结构。

我将其结构化为类装饰器,以便如果可能的话,该类的所有实例都将记录其名称。代码相当长,所以除非被问到,否则我不会发布它。一般技术如下

  1. 用代码装饰类的__init__方法来做我想做的事

  2. 设置caller = inspect.currentframe().f_back并打开inspect.getframeinfo(caller).filename并将其发送到ast.parse. 我在这里不做任何错误检查,因为(1)这只是为了调试/分析/黑客(2)这个确切的过程“刚刚”完成,或者代码不会运行。这有问题吗?

  3. 找到ast.Assignment导致当前正在执行的__init__方法运行的实例

  4. 如果len(assignment.targets) == 1那么左侧只有一个项目,我可以从targets[0].id. 在一个简单的形式a = Foo()中,那么assignment.value是 的一个实例ast.Call。如果它是文字(例如列表),那么value将是该列表并保释,因为我感兴趣的对象没有被分配给名称。

确认这assignment.value.func实际上type(obj).__call__是我感兴趣的对象的最佳方法是什么。我很确定我可以保证它“在某处”或者代码甚至不会运行。我只需要它处于最高水平。显而易见的事情是遍历它并确保它不包含任何内部调用。然后我保证我有这个名字。(我的推理是正确的,我不确定它的假设是否正确)。这并不理想,因为如果我对 感兴趣Foo,这可能会导致我放弃,a = Foo(Bar())因为我不知道它是否是a = Bar(Foo())

当然我可以检查assignment.value.func.id但是有人可能已经做了Foobar = Foo什么所以我不想过分依赖这个

任何帮助将不胜感激。与往常一样,我对我可能忽略的任何其他建议或问题感兴趣。

此外,我真的很惊讶我只需要发明“python-internals”标签。

0 投票
3 回答
2304 浏览

python - 为什么 id({}) == id({}) 和 id([]) == id([]) 在 CPython 中?

为什么 CPython(不知道其他 Python 实现)有以下行为?

我有一些想法为什么这样,但找不到具体的原因。

编辑

为了进一步证明 Glenn 和 Thomas 的观点: