python格式化输出函数之format

本文详细介绍了Python中str.format()方法的强大功能,包括其基本语法、参数使用技巧及高级特性,如字段名引用、转换指定符和格式规约等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

format相对于老版的%有很多优点
1.不需要理会数据类型
2.单个参数可以多次输出,参数顺序可以不同
3.填充方式十分灵活,对齐方式异常强大
4.官方推荐用的方式,%方式在后面的版本终将会被淘汰

一、str.format()方法会返回一个新的字符串,在新的字符串中,原字符串的替换字段被适当格式化后的参数替换,如下:
‘I love {0} ,I study {0} {1} years’.format(‘python’, 5) ==>I love python,I study python 5 years

format格式:
“{[field_name][!conversion][:][[fill]align][sign][#][0][width][,][.precision][type]}”.format()

1.字段名field_name
(1)每个替换字段由包含在花括号中的field_name标识的,如果field_name是简单的整数,就将被作为传递给str.format()的一个参数的索引位置,这种情况下,{0}、{1}..分别被format参数列表的第1、2….个参数代替,如果需要输出花括号,那就写两遍:{{0}}

(2)可以很容易连接字符串其他数据类型,当然也可以用来连接字符串,但最好用str.join
“I {0}{1}{2}”.format(‘你’,[1,2],(‘as’,3))===> “I 你[1, 2](‘as’, 3)”

(3)字段名为关键字参数的名称:关键字参数要在所有位置参数后
“{who} turned {age} this year”.format(who=’she’, age=88)==>she turned 88 this year
“the {who} was {0} this year”.format(12, who=’boy’)==>the boy was 12 this year

(4)字段名可以引用集合类型数据:利用列表、字符串、元组的索引
l=[‘python’, ‘c’, ‘c++’, ‘ruby’, ‘java’]
‘I learn {0[1]} first,then {0[2]} and {0[4]},finally I for in love with {0[0]}’.format(l) ==> ‘I learn c first,then c++ and java,finally I for in love with python’

(5)字典类型的参数:
d=dict(a=’hello’, b=’world’) =====>{“a”:”hello”, “b”:”world”}
“{0[a]} {0[b]}!!!”.format(d) ======>’hello world!!!’
这里需要注意的是:{0[a]}这里的a没有引号,加了会报错,但是如果是单纯的字典利用key取values的时候必须加引号:d[‘a’],d[‘b’]

(6)用句点引用参数的属性值
import math
“math.pi == {0.pi}”.format(math) ===>’math.pi == 3.141592653589793’

(7) py3.1以后,忽略字段名成为可能,这种情况下,Python会自动的进行处理
“{}:{}:{}”.format(‘a’,’b’,’c’) ===> ‘a:b:c’

(8)序列解析传参技术
“{0}{1}{2}”.format(*[1,2,3]) ==>’123’
“{0} {1}{2}”.format(*(‘hello’,’world’,3)) ==>’hello world3’
“{a} {b} {c}”.format(**{‘a’:’I’, ‘b’:’love’, ‘c’:’python’}) ===> ‘I love python’

2.转换conversion:!s !r !a
通过向字段中添加conversion指定符可以强制指定结果是以字符串形式输出还是以表象形式输出;有三个这种指定符:s,用于强制使用字符串形式,r,用于强制使用表象形式,a用于强制使用表象形式但仅限于ASCII字符:
import decimal
“{0} {0!s} {0!r} {0!a}”.format(decimal.Decimal(‘93.4’)) ==>”93.4 93.4 Decimal(‘93.4’) Decimal(‘93.4’)”

由于上面这个字符串仅由ASCII字符组成,所有!r和!a一样,下面这种方法可以阻止非ascii字符输出
“{0} {0!s} {0!r} {0!a}”.format(“我爱python”) ==>”我爱python 我爱python ‘我爱python’ ‘\u6211\u7231python’”

3.格式规约(这部分讲的是冒号之后的部分):[[fill]align][sign][#][0][width][,][.precision]

对于字符串而言,我们可以控制的包括填充字符、字段内对其方式、字段宽度(最大值、最小值)、整数分隔符(一般是逗号),浮点数精度控制

(1)fill填充字符可以是除{外的字符,一般可以是0,#,*等,但是只能为1个字符,这里需要注意的是如果指定了fill,就一定要指定对齐字符align,对齐有下面三种:向左对齐<;向右对齐>;居中对齐^;再之后为可选的最小宽度和最大宽度(最大宽度前面加上句点.)
例子:
s=’The sword of truth’
‘{0:25}’.format(s) ==> ‘The sword of truth ’
‘{0:>25}’.format(s) ==> ’ The sword of truth’
‘{0:<25}’.format(s) ==> ‘The sword of truth ’
‘{0:^25}’.format(s) ==> ’ The sword of truth ’
‘{0:-^25}’.format(s) ==> ‘—The sword of truth—-’
‘{0:#^25}’.format(s) ==> ‘###The sword of truth####’
‘{0:.<25}’.format(s) ==> ‘The sword of truth…….’
注意下面两种情况:
‘{0:.25}’.format(s) ===》’The sword of truth’
‘{0:.5}’.format(s) ===》’The s’
这里的句点不是填充符号,因为上面说过,fill必须和align一起出现,所以这里的句点表示的是最大宽度:
最小宽度为m 最大宽度为n 实际宽度为w
1) m、n>w 按最小宽度填充字符
‘{0:^5.6}’.format(‘123’) ==> ‘*123
‘{0:^6.5}’.format(‘123’) ==> ‘*123*
2)w>m、n截断
w>m>n ==> ‘{0:^6.5}’.format(‘1232345’) ==> ‘12323
w>n>m ==> ‘{0:*^5.6}’.format(‘1232345’) ==> ‘123234’
3)m>w>n
‘{0:^6.4}’.format(‘12325’) ==> ‘*1232
4)n>w>m
‘{0:*^4.6}’.format(‘12325’) ==> ‘12325’
5)单个
‘{0:*^4}’.format(‘12325’) ===> ‘12325’
‘{0:^6}’.format(‘12325’) ===>’12325
‘{0:*^.4}’.format(‘12325’)===>’1232’
‘{0:*^.6}’.format(‘12325’)===> ‘12325’

(2)sign对于数字类型有效:+ -能在正数前面加上一个+,这个只需要记住他的位置就好了:[[fill]align][sign][#][0][width][,][.precision]
‘{0:#<+20.6f}’.format(12325.343) ==>’+12325.343000#######’
‘{0:b} {0:o} {0:x} {0:X}’.format(1461287) ==>’101100100110000100111 5446047 164c27 164C27’
注意:他们参数只能是数字不能使字符串,这里的b、o、x分别是数字的二进制、八进制、16进制、d为10进制是默认情况可以不写。
在宽度后面可以加上一个逗号用于对整数分组
‘{0:,}’.format(1461287) ==> ‘1,461,287’
(3)对于浮点数的格式规约在结尾处有点差别,第一在可选最小宽度后面可以通过一个句点后跟一个整数指定保留小数的位数(包括小数点),也可以早结尾处添加一个类型符号:e表示使用指数形式,E是表示使用E指数形式,f表示使用标准的浮点形式,g表示通常格式,%会使数据扩大100倍后面加上%

“{0:-<10.6}”.format(math.pi)==》’3.14159—’
“{0:-<.5}”.format(math.pi)==》’3.1416’
“{0:-<.5e}”.format(math.pi*100) ==>’3.14159e+02’
“{0:%}”.format(math.pi)==》’314.159265%’

(3)关于复数

“{0.real:.3f}{0.imag:+.3f}j”.format(4.2344+5.3445j) ==> ‘4.234+5.345j’
“{0.real:.3f}{0.imag:-.3f}j”.format(4.2344+5.3445j) ==> ‘4.234-5.345j’
前面的+-可以不写让他自己去判断:
“{0.real:.3f}{0.imag:.3f}j”.format(4.2344+5.3445j) ==> ‘4.234+5.345j’
“{0.real:.3f}{0.imag:.3f}j”.format(4.2344+5.3445j) ==> ‘4.234-5.345j’

<think>好的,用户现在想了解如何使用Pythonformat函数格式化输出整数。根据用户之前的问题,他们在处理嵌套元组的列表排序时已经接触过一些Python的基础知识,可能对字符串格式化有一定的了解,但需要更具体的指导。 首先,我需要参考用户提供的引用内容,特别是引用[2]和[3],因为它们详细介绍了format函数的用法。用户提到了格式化输出整数,所以需要涵盖整数的基本格式化、对齐方式、填充字符、进制转换以及千位分隔符等。 用户可能需要具体的示例,因此我应该分门别类地给出不同场景下的应用例子。比如,基本的整数插入、指定宽度和对齐、填充字符、进制转换、符号显示、千位分隔符以及组合使用多个参数的情况。每个示例都需要清晰的代码和输出结果,方便用户理解。 同时,用户可能对format函数的不同参数位置和关键字参数的使用不太清楚,所以需要解释清楚位置参数和关键字参数的区别。例如,使用{}、{0}、{name}等形式,让用户了解如何灵活应用。 另外,用户可能在实际使用中遇到需要组合多个格式化选项的情况,比如同时使用千位分隔符和指定宽度,这时候需要说明如何将这些选项结合在同一个格式规范中,例如"{:0>15,}",并解释每个符号的作用。 还要注意,用户可能对进制转换的符号(如x、X、b、o)不太熟悉,需要明确说明每个符号对应的进制,以及如何控制字母的大小写。例如,x代表十六进制小写,X则是大写,b是二进制,o是八进制。 最后,考虑到用户之前的问题涉及性能分析,可能在处理大数据时需要注意格式化操作的效率,但这个问题更多是基础用法,所以暂时不需要深入性能方面,但可以简要提到format函数的灵活性和效率。 需要确保所有示例都正确无误,符合Python语法,并且输出结果与实际运行结果一致。同时,语言要简洁明了,避免使用过于专业的术语,让初学者也能轻松理解。此外,结合用户之前的问题,可能他们在处理数据输出时需要这些技巧,所以示例应贴近实际应用场景,如生成报告、数据展示等,增加实用性。</think>以下是使用Python `format()` 函数格式化输出整数的详细示例和说明: --- ### 一、基础整数格式化 #### 1. **基本整数插入** ```python num = 123 print("整数: {}".format(num)) # 输出:整数: 123 ``` #### 2. **指定位置参数** ```python print("{}的平方是{}".format(5, 25)) # 输出:5的平方是25 print("{1}的平方是{0}".format(25, 5)) # 输出:5的平方是25 ``` #### 3. **关键字参数** ```python print("商品ID: {id}, 库存: {stock}".format(id=1001, stock=50)) # 输出:商品ID: 1001, 库存: 50 ``` --- ### 二、对齐与填充 #### 1. **右对齐(默认)** ```python print("{:5}".format(7)) # 总宽度5,默认右对齐,输出: 7(前导4空格) ``` #### 2. **左对齐** ```python print("{:<5}".format(7)) # 输出:7 (后导4空格) ``` #### 3. **居中对齐** ```python print("{:^5}".format(7)) # 输出: 7 (两侧各2空格) ``` #### 4. **自定义填充字符** ```python print("{:*>10}".format(123)) # 右对齐,填充*,输出:*******123 print("{:0<8}".format(99)) # 左对齐,填充0,输出:99000000 ``` --- ### 三、进制转换 #### 1. **二进制(`b`)** ```python print("{:b}".format(10)) # 输出:1010 ``` #### 2. **八进制(`o`)** ```python print("{:o}".format(10)) # 输出:12 ``` #### 3. **十六进制(`x`小写/`X`大写)** ```python print("{:x}".format(255)) # 输出:ff print("{:X}".format(255)) # 输出:FF ``` #### 4. **显示进制前缀** ```python print("{:#b}".format(10)) # 输出:0b1010 print("{:#X}".format(255)) # 输出:0xFF ``` --- ### 四、符号与千位分隔符 #### 1. **强制显示正负号** ```python print("{:+}".format(5)) # 输出:+5 print("{:+}".format(-5)) # 输出:-5 ``` #### 2. **千位分隔符(`,`)** ```python print("{:,}".format(1234567)) # 输出:1,234,567 ``` #### 3. **组合使用** ```python print("{:+,>20,}".format(1234567)) # 输出:>>>>>>>>>>+1,234,567(右对齐,填充>,显示符号和千位分隔符) ``` --- ### 五、特殊格式 #### 1. **固定宽度不足补零** ```python print("{:05}".format(7)) # 输出:00007 ``` #### 2. **百分比格式(需结合浮点转换)** ```python print("{:.0%}".format(0.85)) # 输出:85% ``` --- ### 六、综合示例 ```python data = {"price": 9999, "sales": 1500} print("价格: ¥{:0>10,} | 销量: {:*^10}".format(data["price"], data["sales"])) # 输出:价格: ¥000009,999 | 销量: ***1500*** ``` --- ### 附:格式规范语法速查 格式规范:`{[参数]:[填充][对齐][符号][#][0][宽度][,][进制]}` 示例:`"{:*>+#20,b}".format(12345)` - `*>`:右对齐,填充`*` - `+`:显示符号 - `#`:显示进制前缀 - `20`:总宽度20 - `,`:千位分隔符 - `b`:二进制 --- ### 注意事项 1. 整数无法直接使用`%f`格式化,需先转换为浮点数 2. 若需同时使用对齐、填充、进制等参数,需按语法顺序书写[^2][^3]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值