>>print contents of f.__enter__() #>> f = open("x.txt"-6ren">
gpt4 book ai didi

python - 有没有办法查看 python 解释器中 __enter__() 函数背后的代码?

转载 作者:太空宇宙 更新时间:2023-11-04 11:00:57 24 4
gpt4 key购买 nike

问题几乎说明了一切。

我想以这种方式查看代码:

>>>f = open("x.txt")
>>>print contents of f.__enter__() #<- how can I do this?

最佳答案

没有。 (除了查看 Python 源代码。)

>>> f = open("x.txt")
>>> f.__enter__
<built-in method __enter__ of file object at 0x022E4E90>

所以 __enter__ 的实现是在 Python 的 C 代码中的某个地方。

它实际上在 Objects/fileobject.c 中,您可以找到 in the Python source tree [注意:我认为这是 2.7 分支上当前最新的东西;可能有更好的链接方式] 并查看代码,您会发现实际上 f.__enter__ 返回 f 本身。当然,这就是这种特殊情况下发生的情况;其他对象的 __enter__ 方法将做完全不同的事情。

在这种情况下,__enter__ 方法恰好是 native 代码。在其他情况下,它可能是 Python 代码,但您通常仍然无法从 Python 内部看到它。

>>> import decimal
>>> decimal.localcontext().__enter__
<bound method _ContextManager.__enter__ of <decimal._ContextManager object at 0x02192B50>>

那是 Python 字节码而不是 native 代码。可以看到字节码:

import dis
dis.dis(decimal.localcontext().__enter__)

但不保证原始 Python 源代码可用。但是你可以试试:

import inspect
print inspect.getsource(decimal.localcontext().__enter__)

有时会做你想做的事。

关于python - 有没有办法查看 python 解释器中 __enter__() 函数背后的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5488971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com