Python 的字符串拼接 join、format 源码理解,有大佬给我讲一下吗?

2018-07-23 22:27:05 +08:00
 ChenJHua

Python 的字符串拼接 join、format 源码理解,有大佬给我讲一下吗?小白刚入门,不知道怎么看源码,有大佬告知一下怎么看源码之类的,万分感谢。

3845 次点击
所在节点    Python
9 条回复
lhx2008
2018-07-23 22:30:59 +08:00
百度一下很难吗,我都不想说谷歌了
lhx2008
2018-07-23 22:39:16 +08:00
whoami9894
2018-07-23 22:44:11 +08:00
放心吧,不会有人给你讲的
copie
2018-07-23 23:40:23 +08:00
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.
xiexingjia
2018-07-24 00:22:02 +08:00
觉得楼主想问的是 join format 怎样用

找本书去看
matrix273
2018-07-24 00:43:06 +08:00
多练习几个语句就好了,又不会怀孕。
C90
2018-07-24 09:28:53 +08:00
上来就造原子弹?
wizardoz
2018-07-24 09:39:52 +08:00
我一直认为看 python 源码对于学 python 没啥用,这是我不看源码的理由
bpllzbh
2018-07-24 10:59:27 +08:00
@wizardoz 你说的还特么有点道理的, /坏笑

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

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

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

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

© 2021 V2EX