目录
一、文章起因
二、str.format(self,*args)
三、主流print表达
3.1 print('**%f**' %x)
3.2 print(f'**{xx}**')
3.3 print(***{}***.format(*args)
四、format独立自主、摆脱print,“实现输出自由”
五、参考来源
由于本人在用《深度学习-基于案例理解深度神经网络》学习时,作者给出的代码类似下面
#输入
cost = 6.512345
print(str.format('代价函数的结果取值={0:.6f}', cost))
#输出
代价函数的结果取值=6.512345
然后我在百度谷歌上搜索「str.format」的用法,得到的全都是如下面将字符串主体放在format外的用法
print('{} {}'.format('hello','world')) # 不带字段
hello world
print('{0} {1}'.format('hello','world')) # 带数字编号
hello world
print('{0} {1} {0}'.format('hello','world')) # 打乱顺序
hello world hello
print('{1} {1} {0}'.format('hello','world'))
world world hello
所以不得不自己钻研再三,然后总结如下。
私以为,str.format(self,*args)是format函数的一种高级表达。貌似如果用这种方法,只能用一个替换,多个替换就会说超过参数域。
print('hello,world,I am {} {} {}'.format('小','坏','蛋') # 实际的字符串替代str
print(str.format('hello,world,I am {}',['小坏蛋'])) #利用str类下的format函数输出字符串
print(str.format('hello,world,my number is {:.6f}', 8.888))
#输出结果
hello,world,I am 小 坏 蛋
hello,world,I am 小坏蛋
hello,world,my number is 8.888000
#错误表达
print(str.format('hello,world,I am {} {} {}',['小','坏','蛋']) #貌似只能有一个参数插入到str中
#IndexError: Replacement index 1 out of range for positional args tuple
print('This is a number equal to %f' %1.11)
# This is a number equal to 1.110000
如果想要输出多个变量怎么办?用圆括号括起来!
print('This is a number equal to %f, instead of %d' %(1.11,1))
#This is a number equal to 1.110000, instead of 1
也即「简写成f放在print最前面」。具体如下面的代码块所示。
注意:这种f方法,后面只能有一个单引号或双引号,不能在f后加双引号的同时也在{}里加双引号,也不能在f后加单引号的同时也在{}里加单引号。
# 输出数字(整数、浮点、复数),直接输出,不用加引号
print(f'Hello world, I am No.{1}') # 直接输出Hello world, I am No.1
one = 1
print(f'Hello world, I am No.{one}') # 间接输出Hello world, I am No.1
# 直接输出字符串,如果f后时单引号,花括号里一定要用双引号
print(f'Hello world, I am {"小坏蛋"}.') # Hello world, I am 小坏蛋.
print(f'Hello world, I am {'小坏蛋'}.') # SyntaxError: invalid syntax
# 或者在f后加双引号,就可以在后面的字符串替换部分加单引号
print(f"Hello world, I am {'小坏蛋'}.") # Hello world, I am 小坏蛋.
# 利用变量间接输出字符串,才不需要加引号
y = '小坏蛋'
print(f'Hello world, I am {y}.') # Hello world, I am 小坏蛋.
(1)如果花括号内不含任何内容,就是按位置替换
(2)如果按序号替换,可以打乱顺序。并且如果元素是序列(列表、元组、字典等),或者是复数,还可以替换其子内容(复数的子内容包括它的实部和虚部,列表的子内容是它的各个维度的元素,类的子内容是其中的变量或者函数)。
print('复数的实部={0.real},虚部={0.imag}'.format(1+2j))
#复数的实部=1.0,虚部=2.0
print('列表的一个子内容是{0[1][1]}'.format([[1,2],[1,2]]))
# 列表的一个子内容是2
(3)同理,按关键字替换,也可以不按位置顺序摆放。
(4)在一个输出主体中,可以同时包括「按位置替换」和「按序号替换」。
print('{} {}'.format('hello','world')) # 不带字段
hello world
print('{0} {1}'.format('hello','world')) # 带数字编号
hello world
print('{0} {1} {0}'.format('hello','world')) # 打乱顺序
hello world hello
print('{1} {1} {0}'.format('hello','world'))
world world hello
print('{a} {tom} {a}'.format(tom='hello',a='world')) # 带关键字
world hello world
貌似大部分带字符串的输出,都必须用到print函数,但是下面这种表达,却可以避开print垄断,实现独立自主的输出自由。
同理:也不能在f后面、{}里面同时用双引号或单引号。
但是这种方法有一定缺陷,那就是输出的字符串还带单引号。
独立自主的道路是艰辛的、备受质疑的,但是,我们一定要相信——只要坚持到底,就一定能追上国际先进水平!致敬!!!
# 独立自主道路1:a.format(b)
"{0} {1}".format("hello","world")
#'hello world'
# 独立自主道路2:f"xxxx"或f'xxxx'
f"{'hello'} {'world'}"
或
f'{"hello"} {"world"}'
#输出都是'hello world'
python print(%用法和format用法)_wjqhit的专栏-CSDN博客_print
python的print(f‘)_wuli_xin的博客-CSDN博客_python中print(f)