Python中格式化字符串输出的4种方式
Python格式化字符串的4中方式
一、%号
二、str.format(args)
三、f-Strings
四、标准库模板
五、总结四种方式的应用场景’
一、%号占位符
这是一种引入最早的一种,也是比较容易理解的一种方式.使用方式为:
1、格式化字符串中变化的部分使用占位符
2、变量以元组形式提供
3、变量与格式化字符串之间以%连接
1、格式的字符串(即%s)与被格式化的字符串(即传入的值)必须按照位置一一对应
ps:当需格式化的字符串过多时,位置极容易搞混
例如
a = 'zhangsan'
b = 'lisi'
print('%s eated %s' % (a, b)) # zhangsan eated lisi
print("%s asked %s to do something" % ("zhangsan", 'lisi')) # zhangsan asked lisi to do something
2、可以通过字典方式格式化,打破了位置带来的限制与困扰
print("我的名字是%(name)s,我的年龄是%(age)s" % {"name": 'zhangsan', "age": "list"}) # 我的名字是zhangsan,我的年龄是listkwargs = {"name": "zhangsan", "age": 18}
print("my name is %(name)s, my age is %(age)s" % kwargs) # my name is zhangsan, my age is 18
二、str.format 内建函数
该format函数是在python2.6以后引入的,是字符吕类型的内置方法。因为str.format的方式
比%在性能和灵活性上更好一些。
1、使用位置参数
按照位置一一对应
print("{} and {} is good friedng".format('zhangsan', 'lisi')) # zhangsan and lisi is good friedng
2、使用索引
使用索引取对应位置的值
print('{0}{0}{1}{0}'.format('哈哈', '隔')) # 哈哈哈哈隔哈哈
3、使用关键字参数or字典
可以通过关键字or字典方式的方式格式化,打破了位置带来的限制与困扰
print('我的名字是 {name}, 我的年龄是 {age}.'.format(age=18, name='egon'))kwargs = {'name': 'egon', 'age': 18}
print("my name is {name}, my age is {age}".format(age=18, name="zhangsan"))kwargs = {'name': 'zhangsan', "age": 18}
print("my name is {name}, my age is {age}".format(**kwargs)) # 使用**进行解包操作
4、填充与格式化
先取到值,然后在冒号后面设定填充格式:[填充字符][对齐方式][宽度]
<20: 意思是: 左对齐,总共20个字符,不足部分用号填充
print("my name is {0:*<20},my age is {1:*<10}".format("zhangsan",18)) # my name is zhangsan************,my age is 18********# *>10: 右对齐,总共10个字符,不足部分用*填充
print("my name is {0:*<10}".format("zhangsan")) # my name is zhangsan**# *^10: 居中,总共18个字符,不足部分用*填充
print("my name is {0:*^18}".format("zhangsan")) # my name is *****zhangsan*****# ^20: 居中,总共20个字符,不足部分用空白填充
print("my name is {0:^20}".format("zhangsan")) # my name is zhangsan
5、精度与进制
print("{salary:.2f}".format(salary=123456.1234567)) # 123456.12精确到小数点后3位,四舍五入
print("{salary:.10f}".format(salary=123456.1234567)) # 123456.1234567890精确到小数点后3位,四舍五入
print("{:-^10.2f}".format(3.1415926)) # ---3.14--- 取2位小数后,居中,共10位,其余用-填充
print("{0:b}".format(123)) # 1111011 转成二进制
print("{0:o}".format(123)) # 173 转成八进制
print("{0:x}".format(123)) # 7b 转成十六进制
print("{0:,}".format(1234567)) # 1,234,567 千分位格式化
三、f-Strings
由python3.6版本引入的一个特性,称之为字面量格式化字符串
以F或者f开头,后面跟字符串,字符串中的表达式用大括号{}包起来,它会将变量或表达式计算后的值替换进去
f-string是以f或F开头的字符串, 核心在于字符串中符号{}的使用
1、{}中可以是变量名
name = ‘zhangsan’
print(f"my name is {name}") # my name is zhangsan
2 、{}中可以是表达式
可以在{}中放置任意合法的表达式,会在运行时计算
print(f"{3 * 3 / 2}") # 4.5a = 1
b = 2
print(f"a + b = {a + b}") # a + b = 3
比如 函数的调用
name = 'zhangsan'
print(F"my name is {name.upper()}") # my name is ZHANGSANdef foo(n):print("zhangsan is beautifull")return nprint(F"{foo(10)}") # 10 执行时打印函数的返回值# 在{}中使用‘或者” 保证{}内外使用的不一样即可,如下
print(F'test {"str"}') # teststr
print(F"test {'str'}") # teststr# 在{}中需要同时使用’和“,则需要外部字符串使用文档字符串符号’‘’或者”“”
name = 'zhangsan'
print(F'''it's name is "{name}" ''') # it's name is "zhangsan" 注意各个’‘’是不一样的
print(F"{'{}'}") # 输出{} 注意两种引号不一样# {}中不允许出现\即使作为函数参数;必须使用的话,可以将包含\的内容放到一个变量里,如下
a = 'zhangsan'
b = f'my name is {a:-^10}'
print(b) # my name is -zhangsan-# a = f'print the {"\t"}'
# print(a) # 语法错误a = '\n'
print(F"print the {a}") # print the \n没有显示 但打印正常# f.str 格式可用于多行字符串,有两种方式:使用连接符\ 和使用doc签字串。如下
name = 'zhangsan '
age = 18res = f'my name is {name},' \F"my age is {age}," \F"and i'm happy"print(res) # my name is zhangsan ,my age is 18,and i'm happyres = f'''my name is {name} ,my age is {age},and i'm happy,
my name is {name} ,my age is {age},and i'm happy
my name is {name} ,my age is {age},and i'm happy
my name is {name} ,my age is {age},and i'm happy'''print(res) # 输出4行文本
四、string模块的template
这是string模块提供的一个模版类,默认使用$ 或者 ${}(建议用这个)来占位,而不是用%
具体用法如下
from string import Templates = 'hi ${name}'
res = Template(s).substitute(name='zhangsan') # substitute替代品的意思
print(res) # hi zhangsan# 当需要输出一个$符号时,可以使用$$
s1 = f'{name}‘s salary is $$1000'
res = Template(s1).substitute(name='zhangsan')
print(res)# Template还有一个safe_substitute函数,
# 当格式化字符串中有变量未给出值时,此函数将占位符当成字符串输出,
# 而substitute会报错name = 'zhangsan'# s2 = f'{name} and {name2}‘s salary is $$1000'
# res = Template(s2).substitute()
# print(res) # 报错NameError: name 'name2' is not defined
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:725638078s3 = 'hi ${apple}, ${peach}'
res = Template(s3).safe_substitute(apple='apple')
print(res) # hi apple, ${peach}
五、总结四种方式的应用场景
性能对比
from timeit import timeitdef test_s():name = 'zhangsan'age = 18return "%s:%s" % (name, age)def test_format():name = 'zhangsan'age = 18return '{}:{}'.format(name, age)def test_f():name = 'zhangsan'age = 18return f'{name}:{age}'def test_t():return Template('{name}:{age}').substitute(name='zhangsan', age=18)res1 = timeit(test_s, number = 100000)
res2 = timeit(test_format, number = 100000)
res3 = timeit(test_f, number = 100000)
res4 = timeit(test_t, number = 100000)
print(res1) # 0.027567900004214607
print(res2) # 0.03230700000131037
print(res3) # 0.020800700003746897
print(res4) # 0.0893696999992244
看效率表现,还是 最新的f.str最快
相关文章:

