python3 format,为什么使用f'{<变量>:.1f}格式化字符串要加f

f-string是python3 format3.6提供的一种新的格式化字符串嘚方法 与其他格式化方式相比,代码更具可读性更简洁且不易出错,而且速度更快! 在本文中您将了解如何以及为什么现在就开始使用f-string。在使用f-string之前我们还是先了解下之前是如何处理格式化的。

python3 format中的“老式”字符串格式

在python3 format 3.6之前有两种方法可以将python3 format表达式嵌入字符串芓面量进行格式化:%-formatting和str.format()。您将看到如何使用它们以及它们的局限性

这是python3 format格式化的元老方式,从一开始就存在于该语言中你可以在python3 format文档中閱读更多内容。请记住%-formatting不被python3 format文档推荐,文档中包含以下注意事项:

“这里描述的格式化操作会表现出各种古怪导致许多常见错误(例如未能正确显示元组和字典)。 使用较新的格式化字符串文字或str.format()接口有助于避免这些错误 替代方案还提供了更强大,灵活和可扩展的攵本格式化方法”

字符串对象有一个使用%操作符的内置操作,您可以使用该操作符来格式化字符串下面是实际情况:

为了插入多个变量,必须使用这些变量的元组你应该这样做:

您刚才看到的代码还尚可阅读。然而一旦开始使用几个参数和更长的字符串,代码将很快变嘚不太容易阅读

所以这种格式并不是很好,因为它很冗长而且会导致错误,比如不能正确地显示元组或字典幸运的是,未来的日子會更加光明

str.format()是对%-formatting的改进。它使用普通函数调用语法并可通过转换为字符串对象的format()方法进行扩展。

通过引用变量的索引你可以以任何順序引用变量:

但如果你插入了变量名,你就可以在括号之间传递对象然后引用参数和方法:

 

你也可以使用**来处理字典,使代码更加简洁:

 

使鼡str.format()的代码比使用%-formatting的代码更容易读懂但是当你处理多个参数和较长的字符串时,str.format()仍然可能相当冗长比如下面的代码:

如果在字典中有想要傳递给.format()的变量,那么只需使用.format(**some_dict)对其进行解包并在字符串中按键引用值,但必须有更好的方法来做到这一点

f-strings是字符串字面量,它以f开头花括号包含的表达式将被它们的值所替换。表达式在运行时计算然后使用__format__协议进行格式化。和往常一样当你想了解更多的时候,python3 format文檔是你的朋友

以下是f-strings可以让你的生活更轻松的一些方法。

语法类似于您使用str.format()时使用的语法但更简洁。看看这是多么容易读懂:

也可以使鼡大写字母F:

因为f-string是在运行时计算的所以可以在其中放入任何和所有有效的python3 format表达式。这允许你做一些漂亮的事情

你可以做一些非常简单嘚事情,像这样:

但是你也可以调用函数这里有一个例子:

你也可以直接调用一个方法:

您甚至可以使用由带有f-string的类创建的对象。假设你有下媔的class:

 

__str__()__repr__()方法处理对象如何使用字符串表示因此您需要确保在类定义中至少包含这些代码。如果你必须选择一个使用__repr__(),因为它可以用来玳替__str__()

str**()返回的字符串是对象的非正式字符串表示形式,应该是可读的repr**()返回的字符串是正式的表示形式,应该是无二义性的调用str()repr()比直接使用__str__()__repr__()更可取。

但是请记住您需要在多行字符串的每行前面放置一个f。下面的代码不能工作:

如果你不把f放在每一行的前面那么它就昰的普通的字符串,不会有格式化效果如果你想把字符串分散到多行,你也可以选择用\来转义返回:

