差不多半个月前我介绍了 Python 最新的字符串格式化函数 format(),今天来介绍下 3.6 版本增加的新功能 formatted string literals ,简称 f-strings

使用

这是一个让人兴奋的格式化字符串的方式,为什么这么说,先来看看效果

1
2
3
4
5
>>> name = 'wxnacy'
>>> f'my name is {name}'
'my name is wxnacy'
>>> f'my name is {name} and length is {len(name)}'
'my name is wxnacy and length is 6'

之所以叫 f-strings ,就是要用 f 作为字符串的开头,就像 b'', u'' 那样,然后用 {} 中使用变量,甚至可以使用函数方法,就可以完成格式化,如果你也接触 Node 开发,就知道现在在 Javascript 中字符串的格式化通常是这样的

1
2
3
4
> name = 'wxnacy'
'wxnacy'
> `my name is ${name} and length is ${name.length}`
'my name is wxnacy and length is 6'

与 format() 对比

f-stringsformat() 格式化的语法完全一致,只是更加简洁

1
2
3
4
>>> f'{datetime.now():%Y-%m-%d %H:%M:%S.%s}'
'2018-01-16 11:37:18.1516073838'
>>> '{:%Y-%m-%d %H:%M:%S.%s}'.format(datetime.now())
'2018-01-16 11:44:34.1516074274'

从上面的例子可以看到,除了以 f 开头外,唯一的区别就在 datetime.now() 放在 : 的前面。这样关于数字、日期、对象等格式化的使用,只要看我这篇文章 Python 格式化函数 format 即可。

可以想象如果你的项目版本全面提到 3.6 以后,f-strings 格式化方法一定是首选,因为它不但简洁,并且,它的速度比 format() 快了一倍。

参考

03-16 13:57