Python中格式化字符串输出的4种方式
Python格式化字符串的4中方式 一、%号 二、str.format(args) 三、f-Strings 四、标准库模板 五、总结四种方式的应用场景’ 一、%号占位符 这是一种引入最早的一种,也是比较容易理解的一种方式.使用方式为: 1、格式化字符串中变化的部分使用占位符 2、…...

C#基础教程15 枚举与类
文章目录 C# 枚举(Enum)声明 enum 变量C# 类(Class)类的定义成员函数和封装C# 中的构造函数关键字 staticC# 枚举(Enum) 枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。 C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。 声明 enum 变…...

三步 让你的 vscode 自动编译ts文件
三步让你的 vscode 自动编译ts文件 TypeScript环境安装与如何在vscode实现自动编译ts文件? 文章目录三步让你的 vscode 自动编译ts文件前提条件环境安装自动编译运行监视任务时报错?前提条件 安装 node 环境 环境安装 tsc 作用:负责将ts 代码 转为 浏…...

STM32程序下载和启动方式
目录1 BOOT引脚配置和下载说明2 关于串口下载方式3 关于一按复位就跑代码4 关于下载调试速度5 关于三种启动方式5.1 FLASH启动5.2 系统存储器器启动5.3 SRAM启动6 关于程序的三种下载方式1 BOOT引脚配置和下载说明 BOOT0BOOT1程序运行ST-Link下载串口下载启动说明xx无0x√√用…...

