Python字符串拼接方法join和format的源码理解,有大佬给我讲一下吗?
Python 的字符串拼接 join、format 源码理解,有大佬给我讲一下吗?小白刚入门,不知道怎么看源码,有大佬告知一下怎么看源码之类的,万分感谢。
Python字符串拼接方法join和format的源码理解,有大佬给我讲一下吗?
百度一下很难吗,我都不想说谷歌了
join和format的源码实现思路完全不同。
join是字符串对象的方法,但实际调用的是序列中每个元素的__str__()方法。在CPython源码Objects/stringobject.c中,join的核心逻辑是:
- 计算序列中所有字符串的总长度
- 分配足够的内存空间
- 依次拷贝每个子字符串到目标位置
关键点:join要求序列元素必须是字符串,因为它直接进行内存拷贝,效率很高。
format则是通过__format__协议实现的。在Objects/stringobject.c的string_format()函数中:
- 解析花括号{}中的格式说明符
- 调用对应对象的__format__()方法
- 根据格式说明进行格式化(如对齐、填充、精度等)
format更灵活,可以处理各种数据类型,但解析格式字符串需要额外开销。
简单说:join是简单的内存拼接,format是复杂的格式化引擎。
放心吧,不会有人给你讲的
join 是首先遍历 list 中的每一个字符串确定 maxchar 通过 maxchar 和所有字符串的长度和 sz 通过 PyUnicode(sz,maxchar) 创建新的字符串对象 然后通过每一个字符串的长度和偏移将 list 字符串快速拷贝到新串中。
format 其实是先通过 FORMAT_VALUE 将其他类型转换为 str 类型并且把 str 压入栈。然后进行 join
join 和 format 两个都落实到 _PyUnicode_JoinArray()这个函数上去了。
比如 f"{100},200,{300}"等同与’’.join([‘100’,’,200,’,‘300’])
说到效率问题因为 join 只能连接字符串而且 FORMAT_VALUE 这个字节码他的具体计算会落实到 Python 实现所以转化的效率不高。
也就是说 join 和 format 的效率区别在于 format 需要将其他类型转化成为 str 而且这个转化过程还是 Python 实现的而 join 只针对与 str.
觉得楼主想问的是 join format 怎样用
找本书去看
多练习几个语句就好了,又不会怀孕。
上来就造原子弹?
我一直认为看 python 源码对于学 python 没啥用,这是我不看源码的理由
你说的还特么有点道理的, /坏笑

