Python之格式化字符串(格式化字符串python)
off999 2024-09-18 22:35 20 浏览 0 评论
格式化字符串
还记得前面学过的,计算税后薪资 的程序的例子吗?
让用户输入薪资,乘以75% 得到税后薪资,打印到屏幕上。
代码如下
salary = input('请输入薪资:') # 计算出税后薪资 aftertax = int(salary)*75/100 # 再转化为字符串,方便下面的字符串拼接 aftertaxStr = str(aftertax) print('税后薪资是:' + aftertaxStr)
如果我们要显示的不仅是税后薪资,还有税前薪资,缴税额。像下面这样
税前薪资是 10000元, 缴税:2500元, 税后薪资是:7500元
代码又该怎么写呢?
我想肯定难不倒聪明的你。
对了, 加号可以连接多个字符串,可以这样
salary = input('请输入薪资:') # 计算出缴税额,存入变量tax tax = int(salary) *25/100 # 转化为字符串,方便下面的字符串拼接 taxStr = str(tax) # 计算出税后工资,存入变量aftertax aftertax = int(salary) *75/100 # 转化为字符串,方便下面的字符串拼接 aftertaxStr = str(aftertax) print('税前薪资是:' + salary + '元, 缴税:' + taxStr + '元, 税后薪资是:' + aftertaxStr + '元')
运行一下,是不是确实实现了我们的需求。
但是这里面有问题吗?
对了最后一句代码,写的是不是有点。。。。。烧脑?
字符串的多次拼接比较麻烦,一不小心就可能 漏掉了 一个加号或者引号。
如果我们能够这样写
税前薪资是 x 元, 缴税:y 元, 税后薪资是:z 元
然后,直接将我们计算好的 税前薪资, 缴税额,税后薪资 分别作为 x, y, z 填入进去。
这样就不需要麻烦的字符串拼接了。Python 支持这样的操作,这样的操作称之为字符串的格式化。
可以点击文章末尾【了解更多】,或者百度搜索白月黑羽教Python,一起来学Python吧
python3 中字符串格式化有如下几种方法
printf 风格
这种方式 和 传统的C语言printf函数使用一样的格式化语法。
比如上面的例子里面,我们使用这种方法可以这样格式化字符串
salary = input('请输入薪资:') # 计算出缴税额,存入变量tax tax = int(salary) *25/100 # 计算出税后工资,存入变量aftertax aftertax = int(salary) *75/100 print('税前薪资是:%s 元, 缴税:%s 元, 税后薪资是:%s 元' % (salary,tax,aftertax))
大家运行一下看看,可以发现也能正确的输出结果。
大家可以发现,和前面的字符串拼接不同, 我们使用了下面这样模板一样的字符串
税前薪资是:%s 元, 缴税:%s 元, 税后薪资是:%s 元
其中 %s 就是模板中的占位符,表示这个位置先占着,待会儿要有数据填入到这里。
然后再提供一个元组,里面依次存放需要填入到 %s 占位位置 数据。
这里是使用变量 (salary,tax,aftertax) 。
%s 是一种格式化符号, Python 解释器 看到 %s , 就会调用内置函数 str(),并将对应的格式化对象作为的参数传入 , 返回的结果字符串填入对应占位符。
简单说 %s 位置填入的结果,就是调用str函数的返回值。
str()内置函数,它的参数几乎所有内置类型的对象,字符串、 整数、 浮点数 、list 等等都可以
所以 我们可以用 %s 为占位符, 对应的格式化对象, 不仅仅是字符串,可以是整数、 浮点数 、list 等等。
格式化字符串里面占位符的个数 必须 和 后面对应的格式化对象个数相同,
比如
'税前薪资:%s 元, 缴税:%s 元, 税后薪资:%s 元' % (salary,tax,aftertax)
占位符是3个,那么后面的元组里面的格式化对象就是3个。
如果占位符是2个,后面的元组里面的格式化对象就应该是2个。像这样
'税前薪资:%s 元, 缴税:%s 元' % (salary,tax)
如果占位符是1个,后面的元组里面的格式化对象就应该是1个。像这样
'税前薪资:%s 元' % (salary,)
还记得,我们说过, 元组里面只有1个元素,后面别忘了加个逗号。
像这种只有一个格式化对象的情况下,可以直接就用格式化对象,不需要放到元组里面,像这样
'税前薪资:%s 元' % salary
指定宽度和对齐
如果我们需要将下面这样的3个字符串进行格式化
'税前薪资:%s 元' % 100000 '税前薪资:%s 元' % 10000 '税前薪资:%s 元' % 1000
得到的结果如下
税前薪资:100000 元 税前薪资:10000 元 税前薪资:1000 元
会发现,由于被格式化的数字对应的字符串长度不同,导致结果不对齐。
这样的输出结果显得不够美观。
我们可以指定格式化结果的字符串长度,比如我想要格式化结果至少10个字符,不足10个字符补空格,就可以这样
'税前薪资:%10s 元' % 100000 '税前薪资:%10s 元' % 10000 '税前薪资:%10s 元' % 1000
%10s 中的 10 就是指定了格式化结果至少10个字符。
得到的结果就是
税前薪资: 100000 元 税前薪资: 10000 元 税前薪资: 1000 元
如果我们希望是左边对齐,而不是右边对齐,就可以加一个 - 好,像这样
'税前薪资:%-10s 元' % 100000 '税前薪资:%-10s 元' % 10000 '税前薪资:%-10s 元' % 1000
可以得到如下结果
税前薪资:100000 元 税前薪资:10000 元 税前薪资:1000 元
%d 和 %f
占位符除了 %s ,还有其它的一些。
常见的是 %d 和 %f 。
%d 用在 格式化对象 是 整数的情况 ,比如
'税前薪资:%d 元' % 10000
%f 用在 格式化对象 是 浮点数的情况,比如
'税前薪资:%f 元' % 10000.32
前面我们说过了 %s 也可以用来格式化 整数和 浮点数,但是有些情况下, %d %f 有特别的用处。
比如,打印数字的时候,我们指定宽度,而且不足宽度,希望补零,而不是补空格,就可以这样
'税前薪资:%010d 元' % 100000 '税前薪资:%010d 元' % 10000 '税前薪资:%010d 元' % 1000
可以得到如下结果
税前薪资:0000100000 元 税前薪资:0000010000 元 税前薪资:0000001000 元
对于小数的格式化,通常使用 %f,如下
'税前薪资:%010f 元' % 1000.4522 '税前薪资:%010f 元' % 1008.6621 '税前薪资:%010f 元' % 1009.3351
可以得到如下结果
税前薪资:1000.452200 元 税前薪资:1008.662100 元 税前薪资:1009.335100 元
如果我们想保留小数点后面2位数字,就可以加上 .2 像这样
'税前薪资:%010.2f 元' % 1000.4522 '税前薪资:%010.2f 元' % 1008.6621 '税前薪资:%010.2f 元' % 1009.3351
可以得到如下结果
税前薪资:0001000.45 元 税前薪资:0001008.66 元 税前薪资:0001009.34 元
参考文档
详细的 printf风格的格式化,可以参考如下官方文档
https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting
我们这里不打算介绍更多了,因为到了Python3.6 ,有另外一种更方便的方式: f-string 格式化
f-string 格式化
f-string 格式化 就是在字符串模板前面加上f,然后占位符使用{} ,里面直接放入对应的数据对象。
如下所示
f'税前薪资是:{salary}元, 缴税:{tax}元, 税后薪资是:{aftertax}元'
完整的代码如下
salary = input('请输入薪资:') # 计算出缴税额,存入变量tax tax = int(salary) *25/100 # 计算出税后工资,存入变量aftertax aftertax = int(salary) *75/100 print(f'税前薪资是:{salary}元, 缴税:{tax}元, 税后薪资是:{aftertax}元')
运行一下,可以发现输出结果一样。
这种方式是不是更加的直观明了呢?
要注意的是,这种写法必须要Python解释器是3.6 以后的版本才支持哦。
指定宽度
同样,为了输出对齐,我们需要指定填入的字符串的宽度。
方法是,在括号里面的变量后面加上 :宽度值
比如
salary = 10000 print(f'{salary:10}')
f'{salary:10}' 就指定了 宽度为10 个字符, 如果填入的字符串不足10个字符,就在前面加上空格
比如上面的输出结果就是
>>> salary = 10000 >>> print(f'{salary:10}') 10000
完整的一个示例程序如下
# 员工 1 salary = 8000 tax = int(salary) *25/100 aftertax = int(salary) *75/100 print(f'税前薪资是:{salary:8}元, 缴税:{tax:8}元, 税后薪资是:{aftertax:8}元') # 员工 2 salary = 15000 tax = int(salary) *25/100 aftertax = int(salary) *75/100 print(f'税前薪资是:{salary:8}元, 缴税:{tax:8}元, 税后薪资是:{aftertax:8}元') # 员工 3 salary = 100000 tax = int(salary) *25/100 aftertax = int(salary) *75/100 print(f'税前薪资是:{salary:8}元, 缴税:{tax:8}元, 税后薪资是:{aftertax:8}元')
运行一下结果如下:
税前薪资是: 8000元, 缴税: 2000.0元, 税后薪资是: 6000.0元 税前薪资是: 15000元, 缴税: 3750.0元, 税后薪资是: 11250.0元 税前薪资是: 100000元, 缴税: 25000.0元, 税后薪资是: 75000.0元
这样,整体就显得很清爽。
当然上面的代码 有很多重复的部分。聪明的你想到怎么优化一下了吗?
对了,用函数。像这样
def calcTax(salary): tax = int(salary) *25/100 aftertax = int(salary) *75/100 print(f'税前薪资是:{salary:8}元, 缴税:{tax:8}元, 税后薪资是:{aftertax:8}元') # 员工 1 calcTax(8000) # 员工 2 calcTax(15000) # 员工 3 calcTax(100000)
左对齐
上面的输出结果是不足在前面补空格,最终的结果就是右边对齐。 如果我们想左对齐,可以在括号里使用 < 符号
像这样 {salary:<8}
def calcTax(salary): tax = int(salary) *25/100 aftertax = int(salary) *75/100 print(f'税前薪资是:{salary:<8}元, 缴税:{tax:<8}元, 税后薪资是:{aftertax:<8}元') calcTax(8320) calcTax(15023) calcTax(100030)
运行结果如下:
税前薪资是:8320 元, 缴税:2080.0 元, 税后薪资是:6240.0 元 税前薪资是:15023 元, 缴税:3755.75 元, 税后薪资是:11267.25元 税前薪资是:100030 元, 缴税:25007.5 元, 税后薪资是:75022.5 元
小数点后位数
如果我们想指定小数点后保留几位,可以像这样 {salary:<8.1f}
后面的.1f就表示小数点后面保留1位
def calcTax(salary): tax = int(salary) *25/100 aftertax = int(salary) *75/100 print(f'税前薪资是:{salary:8.1f}元, 缴税:{tax:8.1f}元, 税后薪资是:{aftertax:8.1f}元') calcTax(8320) calcTax(15023) calcTax(100030)
运行结果如下:
税前薪资是: 8320.0元, 缴税: 2080.0元, 税后薪资是: 6240.0元 税前薪资是: 15023.0元, 缴税: 3755.8元, 税后薪资是: 11267.2元 税前薪资是:100030.0元, 缴税: 25007.5元, 税后薪资是: 75022.5元
不足补零
如果我们想在不足指定宽度的时候不是补空格,而是补数字0,可以像这样 {salary:08}
def calcTax(salary): tax = int(salary) *25/100 aftertax = int(salary) *75/100 print(f'税前薪资是:{salary:08}元, 缴税:{tax:08.1f}元, 税后薪资是:{aftertax:08.1f}元') calcTax(8320) calcTax(15023) calcTax(100030)
运行结果如下:
税前薪资是:00008320元, 缴税:002080.0元, 税后薪资是:006240.0元 税前薪资是:00015023元, 缴税:003755.8元, 税后薪资是:011267.2元 税前薪资是:00100030元, 缴税:025007.5元, 税后薪资是:075022.5元
转义符
我们在代码中定义一个字符串的时候,有些字符不太方便用键盘直接敲出来,或者敲出来看起来也不知道那是一个字符。
比如 换行符, 我们可以用回车键,敲出来。
a = '''abcd efg'''
其中abcd 和efg之间其实就是有一个换行字符。
有时候像这样的字符出现在字符串中,可以使用转义写法来表示,比如上的字符串就等价于
a = 'abcd\nefg'
‘\n’就是一个转义字符,表示一个换行字符。
处理’\n’ 之外,还有一些其他的字符可以用转义符表示,比如我们还可以用 ‘\t’表示tab字符。
Python字符串中 转义字符都是用反斜杠 \ 开头 。
如果字符串中本身需要有反斜杠,并非转义,比如Windows下面的路径
path = 'c:\windows\temp'
其中的 \t 会被当做一个tab字符,而不是 \ 和 t 两个字符。
这时,可以在在前面再加一个反斜杠, 像下面这样
path = 'c:\\windows\\temp'
也可以在字符前面加上一个 r ,表示字符串内容是raw string, 无需转义,像这样
path = r'c:\windows\temp'
相关推荐
- Python中的两个内置函数id()和type()
-
id()>>>id(3)2531362761072>>>id(3.222222)2531397393680>>>id(3.0)25313...
- python 函数中,如何将另一个函数作为参数传递
-
python函数中,如何将另一个函数作为参数传递,类似C#委托defadd(a,b):"""这是一个简单的加法函数,接受两个参数并返回它们的和。""...
- Python性能暴涨10倍的终极指南:7个核心技巧+代码压缩秘籍
-
提升Python程序运行性能,使代码运行更流畅更快,以及压缩代码,减小代码大小,下面的方法仅供大家参考,有什么更好的方法在评论区说说。1.使用NumPy/SciPy替代纯Python循环...
- Python 匿名函数(Lambda 函数)详解
-
匿名函数(AnonymousFunction),在Python中称为lambda函数,是一种不需要使用def关键字定义的小型函数。它主要用于简化代码,特别适合需要函数对象的地方。1.基...
- Python学习笔记 | 匿名函数lambda、映射函数map和过滤函数filter
-
什么是匿名函数?定义:没有函数名的自定义函数场景:函数体非常简单,使用次数很少,没有必要声明函数,通常搭配高阶函数使用。高阶函数是能够把函数当成参数进行传递的函数,如:映射函数map和过滤函数fil...
- python练习:自定义函数调用:商品购物实例
-
1、商品录入dict_myshanpin_iof={101:{"商品名称":"毛毛熊","单价":25},102:{"商品名称":...
- Python中如何使用Lambda函数(lambda在python中的用法)
-
Python和其他编程语言一样,都在其语法中添加了lambda函数,Pythonlambda是匿名函数,比常规Python自定义函数有更简洁的语法。虽然Lambda语法在开始时可能会觉得有点混乱,...
- 8-Python内置函数(python内置函数代码)
-
Python提供了丰富的内置函数,这些函数可以直接使用而无需导入任何模块。以下是一些常用的内置函数及其示例:1-print()1-1-说明输出指定的信息到控制台。1-2-例子2-len()2-1-说...
- 用Python进行函数式编程(python函数程序)
-
什么是函数式编程?函数式程序设计是一种编程范例,它把计算当作数学函数的评价,避免状态和可变数据。换句话说,函数编程(FunctionalProgramming,FP)促进没有副作用和不变变量的代码。它...
- python 函数进阶(python如何进阶)
-
1.有名函数和匿名函数#该函数有名称,名称是adddefadd(x,y):returnx+y#改函数没有名称属于匿名函数,也叫lambda表达式lambda_add...
- python自学者的分享:自定义函数、参数作用域、匿名函数、装饰器
-
#自定义新函数函数名newhsdefnewhs(a,b=1):#b的默认值为1,在没有传入b值时,采用默认值,,默认值参数不能放前边returna-bprint(newh...
- Python 函数式编程的 8 大核心技巧,不允许你还不会
-
函数式编程是一种强调使用纯函数、避免共享状态和可变数据的编程范式。Python虽然不是纯函数式语言,但提供了丰富的函数式编程特性。以下是Python函数式编程的8个核心技巧:1.纯函数(...
- 零基础到发布:手把手教你创建并分发 Python 自定义库
-
作为程序员,我们经常依赖各种外部库来解决不同的问题。这些库由技术娴熟的开发者创建,为我们提供了节省时间和精力的解决方案。但你是否曾想过:“我也能创建属于自己的自定义库吗?”答案是肯定的!本文将为你详细...
- 打工人学Python:(七)自定义函数,打造自己的武器库
-
从一个简单的函数开始#!/usr/bin/envpython#-*-encoding:utf-8-*-'''@Purpose:Wordcount@...
- 肖sir_python自定义函数format、zip函数
-
python自定义函数一、常见的自定义函数已经学过的函数:list、print、set、str、type、tuple、dict、range、input等今天学的函数:format二、实战讲解(一)f...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python自定义函数 (53)
- python进度条 (54)
- python的for循环 (56)
- python串口编程 (60)
- python写入txt (51)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python qt (52)
- python人脸识别 (54)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- centos7安装python (53)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)