但如果你使用"""会发生这样的情况:

f字苻串中的f也可以代表“快”。f-string%-formattingstr.format()都要快正如您已经看到的,f-string是在运行时计算的表达式而不是常量值。以下是这些文档的摘录:

”F-strings提供叻一种方法使用最小的语法将表达式嵌入到字符串字面量中。应该注意的是f-string实际上是在运行时计算的表达式,而不是常量值在python3 format源代碼中,f-string是一个前缀为f的文字字符串它包含大括号中的表达式。表达式被它们的值代替”

在运行时,花括号内的表达式在它自己的范围內计算然后与f-string的字符串文字部分放在一起。然后返回结果字符串

这里是一个速度的比较:

如你所见,f-string速度最快

然而,情况并非总是如此当它们第一次被实现时,还是有一些速度问题需要比str.format()更快。引入了一个特殊的BUILD_STRING操作码

可以在表达式内使用各种类型的引号。只是偠确保在f-string的外部使用的引号类型与在表达式中使用的引号类型不同

下面这段代码也可以运行:

如果你发现你需要在字符串的内部和外部使用相同类型的引号,那么你可以用\:

说到引号在使用词典时要特别当心。如果您打算对字典中的键使用单引号那么请记住确保对包含鍵的f-string使用双引号。

 

但下面的代码会导致语法错误:

 

如果在字典键周围使用与在f-string外部相同类型的引号那么第一个字典键开头的引号将被解釋为字符串的结束。

为了让大括号出现在字符串中你必须使用双大括号:

注意,使用三括号将导致在你的字符串中只有一个括号:

如前所述可以在f-string的字符串部分中使用反斜杠转义。但是你不能在f-string的表达式部分使用反斜杠来转义:

你可以通过预先计算表达式并在f-string中使用结果来解决这个问题:

表达式不应该包含使用#符号的注释。你会得到一个语法错误:

您仍然可以使用旧的格式化字符串的方法但是有了f-strings,您现在有叻一种更简洁、可读和方便的方法既更快又不容易出错。根据《》当你决定如何做某事时,“这里应该有一个——最好只有一个——奣显的方法来做这件事”虽然f-strings不是你格式化字符串的唯一可能的方式,但它们处于一个很好的位置成为一种明显的方式来完成这项工莋。

这篇文章主要介绍了详解python3 format中的format格式化函数的使用方法文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值需要的朋友们下面随着小编來一起学习学习吧

format函数实现字符串格式化的功能

通过 : 和 {} 来控制字符串的操作

②通过传递多值参数向format传递参数进而对{}进行赋值

关于多值参数,可以看一下

- 使用**传递字典

在python3 format中,使用**可以传递一个字典参数我们可以使用键名进行匹配,进而进行赋值

 

我们向format()传递的字典参数所包含的键值对,必须包含所有的{}名只能多(正确),不能少(报错)


注意:我们可以向format()中传递多个字典,但是不可以含有相同键

 
 


除了传递一個列表,我们也可以向format()中传递多个列表只需保证取值的时候无误就可以。

 

③向format()中传入对象进行赋值

与列表相同,我们同样可以向format()中传遞多个对象只要在赋值的之后做好对应就可以。

 

对于数字的格式化我们主要是在{}中进行设置格式化数字的多种方法

 

2.带符号保留小数点後n位

 

负数无区别,整数有无符号

 

3.不带小数(只保留整数)


 

4.如果整数的位数不足n位,在左边进行数字补零如果已经够了n位,直接输出

 

5.如果整數的位数不足n位在右边进行x补充。如果已经够了n位直接输出

 

很显然,在补充操作中我们既可以指定在哪一边补充,也可以指定补充嘚值为什么

6.以逗号分隔数字格式,每三位加入一个,

 

7.百分比格式(在我理解就是把数字×100,保留两位数字然后加一个百分号)

 
 

9.右对齐(默认寬度为10)

 

10.左对齐(默认宽度为10)

 

11.中间对齐(默认宽度为10)

 

12.进制——b、d、o、x 分别是二进制、十进制、八进制、十六进制。

 

当我们在格式化中传入的参數中包含{}的时候,我们可以用{}进行转义
当我们直接在format()中对参数进行赋值的时候,我们必须要把对参数的赋值放在最后

 

以上就是本文的全蔀内容希望对大家的学习有所帮助,也希望大家多多支持脚本之家

1、若要格式化字符串可在字符串开始引号前添加f或F。

2、通过这种方式我们可以直接中引入变量值,只需将变量放在{ 和 }之间

将python3 format变量放入{}外,还可将函数放入{}:

以上就昰python3 format使用f格式化字符串的方法希望对大家有所帮助。更多python3 format学习指路:

我要回帖

更多关于 python3 format 的文章

 

随机推荐