问题标签 [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 的 list.remove(value) 如何确定要删除的值?
如果我有对象列表:
然后我删除其中一个对象:
python如何确定要删除列表中的哪个项目(在引擎盖下)?
它是否使用 的内存位置a
?(您可以查看hex(id(a))
)
python - Python 2 使用什么方法打印元组?
Python 的print
语句通常似乎打印了repr()
它的输入。元组似乎也不例外:
但后来我在搞乱 CPython 的内部时偶然发现了一些奇怪的行为。简而言之:如果你欺骗 Python 2 创建一个自引用元组,直接打印它的行为与打印它的//repr()
表示完全不同。str()
unicode()
那么具体在print
做什么呢?为了自己回答这个问题,我参考了语言参考:
6.6.
字符串转换的规则是:
5.2.9。字符串转换
字符串转换是用反向(也称为反向)引号括起来的表达式列表:
但是用反引号括起来与呼叫和朋友outer
的结果相同。repr()
没有骰子。那么到底print
在幕后到底在做什么呢?
(有趣的是,这种行为在 Python 3 中是“固定的”:打印自引用元组会给出省略号截断的形式。)
python - Writing (and not) to global variable in Python
Coming from much less dynamic C++, I have some trouble understanding the behaviour of this Python (2.7) code.
Note: I am aware that this is bad programming style / evil, but I would like to understand it non the less.
#xA;This code runs without error, and f
manipulates the (seemingly) global list. This is contrary to my prior understanding that global variables that are to be manipulated (and not only read) in a function must be declared as global ...
.
On the other hand, if I replace vals[0] = 5
with vals += [5,6]
, execution fails with an UnboundLocalError
unless I add a global vals
to f
. This is what I would have expected to happen in the first case as well.
Could you explain this behaviour?
Why can I manipulate vals
in the first case? Why does the second type of manipulation fail while the first does not?
Update:
It was remarked in a comment that vals.extend(...)
works without global
. This adds to my confusion - why is +=
treated differently from a call to extend
?
python - Pythonfrozenset散列算法/实现
我目前正在尝试了解为 Python 的内置frozenset
数据类型定义的哈希函数背后的机制。实现显示在底部以供参考。我特别感兴趣的是选择这种散射操作的基本原理:
其中h
是每个元素的哈希值。有谁知道这些是从哪里来的?(也就是说,选择这些数字有什么特别的原因吗?)还是他们只是随意选择的?
这是官方 CPython 实现的片段,
python - NoneType的实现、原因和细节
我最近在某处读到,None
python 中的特殊值是它自己类的单例对象,特别是NoneType
. 这解释了很多,因为涉及None
python 的大多数错误都会产生AttributeError
s 而不是一些特殊的“NoneError”或其他东西。
由于所有这些都AttributeErrors
反映了所NoneType
缺乏的属性,因此我对NoneType
确实具有的属性(如果有的话)产生了兴趣。
我决定对此进行调查NoneType
并了解更多信息。我一直发现了解新语言功能的最佳方法是使用它,因此我尝试NoneType
在 IDLE 中进行实例化:
这产生了一个错误:
很困惑,我检查None
了我是否得到了正确的类型名称。果然,
现在很困惑,我做了一个快速的谷歌搜索。这表明出于某种原因 NoneType 在 Python 3 中以某种方式被删除。
好吧,我虽然,哈哈!None
我可以通过将类型存储在变量中来解决这个问题,因为类是 python 中的对象。这似乎有效:
当我打印 n 时,我得到了几乎我所期望的:
但后来发生了这样的事情:
和:
我的变量n
是None
。不仅同类型None
。它是None
。这不是我所期望的。
我尝试使用dis
来获取更多信息NoneType
,但是当我打电话时
它没有产生任何输出。
然后我尝试调查该__new__
方法,几个用户在评论中提到了该方法:
更多错误。
以下是我的问题:
- 为什么
n
与 Object 完全相同None
? - 为什么将语言设计
n
为与 Object 完全相同None
? - 甚至如何在 python 中实现这种行为?
python - Python 属性实例行为
我知道什么是property/descriptor
和decorator
。但我很难理解这一点。
Descriptor
是类级别的对象。所以应该得到相同@name.setter
的描述符对象。当我在 and 之后添加打印语句时,我得到以下结果:@name.getter
name
setter
getter
(a) 和 (c) 语句具有相同的property
对象,但 (b) 没有。
有人可以解释一下为什么会这样还是我错过了什么?
python - Python unittest 模块中 unittest.main() 的含义
我试图学习 Python 中的单元测试,特别是unittest
模块。
考虑以下几行:
由于对unittest.main()
.
我只是想知道这个调用是如何让所有测试用例运行的。
我知道,因为我从unittest.TestCase
每个测试类继承,它正在做所有的魔法。有什么见解吗?
python - Python方法访问器在每次访问时创建新对象?
在调查另一个问题时,我发现以下内容:
这是意料之中的:
但这是我没想到的:
尤其不是这个:
Python 似乎为每个方法访问创建新对象。为什么我会看到这种行为?即它不能重用每个类和每个实例一个对象的原因是什么?
python - 元组 (a,b)=(b,a) 中的成员交换如何在内部工作?
这种 a 和 b 值的交换如何在内部工作?它绝对不使用临时变量。
python - “del”到底是做什么的?
这是我的代码:
当我从解释器运行它时,这就是输出:
Line # Mem 使用增量行内容
如果您注意到输出,创建巨大的列表消耗了 621.5 MB,而删除它只释放了 152.6 MB。当我检查文档时,我发现了以下语句:
所以我猜,它并没有删除对象本身,而是取消绑定它。但是,它释放了这么多空间(152.6 MB)在解除绑定时做了什么。有人可以痛苦地向我解释这里发生了什么吗?