Python格式化输出
Python格式化输出主要有三种方式,1、%-formatting;2、str.format();3、f-Strings
%-formatting
字符串对象具有实用%运算符的内置操作,您可以使用它来格式化字符串。
以下是部分字符串格式符号:
符号 | 说明 |
---|---|
%s | 字符串 |
%c | 字符 |
%i | 整数 |
%d | 十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数 |
%e | 浮点数1 |
%f | 浮点数2 |
%g | 浮点数3 |
# 整数输出
print('%o' % 10) # 八进制
print('%d' % 10) # 十进制
print('%x' % 10) # 十六进制
# 运行结果
12
10
a
# 浮点数输出
print('%f' % 0.123456333) # (默认)保留小数点后六位有效数字
print('%.3f' % 0.123456333) # 保留小数点后三位有效数字
print('%e' % 0.123456333) # 保留小数点后六位有效数字,以指数形式输出
print('%.3e' % 0.123456333) # 保留小数点后三位有效数字,以指数形式输出
print('%g' % 0.123456333) # 保留六位有效数字的前提下,以小数形式输出,否者以指数形式输出
print('%.8g' % 0.123456333)
print('%.2g' % 0.123456333)
print('%.2g' % 123.4563333) # 保留两位有效数字,无法使用小数形式,以指数的形式
# 运行结果
0.123456
0.123
1.234563e-01
1.235e-01
0.123456
0.12345633
0.12
1.2e+02
# 字符串输出
print('%s' % 'i love python')
print('%20s' % 'i love python') # 右对齐,占20位,不够则补位
print('%-20s' % 'i love python') # 左对齐,占20位,不够则补位
print('%.3s' % 'i love python') # 右对齐,截取3位字符串
print('%20.3s' % 'i love python') # 右对齐,占20位,截取3位字符串,不够则补位
# 运行结果
i love python
i love python
i love python
i l
i l
%-formatting 的方式并不好用,上面我们的示例代码很容易看明白。但是当我们使用更多的参数和更长的字符串,代码就开始变得不太容易阅读,变得十分凌乱:
first_name = "Eric"
last_name = "Idle"
age = 74
profession = "comedian"
affiliation = "Monty Python"
"Hello, %s %s. You are %s. You are a %s. You were a member of %s." %\
(first_name, last_name, age, profession, affiliation)
# 运行结果
Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.
str.format()
str.format()是对 %-formatting 的改进,相对于 %-formatting ,str.format()功能更加强大,该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用大括号“{}”作为特殊字符代替“%”。
通过代码查看它的使用方法:
print('{} {} {}'.format('i', 'love', 'python')) # 替换字段使用{}标记
print('{0} {1} {2}'.format('i', 'love', 'python')) # 也可以通过引用索引以任何顺序引用变量
print('{2} {1} {0}'.format('i', 'love', 'python')) # 带索引可以任意调换顺序
print('{year}/{month}/{day}'.format(year='2018', month='10', day='21')) # 带变量名称,通过变量名称查找字符串
# 通过使用 ** 来用字典传递值
person = {name:'Eric', age:17}
print("Hello,{name},You are {age}.".format(**person))
# 运行结果
i love python
i love python
python love i
2018/10/21
Hello,Eric,You are 17.
使用str.format()的代码比使用%-formatting的代码更易读,但当处理多个参数和更长的字符串时,str.format()仍然可能非常冗长。看看这个:
first_name = "Eric"
last_name = "Idle"
age = 74
profession = "comedian"
affiliation = "Monty Python"
print(("Hello, {first_name} {last_name}. You are {age}. " +
"You are a {profession}. You were a member of {affiliation}.")
.format(first_name=first_name, last_name=last_name, age=age, profession=profession, affiliation=affiliation))
# 运行结果
Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.
f-Strings:一种改进Python格式字符串的新方法
f-Strings使格式化更容易,也可以节省很多时间。以下是f-strings使用的一些方法。
a = 'i'
b = 'love'
c = 'python'
print(f"{a} {b} {c}") # 使用大写字母F也是有效的
# 运行结果
i love python
我们同样可以使用f{}调用函数:
print(f"{first_name.lower()} is funny.")
# 运行结果
eric is funny.
f-Strings性能:
f字符串中的f也可以代表“速度快”。f-字符串比%-formatting和str.format()都快。正如你已经看到的,f-字符串是运行时渲染的表达式,而不是常量值。在运行时,大括号内的表达式将在其自己的作用域中进行求值,然后将其与其余字符串组合在一起。
现在你已经知道了为什么F字符串很好,我确定你想要出去并开始使用它们。当你冒险进入这个勇敢的新世界时,请记住一些细节。
引号
您可以在表达式中使用各种类型的引号。只要确保在表达式中使用的f-Strings外部没有使用相同类型的引号即可。
以下写法都是正确的:
f"{'Eric Idle'}"
# 运行结果:
'Eric Idle'
f'{"Eric Idle"}'
# 运行结果:
'Eric Idle'
f"""Eric Idle"""
# 运行结果:
'Eric Idle'
f'''Eric Idle'''
# 运行结果:
'Eric Idle'
f"The \"comedian\" is {name}, aged {age}."
# 运行结果:
'The "comedian" is Eric, aged 74.'
字典
说到引号,注意你在使用字典的时候。如果要为字典的键使用单引号,请记住确保对包含键的f字符串使用双引号。
以下代码是有效的:
comedian = {'name': 'Eric Idle', 'age': 74}
print(f"The comedian is {comedian['name']}, aged {comedian['age']}.")
# 运行结果:
'The comedian is Eric Idle, aged 74.'
但是,以下代码就是一个语法错误:
print(f'The comedian is {comedian['name']}, aged {comedian['age']}.')
- File "<ipython-input-40-cd7d8a3db23b>", line 1
f'The comedian is {comedian['name']}, aged {comedian['age']}.'
^
SyntaxError: invalid syntax
大括号
为了使字符串出现大括号,您必须使用双大括号:
print(f"{{74}}")
# 运行结果:
{74}
但是,如果使用三个以上的大括号,则可以获得更多大括号:
print(f"{{{{74}}}}")
# 运行结果:
{{74}}
反斜杠
正如您之前所看到的,您可以在f字符串的字符串部分使用反斜杠转义符。但是,您不能使用反斜杠在f字符串的表达式部分中进行转义:
print(f"{\"Eric Idle\"}")
- File "<ipython-input-43-35cb9fe0ccc1>", line 1
f"{\"Eric Idle\"}"
^
SyntaxError: f-string expression part cannot include a backslash
lambda表达式
如果您需要使用lambda表达式,请记住,解析f-字符串的方式会稍微复杂一些。
如果!, :或}不在括号,大括号,括号或字符串中,则它将被解释为表达式的结尾。由于lambda使用:,这可能会导致一些问题:
f"{lambda x: x * 37 (2)}"
- File "<fstring>", line 1
(lambda x)
^
SyntaxError: unexpected EOF while parsing
您可以通过将您的lambda嵌套在圆括号中来解决此问题:
f"{(lambda x: x * 37) (2)}"
# 运行结果:
74
结束语
文章主要参考:http://www.mlln.cn/2018/05/19/python3 f-string格式化字符串的高级用法/
上一篇: js语句的简单运用编程基础
下一篇: c++ 数组的定义 已经简单的运用