0

0

Python中str.format()详解_python

不言

不言

发布时间:2018-04-04 17:27:14

|

2101人浏览过

|

来源于php中文网

原创

本文主要给大家详细介绍的是python编程中str.format()的基本语法和高级用法,非常的详细,并附有示例,希望大家能够喜欢

1. str.format 的引入

在 Python 中,我们可以使用 + 来连接字符串,在简单情况下这种方式能够很好的工作。但是当我们需要进行复杂的字符串连接时,如果依然使用 + 来完成,不仅会使代码变得晦涩难懂,还会让代码变得难以维护,此时这种方式就显得力不从心了。

例如,我们想打印这样一条记录:

User:John has completed Action:payment at Time:13:30:00 

立即学习Python免费学习笔记(深入)”;

如果使用加号实现,会是下面这种形式:

print "User:" + user_name + " has completed Action:" + \ 
      action_name + " at Time:" + current_time

如果以后回过头来阅读这段代码,我们很难直观看出它的输出格式,且修改起来也相对麻烦。

我们可以换用 % 来实现:

print "User:%s has completed Action:%s at Time:%s" % \ 
    (user_name, action_name, current_time)

这回代码变得清晰简洁多了。

不过,Python 为我们提供了另一种简洁优雅的实现方式,也是官方更加推荐的方式:使用 str.format() 来实现字符串的格式化:

print "User:{} has completed Action:{} at Time:{}".format( 
    user_name, action_name, current_time)

str.format 既能够用于简单的场景,也能够胜任复杂的字符串替换,而无需繁琐的字符串连接操作。Python 的内置类型 str 和 unicode 均支持使用 str.format() 来格式化字符串。

我们接下来就详细地讨论 str.format() 的具体用法。

2. str.format 基本语法

格式化字符串使用花括号 {} 来包围替换字段,也就是待替换的字符串。而未被花括号包围的字符会原封不动地出现在结果中。

2.1. 使用位置索引

以下两种写法是等价的:

"Hello, {} and {}!".format("John", "Mary")

"Hello, {0} and {1}!".format("John", "Mary")

花括号内部可以写上目标字符串的索引,也可以省略。如果省略,则按 format 括号里的目标字符串顺序依次替换。

2.2. 使用关键字索引

除了通过位置来指定目标字符串,我们还可以通过关键字来指定它。

例如:

"Hello, {boy} and {girl}!".format(boy="John", girl="Mary")

使用关键字索引的好处是,我们无需关心参数的位置,且字符串的最终结果能够一目了然。在以后的代码维护中,我们能够快速地修改对应的参数,而不用对照字符串挨个去寻找相应的参数。

注意:如果字符串本身含有花括号,则需要将其重复两次来转义。例如,字符串本身含有 {,为了让 Python 知道这是一个普通字符,而不是用于包围替换字段的花括号,我们只需将它改写成 {{ 即可。

3. str.format 高级语法

str.format 非常强大,足以完成日常工作中遇到的格式化输出。熟练掌握该方法,能够为以后的字符串处理打好基础,还能节省不少时间。

3.1. 访问参数的属性或元素

Python v2.4 中文手册 chm
Python v2.4 中文手册 chm

Python v2.4版chm格式的中文手册,内容丰富全面,不但是一本手册,你完全可以把她作为一本Python的入门教程,教你如何使用Python解释器、流程控制、数据结构、模板、输入和输出、错误和异常、类和标准库详解等方面的知识技巧。同时后附的手册可以方便你的查询。

下载

在使用 str.format 来格式化字符串时,我们通常将目标字符串作为参数传递给 format 方法。实际上,我们还可以在格式化字符串中访问参数的某个属性或某个元素:

"My car is {0.color}.".format(black_car)
"The first student is {student[0]}.".format(student=stu_list)
"John is {d[john]} years old.".format(d=age_dict)

3.2. 参数输出转换

参数的字符串输出,默认是由其自身的 __format__ 方法来实现的。也就是说,Python 使用参数的 __format__ 输出来取代替换字段。如果我们想调用 str() 或 repr() 来转换参数,可以通过添加 转换标志 来实现:

# call str() on argument
"It's a {0!s}."

#call repr() on argument
"We can get info from {name!r}."

4. str.format 一般形式

格式化字符串的一般形式如下:

"... {field_name!conversion:format_spec} ..."

从上面的代码可以看到,格式化字符串可分为 field_name、conversion、format_spec 三部分,分别对应替换字段名称(索引)、转换标志、格式描述。其中,字段名称是必选的,而后两者是可选的。转换标志紧跟在英文感叹号后面,而格式描述紧跟在英文冒号后面。

前面已经提到过,字段名称既可是位置索引,也可是关键字索引。字段名称后面可以通过点来访问属性,或通过方括号来访问元素。

在这里,我们重点看一下格式描述(format_spec)这一项。

格式描述中含有6个选项,分别是 fill、align、sign、width、precision、type。 它们的位置关系如下:

[[fill]align][sign][#][0][width][,][.precision][type]
fill
可以是任意字符,默认为空格。

align
仅当指定最小宽度时有效。

> 右对齐
= 仅对数字有效;将填充字符放到符号与数字间,例如 +0001234
^ 居中对齐
sign
仅对数字有效

+ 所有数字均带有符号
- 仅负数带有符号(默认选项)
 即空格;正数前面带空格,负数前面带符号
'#'
只对整数有效

自动在二进制、八进制、十六进制数值前添加对应的 0b、0o、 0x。

','
自动在每三个数字之间添加 , 分隔符。

width
十进制数字,定义最小宽度。如果未指定,则由内容的宽度来决定。

如果没有指定对齐方式(align),那么可以在 width 前面添加一个0来实现自动填充0,等价于 fill 设为 0 并且 align 设为 =。

precision
用于确定浮点数的精度,或字符串的最大长度。不可用于整型数值。

type
确定参数类型,默认为 s ,即字符串。

整数输出类型:

b:以二进制格式输出
c:将整数转换成对应的 unicode 字符
d:以十进制输出(默认选项)
o:以八进制输出
x:以十六进制小写输出
X:以十六进制大写输出
n:与 d 相同,但使用当前环境的分隔符来分隔每3位数字

十进制浮点数输出类型:

e:指数标记;使用科学计数法输出,用e来表示指数部分,默认 precision 为6
E:与 e 相同,但使用大写 E 来表示指数部分
f:以定点形式输出数值,默认 precision 为6
F:与 f 相同
g:通用格式;对于给定的 precision p >= 1,取数值的p位有效数字,并以定点或科学计数法输出(默认选项)
G:通用格式;与 g 相同,当数值过大时使用 E 来表示指数部分
n:与 g 相同,但使用当前环境的分隔符来分隔每3位数字
%:百分比标记;使用百分比的形式输出数值,同时设定 f 标记

相关推荐:

php截取函数intercept_str详解

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.7万人学习

Django 教程
Django 教程

共28课时 | 3.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号