标签: python-internals

Python 如何绕过正常的属性查找来查找`__dict__`?

我知道__dict__ inobj.__dict__是 的描述符属性type(obj),因此查找obj.__dict__type(obj).__dict__['__dict__'].__get__(obj)

来自/sf/answers/3260320661/

很容易说它__dict__必须是一个描述符,因为__dict__将它实现为条目将需要您先找到 , __dict__然后才能找到__dict__,但是在查找其他属性时Python 已经绕过了正常的属性查找来查找__dict__,因此这并不像它最初听起来。如果描述符被替换为 each 中的一个'__dict__'__dict____dict__仍然可以找到。

“Python 已经绕过正常的属性查找来查找__dict__”如何?“正常属性查找”是什么意思?

根据链接中引用的上下文,我不认为作者在撰写该内容时提到了查找obj.__dict__type(obj).__dict__['__dict__'].__get__(obj).

python attributes descriptor python-3.x python-internals

0
推荐指数
1
解决办法
316
查看次数

可以在python中获得“地址值”吗?

在下面,我可以看到在 python 中添加一个整数时,它添加了整数,将该结果值分配给一个新的内存地址,然后将变量设置为指向该内存地址:

>>> a=100
>>> id(a)
4304852448
>>> a+=5
>>> id(a)
4304852608
Run Code Online (Sandbox Code Playgroud)

有没有办法查看(旧)内存地址 4304852448 (0x10096d5e0) 处的值是多少?例如:value_of(0x10096d5e0)

python cpython python-internals

0
推荐指数
1
解决办法
1334
查看次数

Python 第二次如何更快地读取这个二进制文件?

我正在探索读取格式化二进制文件的方法,并从基础开始:

>>> with open(fp, 'rb') as f:
        buffer = f.read()
Run Code Online (Sandbox Code Playgroud)

我的文件是 1.02GB,第一次读取它并存储在内存中需要大约 90 秒。偶然地,我不小心告诉解释器再次读取文件(按 Enter 太多次),它在 0.5 秒内读取了它。该文件在无意中重新阅读之前已关闭。

这里发生了什么?

python io python-internals

0
推荐指数
1
解决办法
79
查看次数

Python __class __()

在Python中,文档__class__被描述为属性.在对象type(元类)中,__class__似乎是一种方法.

如果我们这样做:

>>> class Foo:
        pass

>>> a = Foo()
>>> a.__class__ == type.__class__(a)
True
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:

  1. 当我们打电话时a.__class__,我们真的在调用这个方法type.__class__(a)吗?
  2. __class__是不是__dict__属性成员的原因a吗?

python types object-model python-3.x python-internals

-1
推荐指数
1
解决办法
2228
查看次数

C实现python的len函数的解释

当我遇到len函数的C实现时,我正在阅读有关python内置函数的实现的信息。

static PyObject *
builtin_len(PyObject *module, PyObject *obj)
/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
{
Py_ssize_t res;

res = PyObject_Size(obj);
if (res < 0) {
    assert(PyErr_Occurred());
    return NULL;
}
return PyLong_FromSsize_t(res);
Run Code Online (Sandbox Code Playgroud)

我无法理解这段代码中发生了什么。我不知道C是如何工作的。有人可以解释这段代码在做什么吗?

我从https://github.com/python/cpython/blob/master/Python/bltinmodule.c获取了代码

编辑:我只是很好奇len函数是如此之快,在这段代码中绊倒了。我只想知道为什么使用函数PyObject_Size检查对象的大小为零,然后使用PyLong_FromSsize_t返回实际大小。

c python cpython python-internals

-7
推荐指数
1
解决办法
213
查看次数