python: format

本文详细介绍了Python 2.6中引入的改进字符串格式化方法,包括如何使用format()函数进行参数替换、精确格式化、指定对齐方式和展示类型,以及如何自定义类和类型的行为来实现更灵活的格式化。
部署运行你感兴趣的模型镜像
发信人: N23 (23号), 信区: Python
标  题: zz What’s New in Python 2.6 翻译 (七) -PEP 3101: 改进的字
发信站: 水木社区 (Tue Oct  7 17:20:45 2008), 转信

PEP 3101: 改进的字符串格式化

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

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

# 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: {}"

字段名字可以为整数,表示参数的位置。像{0}, {1}等。也可以是参数的名字。你以可以使用字段的组合来读取属性或者字典的key值。

import sys
'Platform: {0.platform}\nPython version: {0.version}'.format(sys) ->
 'Platform: darwin\n
 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'

参考

格式化字符串的语法 - 格式化字段的参考文档
PEP 3101 - Advanced String Formatting
PEP由Talin编写,由Eric Smith实现。

from http://www.onlypython.com/post/1926/

--
从明天起,做一个幸福的人,
劈柴,喂马,周游世界;
我有一所屋子,面朝大海,
春暖花开。
--
My Blog: http://n23.appspot.com/blog/


※ 来源:·水木社区 newsmth.net·[FROM: 203.86.138.*]

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think> 我们正在回答用户关于Pythonformat函数使用方法的问题。根据引用内容,我们可以总结如下: 1. format函数用于格式化字符串,可以接受无限个参数,并可以指定顺序。 2. 基本语法:'字符串{}'.format(参数) 3. 可以通过位置、索引、关键字参数等方式进行格式化。 下面我们将详细说明format函数的用法,并给出示例。 ### 1. 基本用法(按顺序替换) 如果不指定位置,format函数会按照参数出现的顺序进行替换。 示例: ```python print('学习{}中的{}函数'.format('Python', 'format')) ``` 输出: ``` 学习Python中的format函数 ``` ### 2. 指定位置 可以通过数字索引指定替换的位置,数字从0开始。 示例: ```python print('学习{1}中的{0}函数'.format('format', 'Python')) ``` 输出: ``` 学习Python中的format函数 ``` ### 3. 通过参数名(关键字参数) 可以通过关键字参数来指定替换的值。 示例: ```python print('最大值:{max}, 最小值:{min}'.format(max=100, min=0)) ``` 输出: ``` 最大值:100, 最小值:0 ``` ### 4. 通过列表或字典的索引 可以传递列表或字典,然后通过索引或键来访问。 示例(列表): ```python list1 = ['hello', 'world'] print('{0[0]} {0[1]}'.format(list1)) ``` 输出: ``` hello world ``` 示例(字典): ```python dict1 = {'name': 'Alice', 'age': 20} print('姓名:{0[name]}, 年龄:{0[age]}'.format(dict1)) # 或者使用双星号解包字典 print('姓名:{name}, 年龄:{age}'.format(**dict1)) ``` 输出: ``` 姓名:Alice, 年龄:20 ``` ### 5. 格式规范 format函数还支持对数字进行格式化,比如控制小数位数、对齐、填充等。 - 保留小数位数:`{:.nf}` 保留n位小数 - 整数进制转换:`{:b}`二进制,`{:o}`八进制,`{:d}`十进制,`{:x}`十六进制 - 对齐方式:`{:<width}`左对齐,`{:^width}`居中,`{:>width}`右对齐 - 填充字符:可以指定填充字符(默认空格),例如`{:0>5d}`表示用0填充右对齐,总宽度5 示例: ```python # 保留5位小数 print('{:.5f}'.format(3.14)) # 输出: 3.14000 # 进制转换 print('二进制: {:b}'.format(20)) # 10100 print('八进制: {:o}'.format(20)) # 24 print('十进制: {:d}'.format(20)) # 20 print('十六进制: {:x}'.format(20)) # 14 # 对齐和填充 print('{:>10}'.format('right')) # 右对齐,宽度10,默认空格填充 print('{:<10}'.format('left')) # 左对齐 print('{:^10}'.format('center')) # 居中对齐 print('{:0>5d}'.format(12)) # 用0填充,右对齐,宽度5 -> 00012 ``` ### 6. 使用魔法方法__format__ 自定义类可以通过定义`__format__`方法来支持format函数的格式化。 示例: ```python class Person: def __init__(self, name, age): self.name = name self.age = age def __format__(self, format_spec): if format_spec == 'info': return f"{self.name} is {self.age} years old." else: return str(self) person = Person('Alice', 20) print('{0:info}'.format(person)) # 使用自定义格式 ``` 输出: ``` Alice is 20 years old. ``` ### 总结 Pythonformat函数提供了丰富的字符串格式化功能,包括位置参数、关键字参数、索引访问、数字格式化和自定义格式化等。通过灵活使用这些特性,可以满足各种字符串格式化的需求。 §§相关问题§§ 1. Python中f-string和format函数有什么区别? 2. 如何在format函数中处理大数字的千位分隔符? 3. format函数中如何设置科学计数法表示? 4. 在format函数中如何转义花括号? </think> ### Pythonformat函数的使用方法 `format()`函数是Python中用于字符串格式化的核心方法,它通过`{}`作为占位符进行动态内容替换。以下是主要用法及示例: #### 1. 基础替换 ```python # 按顺序替换 print("{}的{}函数".format("Python", "format")) # 输出:Pythonformat函数 # 按索引指定顺序 print("{1}的{0}函数".format("format", "Python")) # 输出:Pythonformat函数 ``` #### 2. 命名参数替换 ```python print("姓名:{name}, 年龄:{age}".format(name="Alice", age=25)) # 输出:姓名:Alice, 年龄:25 ``` #### 3. 容器类型数据访问 ```python # 列表索引访问 data = ["Python", 3.9] print("语言:{0[0]}, 版本:{0[1]}".format(data)) # 输出:语言:Python, 版本:3.9 # 字典键值访问 user = {"name": "Bob", "id": 101} print("用户:{name}, ID:{id}".format(**user)) # 输出:用户:Bob, ID:101 ``` #### 4. 数字格式化 ```python # 浮点数精度控制 print("π ≈ {:.3f}".format(3.14159)) # 输出:π ≈ 3.142 # 进制转换 print("二进制:{:b}, 十六进制:{:x}".format(255, 255)) # 输出:二进制:11111111, 十六进制:ff # 千位分隔符 print("{:,}".format(1000000)) # 输出:1,000,000 ``` #### 5. 对齐与填充 ```python # 右对齐(宽度10) print("{:>10}".format("右对齐")) # 输出: 右对齐 # 居中(宽度10,*填充) print("{:*^10}".format("居中")) # 输出:***居中**** # 数字补零 print("ID:{:0>5}".format(23)) # 输出:ID:00023 ``` #### 6. 特殊格式 ```python # 百分比显示 print("占比:{:.2%}".format(0.156)) # 输出:占比:15.60% # 科学计数法 print("{:.2e}".format(12345678)) # 输出:1.23e+07 ``` #### 7. 自定义对象格式化 通过实现`__format__`方法: ```python class Point: def __init__(self, x, y): self.x = x self.y = y def __format__(self, spec): return f"[x={self.x}, y={self.y}]" p = Point(3, 5) print("坐标:{}".format(p)) # 输出:坐标:[x=3, y=5] ``` > **重要特性**: > - 支持链式调用:`"value={}".format(...).upper()` > - 兼容所有Python版本(Python 2.6+) > - 比`%`操作符更灵活,推荐替代方案[^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值