V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zhuzhuaini
V2EX  ›  Python

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

  •  
  •   zhuzhuaini · 2022-08-27 13:54:07 +08:00 · 2677 次点击
    这是一个创建于 851 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如代码
    '''
    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,看起来运行这个函数之后什么都没有做!这就让我很困扰,我应该怎么去查找这个函数的真正实现的代码?
    10 条回复    2022-09-30 17:20:26 +08:00
    tulongtou
        1
    tulongtou  
       2022-08-27 13:59:38 +08:00 via iPhone
    去看 c 源码
    zhuzhuaini
        3
    zhuzhuaini  
    OP
       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
        4
    xiri  
       2022-08-27 14:42:22 +08:00 via Android
    @zhuzhuaini cpython 解释器就是用 c 写的啊,一些标准库也用 c 来实现加快运行速度不是很正常嘛。
    另外这些 c 源码并不是你运行的时候才去编译的,你安装的 python 里面就都是已经编译好了的链接库,所以找不到对应的.c 文件
    zhuzhuaini
        5
    zhuzhuaini  
    OP
       2022-08-27 15:04:30 +08:00
    @xiri 明白了 感谢回复!!谢谢解答
    julyclyde
        6
    julyclyde  
       2022-08-29 13:32:34 +08:00
    @zhuzhuaini 为什么用“难道”来问去执行 C 语言了这个事呢?
    zhuzhuaini
        7
    zhuzhuaini  
    OP
       2022-08-30 10:32:08 +08:00
    @julyclyde 因为我起先不知道 python 最后会转成 C...我以为和 C java 啥的一样呢
    julyclyde
        8
    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
        9
    zhuzhuaini  
    OP
       2022-08-30 10:53:28 +08:00
    @julyclyde 嗯嗯 在看了~感谢解答
    ipwx
        10
    ipwx  
       2022-09-30 17:20:26 +08:00
    @zhuzhuaini "因为我起先不知道 python 最后会转成 C"

    这句话不对。Python 代码是由 Python 解释器运行的,是一个 C 语言写的虚拟机,模拟了某种指令集的 “CPU”。但是这种执行方式注定了 Python 大部分代码不够快,所谓 Python 也支持调用编译好的本机函数。标准库的很多函数都是用 C 写的预先编译好的函数。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5184 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 09:31 · PVG 17:31 · LAX 01:31 · JFK 04:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.