基础01-ajax fetch axios 的区别
ajax fetch axios 的区别 题目 ajax fetch axios 的区别 分析 三者根本没有可比性,不要被题目搞混了。要说出他们的本质 传统 ajax AJAX (几个单词首字母,按规范应该大写) - Asynchronous JavaScript and XML(异…...

Android Execution failed for task ‘:app:mergeDebugJavaResource
错误提示 FAILURE: Build failed with an exception.* What went wrong: Execution failed for task :app:mergeDebugJavaResource. > A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction> 2 files found with path k…...

spring事物源码分析
今天的任务是剖析源码,看看Spring 是怎么运行事务的,并且是基于当前最流行的SpringBoot。还有,我们之前剖析Mybatis 的时候,也知道,Mybatis 也有事务,那么,他俩融合之后,事务是交给谁…...

炫龙游戏本Win10系统总是蓝屏崩溃怎么办?
炫龙游戏本Win10系统总是蓝屏崩溃怎么办?有用户使用的炫龙游戏本最近总是在运行的过程中出现自动蓝屏的情况,有的时候自己还在操作电脑,而屏幕却蓝屏了,导致自己的工作被中断了。那么这个情况要怎么去进行修复呢?来看看…...

华为OD机试题,用 Java 解【数字加减游戏】问题
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…...

C++ 手写一个高性能json生成与解析器
文章目录 前言一、了解json格式二、统一数据类型:TJson三、解析json数据四、输出json数据五、实现便利的修改与访问六、性能优化七、源码下载与解析前言 由于C++标准库中并不存在解析json数据库,但json格式又非常的常见 如今绝大部分网络数据传输都采用的json数据传输格式,…...

java——了解反射
目录 什么是反射? 反射如何获取类信息? 小结: 什么是反射? 反射是用代码分析类信息的能力 类中有哪些信息:方法、对象、构造器、全局变量、父类、接口等.... 反射如何获取类信息? 三种方式 1.通过对象…...

The Sandbox 中的独特体验——《奥米加》
在过去几年间,The Sandbox 游戏变得越来越受欢迎。因为我们为玩家提供了在虚拟世界中探索、创造和游戏的自由,没有线性游戏的限制。DeQuest 工作室创作的《奥米加》也正是如此,绝对是一个前所未有的体验! 先了解一下《奥米加》的故…...

76 Python写入csv文件时出现空行_newline参数解决
76 Python写入csv文件时出现空行_newline参数解决 文章目录76 Python写入csv文件时出现空行_newline参数解决1. 准备工作2. with open 语句没有newline参数3. with open 语句有newline参数4. 总结1. 准备工作 在电脑D盘新建一个【76】文件夹。 用VScode编辑器打开【76】文件夹…...

高等数学——定积分和不定积分
文章目录不定积分概念几何意义性质不定积分的基本公式三种主要积分法三类常见可积函数积分定积分概念几何意义性质积分上限的函数定积分的计算几何应用反常积分无穷区间的反常积分无界函数的反常积分不定积分 不定积分是导数的逆运算。 概念 原函数:设f(x)f(x)f(…...

imx6 usb增强信号强度
USB信号 参考:官方文档 USB信号完整性取决于许多因素,如电路设计、PCB布局、堆叠和阻抗。每个产品可能彼此不同,因此客户需要微调参数,以获得最佳的信号质量。 测试板已经路由出两个USB端口:一个OTG1,一个主机。每个端…...

深入理解性能压测工具原理
如果没有性能测试工具如何通过手工实现 如果没有性能测试工具,通过手工进行性能测试,这是一个值得我们思考的问题。这时候需要一个协调员发送指令,一个操作员进行操作,对系统施加压力,多个操作员代表着多个用户进行并…...

Java的概述和运行方式
目录 一.Java是什么? 1.1Java的目前状况和学习需求 1.2Java的平台分类和特点 二.Java程序的运行方式 2.1 Java的程序结构 2.2 JDK、JRE、JVM的关系 2.3 Java运行详情 总结 😽个人主页:tq02的博客_CSDN博客-领域博主 🌈理想…...

【C语言】每日刷题 —— 牛客
前言 大家好,今天带来一篇新的专栏 c_牛客,不出意外的话每天更新十道题,难度也是从易到难,自己复习的同时也希望能帮助到大家,题目答案会根据我所学到的知识提供最优解。 🏡个人主页:悲伤的猪大…...

JavaEE课程实践-Servlet的部署(tomcat服务器)
目录 Servlet简述 tomcat服务器的安装和运行 Servlet的部署 部署具体步骤 一、创建maven工程 二、创建Servlet类 三、导入相应jar包 四、编写Servlet代码 五、运行maven项目,启动tomcat服务器 六、测试访问是否成功。 Servlet简述 Servlet 是 Java EE 技术…...

Java 中的拆箱和装箱
在 Java 中,每个基本数据类型都对应了一个包装类型,比如:int 的包装类型是 Integer,double 的包装类型是 Double…那么,基本数据类型和包装类型有什么区别呢? 大概有以下几点区别: 成员变量的…...

从0开始自制解释器——实现多位整数的加减法计算器
上一篇我们实现了一个简单的加法计算器,并且了解了基本的词法分析、词法分析器的概念。本篇我们将要对之前实现的加法计算器进行扩展,我们为它添加以下几个功能 计算减法能自动识别并跳过空白字符不再局限于单个整数,而是能计算多位整数 提…...

(12)C#传智:File类,泛型,字典,FileStream,StreamReader,多态
内容有点多,重点:泛型、字典,流与多态。 继续深入学习内容:List、Dictionary、using语句、FileStream 一、File类的继续学心 File.ReadAllLines(string path,Encoding,encoding)指定编码读取返回行字串数组 File.WriteAllText(string…...

Dubbo的服务暴漏与服务发现源码详解
服务暴漏 如果配置需要刷新则根据配置优先级刷新服务配置 如果服务已经导出,则直接返回 是否异步导出(全局或者服务级别配置了异步,则需要异步导出服务) 服务暴漏入口DefaultModuleDeployer#exportServices private void exp…...

Python 的IDE——PyCharm
IDE介绍与安装 介绍 集成开发环境(IDE) 集成开发环境(IDE,integrated Development Environment) —— 集成开发软件需要的所有工具,一般包括以下工具: 图形用户界面 代码编辑器(支持代码补全、自动缩进) 编译器/解释器 调试器…...

01 C语言使用链表实现队列(Queue、FIFO)模块
01 C语言使用链表实现队列(Queue、FIFO)模块 作者将狼才鲸创建日期2023-03-08Gitee源码仓库地址:C语言使用链表实现队列(Queue、FIFO)模块 Linux原生的队列KFIFO一次只能操作一个队列,操作变长元素时&…...

2.2操作系统-进程管理:前趋图、前趋图与PV操作
2.1操作系统-进程管理:前趋图\前趋图与PV操作前趋图前趋图与PV操作练习前趋图与PV操作,一般出现了,分值在2~3分左右,技巧性很强。 前趋图 前趋图是为了描述一个程序的各部分间的依赖关系,或者是一个大的计算的各个子…...

凤凰游攻略
凤凰游攻略1 装备📦1.1 证件1.2 日常用品1.3 药品1.4 衣物1.5 洗漱用品2 交通🚗3 住宿🏠4 美食🍕5 拍照📷5.1 租苗族服5.1.1 单租服装5.1.2 服装化妆5.2 一条龙旅拍6 路线🗺️景点🏙️7 注意⚠️…...

Nginx 高可用方案
准备工作 10.10.4.5 10.10.4.6 VIP:10.10.4.10 两台虚拟机。安装好Nginx 安装Nginx 更新yum源文件: rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm wget -O /etc/yum.repos.d/CentOS-Ba…...

Linux基本指令
文章目录 常用Linux命令常见Linux指令 1、ls指令 语法:ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项: -a 列出目录下的所有文件…...

Linux系统基础命令(二)
一、浏览和切换目录 ls命令:列出文件和目录,主要用于列出文件和目录 CentOS的终端默认是有颜色标注的。一般来说:蓝色--->目录;绿色-->可执行文件;红色--->压缩文件;浅蓝色--->链接文件&#…...