Python提倡用一种,而且最好是只有一种方法来完成一件事。可是在字符串格式化方面Python好像没有做到这一点。除了基本的格式,还有格式、以及。根据对Python标准库的统计,目前的使用屈指可数,获得广泛使用,但是我们来与其他几种语言的字符串格式化对比一下:
已知,我们如何打印出字符串?
Ruby:
- puts 'My name is #{name}.'
复制代码 JavaScript(ECMAScript 2015):
- console.log(`My name is ${name}.`)
复制代码 Python:
- print('My name is {name}.'.format(name = name))
复制代码- print('My name is {}.'.format(name))
复制代码 可以看出Python明显还不够简洁,于是,随着Python3.6版本在上周正式发布,Python又提供了一种字符串格式化语法——'f-strings'。
[h1]f-strings[/h1]要使用f-strings,只需在字符串前加上,语法格式如下:
[h2]基本用法[/h2]- >>> f"His name is {name}, he's {age} years old."
复制代码- >>> "His name is Tom, he's 3 years old."
复制代码- [/code]
- [h2]支持表达式[/h2][list][*][*][*][*][*][*][*][*][*][*][*][/list][code]# 数学运算
复制代码- >>> f'He will be { age+1 } years old next year.'
复制代码- >>> 'He will be 4 years old next year.'
复制代码- >>> spurs = {"Guard": "Parker", "Forward": "Duncan"}
复制代码- >>> f"The {len(spurs)} players are: {spurs['Guard']} the guard, and {spurs['Forward']} the forward."
复制代码- >>> 'The 2 players are: Parker the guard, and Duncan the forward.'
复制代码- [/code][code]>>> f'Numbers from 1-10 are {[_ for _ in range(1, 11)]}'
复制代码- >>> 'Numbers from 1-10 are [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]'
复制代码 [h2]排版格式[/h2]- print(f"{'Position':^10}{'Name':^10}")
复制代码- print(f"{player:^10}{spurs[player]:^10}")
复制代码 [h2]数字操作[/h2]- >>> f'int: 31, hex: {31:x}, oct: {31:o}'
复制代码- 'int: 31, hex: 1f, oct: 37'
复制代码 [h2]与原始字符串联合使用[/h2]
[h1]注意事项[/h1][h2]内不能包含反斜杠[/h2]- SyntaxError: f-string expression part cannot include a backslash
复制代码- [/code][code]# 而应该使用不同的引号,或使用三引号。
复制代码- >>> f"His name is {'Tom'}"
复制代码 [h2]不能与联合使用[/h2]是为了与Python2.7兼容的,而Python2.7不会支持f-strings,因此与联合使用不会有任何效果。
[h2]如何插入大括号?[/h2]
[h2]与的一点不同[/h2]使用,非数字索引将自动转化为字符串,而f-strings则不会。
- >>> "Guard is {spurs[Guard]}".format(spurs=spurs)
复制代码- [/code][code]>>> f"Guard is {spurs[Guard]}"
复制代码- Traceback (most recent call last):
复制代码- f"Guard is {spurs[Guard]}"
复制代码- NameError: name 'Guard' is not defined
复制代码- [/code][code]>>> f"Guard is {spurs['Guard']}"
复制代码 最后一个栗子:
- [/code][code]# 以 f开头表示在字符串内支持大括号内的python 表达式
复制代码- print(f'{name} done in {time.time() - t0:.2f} s')
复制代码- # processing done in 1.00 s
复制代码 [code][/code]
|
|