str.format()函数的用法小结【非‘str***{}‘.format()】

目录

一、文章起因

二、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)

私以为,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表达

3.1 print('**%f**' %x)

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

3.2 print(f'**{xx}**')

也即「简写成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 小坏蛋.

3.3 print(***{}***.format(*args)

(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

四、format独立自主、摆脱print,“实现输出自由”

貌似大部分带字符串的输出,都必须用到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)

你可能感兴趣的:(Python,python)