怎么看 Python 标准库中的实现方式

2022-08-27 13:54:07 +08:00
 zhuzhuaini
比如代码
'''
import binascii
b = binascii.a2b_hex('FDDF11')
'''
作用是可以将字符串转换成 16 进制 byte 格式输出

又或者代码
'''
c =bytes.fromhex('F1DD')
print(c)
'''
也是同样的作用

我想参考下 python 标准库是如何去转换的,所以我在 pycharm 中使用 CTRL+B 跳转到 a2b_hex 或者 fromhex 函数中去,但是得到的代码都只是
'''
def a2b_hex(*args, **kwargs): # real signature unknown
"""
Binary data of hexadecimal representation.

hexstr must contain an even number of hex digits (upper or lower case).
This function is also available as "unhexlify()".
"""
pass
'''

就这么点代码,仅仅只有一段注释+pass,看起来运行这个函数之后什么都没有做!这就让我很困扰,我应该怎么去查找这个函数的真正实现的代码?
2678 次点击
所在节点    Python
10 条回复
tulongtou
2022-08-27 13:59:38 +08:00
去看 c 源码
westoy
2022-08-27 14:02:42 +08:00
zhuzhuaini
2022-08-27 14:11:50 +08:00
@tulongtou
@westoy
为啥是 C 源码,而且我装完 python 之后 电脑中也没有一个名字叫 binascii.c 或者 binascii.cpp 这样的文件呀

难道 python 底层是去执行 C 语言了 而且这个 C 的源代码文件名还与 python 的包名不一样 比如 python 中包名叫 binascii.py 但是他对应的 C 可能叫 abc.c? 那去哪里可以找到这种对应关系呢
xiri
2022-08-27 14:42:22 +08:00
@zhuzhuaini cpython 解释器就是用 c 写的啊,一些标准库也用 c 来实现加快运行速度不是很正常嘛。
另外这些 c 源码并不是你运行的时候才去编译的,你安装的 python 里面就都是已经编译好了的链接库,所以找不到对应的.c 文件
zhuzhuaini
2022-08-27 15:04:30 +08:00
@xiri 明白了 感谢回复!!谢谢解答
julyclyde
2022-08-29 13:32:34 +08:00
@zhuzhuaini 为什么用“难道”来问去执行 C 语言了这个事呢?
zhuzhuaini
2022-08-30 10:32:08 +08:00
@julyclyde 因为我起先不知道 python 最后会转成 C...我以为和 C java 啥的一样呢
julyclyde
2022-08-30 10:40:58 +08:00
@zhuzhuaini 可以参考一下文档
https://docs.python.org/3/faq/general.html
How do I obtain a copy of the Python source?¶
这一段

不过标准库里面 C 语言那部分,和 python 那部分,确实不太一样。用 python 语言写的那些库,和使用者自己写的程序一样都是编译成 bytecode 然后被语言虚拟机执行的,和 JVM 类似
zhuzhuaini
2022-08-30 10:53:28 +08:00
@julyclyde 嗯嗯 在看了~感谢解答
ipwx
2022-09-30 17:20:26 +08:00
@zhuzhuaini "因为我起先不知道 python 最后会转成 C"

这句话不对。Python 代码是由 Python 解释器运行的,是一个 C 语言写的虚拟机,模拟了某种指令集的 “CPU”。但是这种执行方式注定了 Python 大部分代码不够快,所谓 Python 也支持调用编译好的本机函数。标准库的很多函数都是用 C 写的预先编译好的函数。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/875792

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX