python的format函数

本文介绍Python中使用format()函数进行字符串格式化的方法,包括位置参数、关键字参数、字段宽度及对齐方式等高级用法。

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

在Python 3.0中,%操作符通过一个更强的格式化方法format()进行了增强。对str.format()的支持已经被反向移植到了Python 2.6

在2.6中,8-bit字符串和Unicode字符串都有一个format()方法,这个方法会把字符串当作一个模版,通过传入的参数进行格式化。这个用来格式化的模版使用大括号({,})作为特殊字符。

Python中格式化输出字符串使用format()函数, 字符串即, 可以使用方法;

Python是完全面向对象的语言, 任何东西都是对象;

字符串的参数使用{NUM}进行表示, 0表示第一个参数1表示第二个参数, 以后顺次递加;

使用":", 指定代表元素需要的操作, 如":.3"小数点三位, ":8"占8个字符空间等;

数字(0, 1, ...)即代表format()里面的元素, 所以可以使用"."调用元素的方法;

参见网址: http://www.python.org/dev/peps/pep-3101/


代码示例

# -*- coding: utf-8 -*-  
  
#====================  
#File: abop.py  
#Author: Wendy  
#Date: 2013-12-03  
#====================  
  
#eclipse pydev, python3.3  
  
age = 25  
name = 'Caroline'  
  
print('{0} is {1} years old. '.format(name, age)) #输出参数  
print('{0} is a girl. '.format(name))  
print('{0:.3} is a decimal. '.format(1/3)) #小数点后三位  
print('{0:_^11} is a 11 length. '.format(name)) #使用_补齐空位  
print('{first} is as {second}. '.format(first=name, second='Wendy')) #别名替换  
print('My name is {0.name}'.format(open('out.txt', 'w'))) #调用方法  
print('My name is {0:8}.'.format('Fred')) #指定宽度  
输出:
Caroline is 25 years old.   
Caroline is a girl.   
0.333 is a decimal.   
_Caroline__ is a 11 length.   
Caroline is as Wendy.   
My name is out.txt  
My name is Fred    .  


# Substitute positional argument 0 into the string.
"User ID: {0}".format("root") 
-> "User ID: root"

# Use the named keyword arguments
 'User ID: {uid} Last seen: {last_login}'.format(uid='root', last_login = '5 Mar 2008 07:20') 
-> 'User ID: root Last seen: 5 Mar 2008 07:20'

大括号可以写两遍来转义。

format("Empty dict: {{}}") 
-> "Empty dict: {}"

你也可以使用字段的组合来读取属性或者字典的key值。

import sys
'Platform: {0.platform} Python version: {0.version}'.format(sys) 
-> 'Platform: darwin Python version: 2.6a1+ (trunk:61261M, Mar 5 2008, 20:29:41)  \n[GCC 4.0.1 (Apple Computer, Inc. build 5367)]'

import mimetypes
 'Content-type: {0[.mp4]}'.format(mimetypes.types_map) 
-> 'Content-type: video/mp4'
注意,当使用字典类型的表示方法,如[.mp4]时,你不需要引号将字符串(.mp4)引起来;它会查找用.mp4作为主键的值。以整数开头的字符串会被转换成一个整数。你不能在被格式化的字符串中写复杂的表达式。

我们还可以通过在格式化指示符后面添加一个冒号来进行精确格式化。例如:

# Field 0: left justify, pad to 15 characters
# Field 1: right justify, pad to 6 characters

fmt = '{0:15} ${1:>6}'

fmt.format('Registration', 35) 
->'Registration $ 35'

fmt.format('Tutorial', 50) 
->'Tutorial $ 50'

fmt.format('Banquet', 125) 
->'Banquet $ 125'

格式化指示符可以通过嵌套进行引用。
fmt = '{0:{1}}'
width = 15
fmt.format('Invoice #1234', width) 
->'Invoice #1234    '
  
width = 35
fmt.format('Invoice #1234', width) ->
 'Invoice #1234                             '


可以指定所需长度的字符串的对齐方式。
效果字符:
< (默认)左对齐
> 右对齐
^ 中间对齐
= (只用于数字)在小数点后进行补齐


格式化指示符可以包含一个展示类型来控制格式。例如,浮点数可以被格式化为一般格式或用幂来表示。
>>> '{0:g}'.format(3.75)
 '3.75'
>>> '{0:e}'.format(3.75)
 '3.750000e+00'


展示类型有很多。2.6的文档里有完整的列表。这里列出一些示例。

'b' - 二进制。将数字以2为基数进行输出。
'c' - 字符。在打印之前将整数转换成对应的Unicode字符串。
'd' - 十进制整数。将数字以10为基数进行输出。
'o' - 八进制。将数字以8为基数进行输出。
'x' - 十六进制。将数字以16为基数进行输出,9以上的位数用小写字母。
'e' - 幂符号。用科学计数法打印数字。用'e'表示幂。
'g' - 一般格式。将数值以fixed-point格式输出。当数值特别大的时候,用幂形式打印。
'n' - 数字。当值为整数时和'd'相同,值为浮点数时和'g'相同。不同的是它会根据区域设置插入数字分隔符。
'%' - 百分数。将数值乘以100然后以fixed-point('f')格式打印,值后面会有一个百分号。

类和类型可以定义一个__format__()方法来控制怎样格式化自己。它会接受一个格式化指示符作为参数:
def __format__(self, format_spec):
     if  isinstance(format_spec, unicode):
             return unicode(str(self))
     else:
             return str(self)

还有一个内置的format()方法可以用来格式化一个值。它会调用类型的__format__()方法,并将格式化指示符作为参数传进去。
>>> format(75.6564, '.2f')
 '75.66'



### Python 中 `format` 函数的使用指南 #### 基础概念 `format` 是 Python 字符串的一个内置方法,用于格式化字符串。它通过 `{}` 占位符替代传统的 `%` 符号来进行数据替换[^2]。 #### 调用机制 当调用 `format(value, format_spec)` 方法时,实际上是将其转化为 `type(value).__format__(format_spec)` 的形式来执行。这意味着会优先在对象类型的定义中寻找 `__format__()` 方法并调用;如果没有找到该方法,则抛出 `TypeError` 异常[^1]。 #### 格式说明符 (`format_spec`) `format_spec` 参数允许指定详细的显示规则,比如对齐方式、填充字符、精度等。其通用结构如下: ``` [[fill]align][sign][#][0][width][grouping_option][.precision][type] ``` 以下是部分常用选项解释: - **Align**: `<`, `>`, `=`, 或者 `^` 控制左对齐、右对齐、数值前补零或者居中。 - **Sign**: 可选加号 `+` 显示正负数标志,空格保留符号位置但仅标记负数 `-`. - **Width**: 定义字段宽度。 - **Precision**: 对浮点型设置有效数字数量。 - **Type**: 如整数(`d`)、十六进制(`x`)、科学计数法(`e`)等形式表示[^2]. #### 实际应用案例 ##### 简单示例 ```python print("Hello {}, your score is {}".format("Alice", 95)) ``` 这段代码将输出 `"Hello Alice, your score is 95"`[^2]。 ##### 自定义类支持 可以通过实现特殊方法 `__str__` 和 `__format__` 来控制自定义类型如何被格式化展示。例如下面的例子展示了一个人的信息打印: ```python class Person: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return "这个人的名字叫 {name} 年龄为 {age}".format(name=self.name, age=self.age) person_instance = Person('张三', 30) print(person_instance) ``` 这里利用了 `.format(self=self)` 技巧传递实例本身给内部模板解析器[^3]。 ##### 复杂格式化 考虑更复杂的场景下需要精确控制输出样式的情况: ```python number = 1234.56789 formatted_number = "{:.2f}".format(number) # 输出 '1234.57' percentage_value = "{:%}".format(0.75) # 输出 '75%' binary_representation = "{:#b}".format(255) # 输出 '0b11111111' ``` 以上分别演示了四舍五入到两位小数、百分比转换以及二进制表现的功能。 #### 总结 综上所述,Python 的 `format` 函数提供了强大而灵活的文字拼接能力,并且能够很好地兼容各种复杂的数据呈现需求。无论是基本变量还是定制化的对象都可以借助这一工具优雅地完成最终结果构建。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值