Python Python 也有 Ruby 的 string interpolation 了,无性能损失

est · 2015年04月08日 · 最后由 luikore 回复于 2015年04月09日 · 8516 次阅读

https://github.com/syrusakbary/interpy

# coding: interpy

package = "Interpy"
print "Enjoy #{package}!"

编译成 bytecode,性能无损失。。。。

感觉这是 AST transform 以后又一个特别有用的黑魔法

以后会不会出现 # coding: python3 这种无缝 2to3 转换呢。。。。哈哈哈哈。。。

dropbox 搞这个 pyxl 也是脑洞大开! https://github.com/dropbox/pyxl

有意思!

Ruby 还能这样

str = %(<a href="/">#{post.title}</a>)

#2 楼 @huacnlee 这个 trick 可以任意变换。。。。。。

本来就不会损失什么性能啊 其实你写成 "Enjoy #{package}!""Enjoy " + package.to_s + "!" 编译出的 bytecode 是一样的

#4 楼 @iBachue

Ruby 中不一样的,因为 String#+ 可以重载,interpolate 行为不能重载,可以生成更优化的代码。

在 Python 中也不一样的,因为 Python 字符串是 immutable 的,两次加法就要分配两个字符串。写成 interpolate 就可以优化成只分配一次。Python 运算符也可以重载,所以也不能贸然把中间结果优化掉

用 coding 这个想法确实不错。。。按这个思路还可以直接写 HTML 模板之类的……

#6 楼 @Kabie 这个已经被 dropbox 做出来了。顶楼有贴 https://github.com/dropbox/pyxl

需要 登录 后方可回复, 如果你还没有账号请 注册新账号