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

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

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

共收到 8 条回复

有意思!

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

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