问题标签 [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.
python - 元组比 Python 中的列表更有效吗?
在实例化和检索元素时,元组和列表之间是否存在性能差异?
python - time.sleep -- 休眠线程或进程?
在 Python for *nix 中,会time.sleep()
阻塞线程还是进程?
python - "is" 运算符对整数的行为异常
为什么以下在 Python 中会出现意外行为?
我正在使用 Python 2.5.2。尝试一些不同版本的 Python,似乎 Python 2.3.3 显示了 99 到 100 之间的上述行为。
基于上述,我可以假设 Python 是在内部实现的,因此“小”整数的存储方式与较大的整数不同,is
操作员可以分辨出差异。为什么有泄漏的抽象?当我事先不知道它们是否是数字时,比较两个任意对象以查看它们是否相同的更好方法是什么?
python - __slots__ 的用法?
Python的目的是什么__slots__
——尤其是关于我什么时候想用它,什么时候不想用?
python - CPython 中的全局解释器锁 (GIL) 是什么?
什么是全局解释器锁,为什么会出现问题?
从 Python 中删除 GIL 引起了很多争论,我想了解为什么这如此重要。我自己从来没有写过编译器或解释器,所以不要吝啬细节,我可能需要他们理解。
python - 如何覆盖 Python 对象的复制/深度复制操作?
copy
我了解与deepcopy
复制模块中的区别。我之前成功地使用过copy.copy
and copy.deepcopy
,但这是我第一次真正开始重载__copy__
and__deepcopy__
方法。我已经在 Google 上搜索并查看了内置的 Python 模块以查找__copy__
and__deepcopy__
函数的实例(例如sets.py
、decimal.py
和fractions.py
),但我仍然不能 100% 确定我做对了。
这是我的场景:
我有一个配置对象。最初,我将使用一组默认值实例化一个配置对象。此配置将移交给多个其他对象(以确保所有对象都以相同的配置开始)。然而,一旦用户交互开始,每个对象都需要独立调整其配置,而不会影响彼此的配置(这对我来说,我需要对我的初始配置进行深度复制以进行处理)。
这是一个示例对象:
在这个对象上实现copy
和deepcopy
方法以确保copy.copy
并copy.deepcopy
给我正确的行为的正确方法是什么?
python - 关于 Python 内置的 sort() 方法
Python中的内置sort()
方法使用什么算法?是否可以查看该方法的代码?
python - Python编译/解释过程
我试图更清楚地理解 python 编译器/解释器过程。不幸的是,我没有上过口译课,也没有读过很多关于口译的文章。
基本上,我现在所理解的是,.py
文件中的 Python 代码首先被编译成 python 字节码(我假设是.pyc
我偶尔看到的文件?)。接下来,字节码被编译成机器码,一种处理器真正理解的语言。差不多,我读过这个线程Why python compile the source to bytecode before interpreting?
有人可以给我一个很好的解释整个过程,记住我对编译器/解释器的了解几乎不存在吗?或者,如果这不可能,也许可以给我一些资源来快速概述编译器/解释器?
谢谢
python - 访问分配给正在创建的对象的名称
我正在编写一些代码来确定分配给对象的名称。这是用于一般调试工作并进一步熟悉 python 内部结构。
我将其结构化为类装饰器,以便如果可能的话,该类的所有实例都将记录其名称。代码相当长,所以除非被问到,否则我不会发布它。一般技术如下
用代码装饰类的
__init__
方法来做我想做的事设置
caller = inspect.currentframe().f_back
并打开inspect.getframeinfo(caller).filename
并将其发送到ast.parse
. 我在这里不做任何错误检查,因为(1)这只是为了调试/分析/黑客(2)这个确切的过程“刚刚”完成,或者代码不会运行。这有问题吗?找到
ast.Assignment
导致当前正在执行的__init__
方法运行的实例如果
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”标签。
python - 为什么 id({}) == id({}) 和 id([]) == id([]) 在 CPython 中?
为什么 CPython(不知道其他 Python 实现)有以下行为?
我有一些想法为什么会这样,但找不到具体的原因。
编辑
为了进一步证明 Glenn 和 Thomas 的观点: