百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Python基础:f-string不同数据类型的格式化选项,终极指南!

itomcoil 2025-02-09 12:37 33 浏览

上一篇文章我们介绍了4种字符串格式化方法,其中最现代、最直观的方式是f-string,从Python 3.6开始引入,而且时不时就增加一些超级优雅的小改进。今天,钢铁老豆想要继续给大家展开介绍不同数据类型的格式化选项,以f-string为例,同样适用于其他格式化方法。

0.f-string简介

f-string,或称为格式化字符串字面值,是一种在字符串前加上 `f` 或 `F` 前缀的新语法。通过这种方式,您可以直接在字符串中嵌入表达式,并在运行时计算这些表达式的值。它不仅提高了代码的可读性,还加快了字符串处理的速度。

1.基本用法

使用 f-string 非常简单。只需在字符串前加上字母 `f`,并将表达式放在大括号 `{}` 中。

name = "张三"
age = 30
print(f"你好,{name},你明年就{age + 1}岁了。") # 你好,张三,你明年就31岁了。

除了基本的变量外,你还可以在花括号里调用函数、访问字典、执行算术运算等。

data = {'name': '赵六', 'job': '工程师'}
print(f"{data['name']} 是一名 {data['job']}")

2.格式化选项

下面,让钢铁老豆更详细地介绍 Python f-string 的各种格式化选项,满足不同数据类型的需求。

2.1 数字格式化

整数和浮点数

  • 定制小数点位数:使用 `:.nf` 格式,其中 `n` 代表小数点后的位数。
number = 3.14159
print(f"{number:.3f}") # 输出 3.142
  • 定制总宽度和小数点位数:使用 `:m.nf`,`m` 为总宽度,`n` 为小数点位数。
number = 3.14159
print(f"{number:10.3f}") # 宽度为10,小数点后3位
  • 使用千位分隔符:使用 `:,` 可以为大数字添加千位分隔符。
number = 1234567.89
print(f"{number:,}") # 输出 1,234,567.89

进制转换

  • 十六进制:使用 `:x` 或 `:X`。
number = 255
print(f"{number:x}") # 输出 ff
  • 八进制:使用 `:o`。
number = 255
print(f"{number:o}") # 输出 377
  • 二进制:使用 `:b`。
number = 255
print(f"{number:b}") # 输出 11111111

百分比格式化

  • 百分比:使用 `:%` 或 `:.nf%` 格式化为百分比形式,`n` 定义小数位数。
fraction = 0.123
print(f"{fraction:.1%}") # 输出 12.3%

2.2 字符串格式化

  • 对齐:使用 `:<` 左对齐,`:>` 右对齐,`:^` 居中对齐。
name = "Alice"
print(f"{name:>10}") # 右对齐,宽度为10
  • 填充:在对齐字符前添加填充字符。
name = "Alice"
print(f"{name:*^10}") # 使用*填充,居中对齐
  • 截断:使用 `.n` 限制字符串长度,其中 `n` 是最大字符数。
text = "Hello World"
print(f"{text:.5}") # 输出 Hello

3.自定义对象格式化

如果对象实现了 `__format__` 方法,f-string 也可以使用指定的格式代码来格式化该对象。每当格式化一个对象时(例如,使用`format()`函数或在f-string中引用),Python会查找该对象的`__format__`方法。该方法接收一个格式说明符作为参数,这个说明符可以是空字符串,或是任何有效的格式代码,您可以在方法内部解释并应用这些代码。

例如,如果您正在设计一个财务相关的类,可能会想允许用户根据不同的货币或会计需求选择不同的显示格式:

class Money:
    def __init__(self, amount):
        self.amount = amount

    def __format__(self, format_spec):
        if format_spec == 'usd':
            return f"${self.amount:.2f}"
        elif format_spec == 'eur':
            return f"€{self.amount:.2f}"
        elif format_spec == 'clean':
            return f"{self.amount:.2f}"
        else:
            # 默认为美元格式
            return f"${self.amount:.2f}"

# 使用自定义格式
money = Money(1234.5)
print(f"{money}")           # $1234.50
print(f"{money:'eur'}")     # €1234.50
print(f"{money:'clean'}")   # 1234.50

这除了增强类的自描述性和灵活性,还可以使对象的字符串表示形式更加友好和符合场景需求。这在创建API、框架或任何需要用户与您的对象进行交互的应用程序时特别有用。

好了,以上就是不同数据类型常见的格式化选项,f-string 不仅使用简单,而且非常强大和灵活。

欢迎点赞+收藏+评论+关注,每天学习一点Python小知识,无论基础、模块、数据分析、深度学习和Ai,总有你感兴趣的。我是钢铁老豆,一个30岁转行IT、自学成为算法工程师、想用Ai点亮孩子小小世界的Pythoner。

相关推荐

《Queendom》宣布冠军!女团MAMAMOO四人激动落泪

网易娱乐11月1日报道据台湾媒体报道,南韩女团竞争回归的生死斗《Queendom》昨(10/31)晚播出大决赛,并以直播方式进行,6组女团、女歌手皆演唱新歌,并加总前三轮的赛前赛、音源成绩与直播现场投...

正确复制、重写别人的代码,不算抄袭

我最近在一篇文章提到,工程师应该怎样避免使用大量的库、包以及其他依赖关系。我建议的另一种方案是,如果你没有达到重用第三方代码的阈值时,那么你就可以自己编写代码。在本文中,我将讨论一个在重用和从头开始编...

HTML DOM tr 对象_html event对象

tr对象tr对象代表了HTML表格的行。HTML文档中出现一个<tr>标签,就会创建一个tr对象。tr对象集合W3C:W3C标签。集合描述W3Ccells返回...

JS 打造动态表格_js如何动态改变表格内容

后台列表页最常见的需求:点击表头排序+一键全选。本文用原生js代码实现零依赖方案,涵盖DOM查询、排序算法、事件代理三大核心技能。效果速览一、核心思路事件入口:为每个<th>绑...

连肝7个晚上,总结了66条计算机网络的知识点

作者|哪吒来源|程序员小灰(ID:chengxuyuanxiaohui)计算机网络知识是面试常考的内容,在实际工作中经常涉及。最近,我总结了66条计算机网络相关的知识点。1、比较http0....

Vue 中 强制组件重新渲染的正确方法

作者:MichaelThiessen译者:前端小智来源:hackernoon有时候,依赖Vue响应方式来更新数据是不够的,相反,我们需要手动重新渲染组件来更新数据。或者,我们可能只想抛开当前的...

为什么100个前端只有1人能说清?浏览器重排/重绘深度解析

面试现场的"致命拷问""你的项目里做过哪些性能优化?能具体讲讲重排和重绘的区别吗?"作为面试官,我在秋招季连续面试过100多位前端候选人,这句提问几乎成了必考题。但令...

HTML DOM 介绍_dom4j html

HTMLDOM(文档对象模型)是一种基于文档的编程接口,它是HTML和XML文档的编程接口。它可以让开发人员通过JavaScript或其他脚本语言来访问和操作HTML和XML文档...

JavaScript 事件——“事件流和事件处理程序”的注意要点

事件流事件流描述的是从页面中接收事件的顺序。IE的事件流是事件冒泡流,而NetscapeCommunicator的事件流是事件捕获流。事件冒泡即事件开始时由最具体的元素接收,然后逐级向上传播到较为不...

探秘 Web 水印技术_水印制作网页

作者:fransli,腾讯PCG前端开发工程师Web水印技术在信息安全和版权保护等领域有着广泛的应用,对防止信息泄露或知识产品被侵犯有重要意义。水印根据可见性可分为可见水印和不可见水印(盲水印)...

国外顶流网红为流量拍摄性侵女学生?仅被封杀三月,回归仍爆火

曾经的油管之王,顶流网红DavidDobrik复出了。一切似乎都跟他因和成员灌酒性侵女学生被骂到退网之前一样:住在950万美元的豪宅,开着20万美元的阿斯顿马丁,每条视频都有数百万观看...人们仿佛...

JavaScript 内存泄漏排查方法_js内存泄漏及解决方法

一、概述本文主要介绍了如何通过Devtools的Memory内存工具排查JavaScript内存泄漏问题。先介绍了一些相关概念,说明了Memory内存工具的使用方式,然后介绍了堆快照的...

外贸独立站,网站优化的具体内容_外贸独立站,网站优化的具体内容有哪些

Wordpress网站优化,是通过优化代码、数据库、缓存、CSS/JS等内容,提升网站加载速度、交互性和稳定性。网站加载速度,是Google搜索引擎的第一权重,也是SEO优化的前提。1.优化渲染阻塞。...

这8个CSS工具可以提升编程速度_css用什么编译器

下面为大家推荐的这8个CSS工具,有提供函数的,有提供类的,有提取代码的,还有收集CSS的统计数据的……请花费两分钟的时间看完这篇文章,或许你会找到意外的惊喜,并且为你的编程之路打开了一扇新的大门。1...

vue的理解-vue源码 历史 简介 核心特性 和jquery区别 和 react对比

一、从历史说起Web是WorldWideWeb的简称,中文译为万维网我们可以将它规划成如下的几个时代来进行理解石器时代文明时代工业革命时代百花齐放时代石器时代石器时代指的就是我们的静态网页,可以欣...