Python格式化输出的三种方式:%、string.format()、f-string

目录

一、%方式

二、string.format()方式

三、f-string方式

Python格式化输出的三种方式:%、string.format()、f-string

一、%方式

用%来格式化字符串是继承C语言的用法,这种方式比较老旧,不推荐使用。但是,我们在Python语言中,也会看到用%格式化输出。为了弄清楚代码的意思,我们来看看它的用法。

使用格式: '格式字符串' % (输出项1,输出项2,…输出项n) (注意:如果输出项只有一个,可以省略最后一对括号)

格式字符串:

flags:可选,可供选择的值有:

为空 :右对齐

为- :左对齐

width:可选,输出字段的宽度

.precision:可选,小数点后面保留地位数precision(注意:如果是字符串输出,则为截取字符串位数precision)

typecode:必选,可供选择的值有:

c :以字符形式输出,只输出一个字符

s :输出字符串

d/i :以带符号的十进制形式输出整数(正数不输出符号)

f : 以小数形式输出单、双精度数,隐含输出6位小数

o : 以八进制无符号形式输出整数

e/E:以指数形式输出实数

g/G:选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0

x/X :以十六进制无符号形式输出整数(不输出前导符0x),用x则输出十六进制数的a~f时以小写形式输出,用X时,则以大写字母输出

% :当字符串中存在格式化标志时,需要用 %%表示一个百分号

案例一:

输出:

n1=13, n2=14

案例二:

案例三:

二、string.format()方式

用string.format()格式化字符串,这种是新式的方法,官方推荐。相对基本格式化输出采用‘%’的方法,format()功能更强大,该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用大括号‘{}’作为特殊字符代替‘%’

使用格式: '{ }' .format(输出项[,格式字符串]) , 其中格式字符串是可以选择项目。

基本用法,有以下5种

1、位置替换:

# 按照先后顺序对format内容进行替换print('岗位:{}, 性别:{}'.format('经理', '男'))# 输出: # 岗位:经理, 性别:男

2、 索引替换:

# 按照索引对format内容进行替换print('岗位:{0}, 性别:{1}, 岗位:{0}'.format('经理', '男'))# 输出: # 岗位:经理, 性别:男, 岗位:经理

3、关键字匹配:

# 按照索引对format内容进行替换print('岗位:{gw}, 性别:{xb}, 岗位:{gw}'.format(gw='经理', xb='男'))# 输出: # 岗位:经理, 性别:男, 岗位:经理

4、对象替换:

# =======对象为元组==========#tup1 = ("张三", "男")tup2 = ('李四', '女')print('名字:{0[0]}, 性别:{0[1]}; 名字:{1[0]}, 性别:{1[1]}'.format(tup1, tup2))# 输出:# '名字:张三, 性别:男; 名字:李四, 性别:女'# =======对象为列表=======#lis1=["张三","男"]lis2=["李四","女"]print('名字:{0[0]}, 性别:{0[1]}; 名字:{1[0]}, 性别:{1[1]}'.format(lis1, lis2))# 输出:# '名字:张三, 性别:男; 名字:李四, 性别:女'# =========== 字典 ==========#dic1 = {'姓名': '张三', '性别':'男'}dic2 = {'姓名': '李四', '性别':'女'}print('名字:{0[姓名]}, 性别:{0[性别]}; 名字:{1[姓名]}, 性别:{1[性别]}'.format(dic1, dic2))# 输出:# '名字:张三, 性别:男; 名字:李四, 性别:女'

5、嵌套替换

print('hello {3:{1}>{2}} '.format('李四','*',10,'你好'))# 输出: hello ********你好print('hello {0:{1}^{2}} '.format('李四','*',10,'你好'))# 输出: hello ****李四**** 

常用格式化输出方式,有以下8种

1、左对齐及填充

#========== 左对齐 ==========#print('%-5s'%'张三' )             # 常数5表示占5个字符,-:表示左对齐# 输出:'张三    'print('{:<5}'.format('张三'))    # 常数5表示占5个字符,<:表示左对齐# 输出:'张三    'print('{:*<5}'.format('张三') )  #  <表示左对齐, *表示用*号进行填充, 常数5表示占5个字符# 输出:'张三***'

2、右对齐及填充

#========== 右对齐 ===========#print('%5s'%'张三')               # 常数5表示占5个字符,默认右对齐#输出:'   张三'print('{:>5}'.format('张三') )    # 常数5表示占5个字符, >:表示右对齐# 输出:'   张三'print('{:*>5}'.format('张三'))    # 常数5表示占5个字符, >:表示右对齐, *表示用*号进行填充,# 输出:'***张三'

3、居中对齐及填充

#========== 居中对齐 ===========#print('{:^5}'.format('张三'))# 输出:' 张三  'print('{:*^5}'.format('张三') )   #  常数5表示占5个字符, >: 表示右对齐, *表示用*号进行填充,# 输出:'*张三**'

4、截取指定长度字符串

#===== 截取指定长度字符串 =====#print('%.2s'%'张三李四')  # 表示从字符串中截取两个字符# 输出:'张三'

5、百分号

#===== 百分号-% =====#print('{:%}'.format(0.2))     # 默认输出保留6位小数# 输出:'20.000000%'print("{:.2%}".format(0.02))  # 百分比计算 常用# 输出:'2.00%'

6、逗号分隔符

# ===== 逗号分隔符 =====%print('{:,}'.format(1232434234234))# 输出:'1,232,434,234,234'

7、时间格式化输出

# ======== 对时间格式化输出 ========= #import datetimed = datetime.datetime(2022, 4, 29, 9, 52, 20)print('{:%Y-%m-%d %H:%M:%S}'.format(d))# 输出: '2022-04-29 09:52:20'

格式转换

b - 二进制。将数字以2为基数进行输出。

c - 字符。在打印之前将整数转换成对应的Unicode字符串。

d - 十进制整数。将数字以10为基数进行输出。

o - 八进制。将数字以8为基数进行输出。

x - 十六进制。将数字以16为基数进行输出,9以上的位数用小写字母。

e - 幂符号。用科学计数法打印数字。用'e'表示幂。

g - 一般格式。将数值以fixed-point格式输出。当数值特别大的时候,用幂形式打印。

n - 数字。当值为整数时和'd'相同,值为浮点数时和'g'相同。不同的是它会根据区域设置插入数字分隔符。

% - 百分数。将数值乘以100然后以fixed-point('f')格式打印,值后面会有一个百分号。

#  ======== 格式转换 =========  #print('{0:b}'.format(3))# 输出:11print('{:c}'.format(20))# 输出:print('{:d}'.format(20))# 输出:20print('{:o}'.format(20))# 输出:24print('{:x}'.format(20))# 输出:14print('{:e}'.format(20))# 输出:2.000000e+01print('{:g}'.format(20.1))# 输出:20.1print('{:f}'.format(20))# 输出:20.000000print('{:n}'.format(20))# 输出:20print('{:%}'.format(20))# 输出:2000.000000%

三、f-string方式

用f-string格式化字符串,这种方式在Python3.6 及以上推荐使用。python3.6引入了一种新的字符串格式化方式:f-string格式化字符串。从%s格式化到format格式化再到f-string格式化,格式化的方式越来越直观,f-string的效率也较前两个高一些,使用起来也比前两个简单一些。同时值得注意的是,f-string就是在format格式化的基础之上做了一些变动,核心使用思想和format一样。

1、基本使用,f-string用大括{ }表示被替换字段,其中直接填入替换内容即可

name = "Huang Wei"print(f"Hello, my name is {name}")# 输出:Hello, my name is Huang Weinum = 2print(f"I have {num} apples")# 输出:I have 2 applesprice = 95.5print(f"He has {price}#34;)# 输出:He has 95.5$

2、表达式求值与函数调用,f-string的大括号{ }可以填入表达式或调用函数,Python会求出其结果并填入返回的字符串内。

print(f"They have {2+5*2} apples")# 输出:They have 12 applesname = "Huang Wei"print(f"my name is {name.lower()}")# 输出:my name is huang weiimport mathprint(f"Π的值为{math.pi}")# 输出:Π的值为3.141592653589793

3、f-string中引号使用存在的问题 ,f-string大括号内使用的引号不能和大括号外的引号定界符引号冲突,需根据情况灵活切换使用单引号、双引号、单三引号、双三引号。

注意:只要大括号内外的引号不同,就没有问题。但是大括号中只能是但引号和 双引号 ,大括号外的引号定界符引号可以使用单引号、双引号、单三引号、双三引号。

print(f'I am {"Huang Wei"}')# 输出:I am Huang Weiprint(f'''I am {'Huang Wei'}''')# 输出:I am Huang Weiprint(f"""I am {'Huang Wei'}""")# 输出:I am Huang Weiprint(f"""I am {"Huang Wei"}""")# 输出:I am Huang Weiprint(f'I am {'Huang Wei'}')# 输出:#     print(f'I am {'Huang Wei'}')#                    ^^^^^# SyntaxError: f-string: expecting '}'

4、大括号外的引号还可以使用\转义,但大括号内不能使用\转义。

print(f"he\'ll go to {'shang hai'}")# 输出:he'll go to shang haiprint(f"""he introduces himself {"I\'m Tom"}""")#输出:#     print(f"""he introduces himself {"I\'m Tom"}""")#                                                    ^# SyntaxError: f-string expression part cannot include a backslashprint(f"""he introduces himself {"I'm Tom"}""")# 输出:he introduces himself I'm Tom

5、f-string大括号外如果需要显示大括号,则应输入连续两个大括号{{ }};大括号内需要引号,使用引号即可。

print(f"5{'{apples}'}")#输出:5{apples}print(f"{{5}}{'apples'}")#输出:{5}apples

6、f-string填充

当我们指定了字符串最终的长度的时候,如果现有的字符串没有那么长,那么我们就用某种字符(填充字符)来填满这个长度,这就是“填充”。

6.1默认使用空格填充

name = "Huang Wei"print(f"{name:>20}")#输出:           Huang Weiprint(f"{name:<20}")#输出:Huang Weiprint(f"{name:^20}")#输出:     Huang Wei

6.2用指定字符进行填充

name = "Huang Wei"print(f"{name:_>20}")#输出:___________Huang Weiprint(f"{name:_<20}")#输出:Huang Wei___________print(f"{name:_^20}")#输出:_____Huang Wei______

注意:填充分为左填充、右填充、居中填充。左填充表示在字符串左侧填充,右填充表示在字符串右侧填充,居中填充表示在字符串左右两侧对称填充。>表示左填充,<表示右填充,^表示居中填充。记忆方法:括号口朝左边,就表示左填充;括号口朝右边,就表示右填充。

7、f-string截断与填充的结合使用,当需要格式化的数据类型是“字符串”的时候,才会发生截断。

# 当发生截断的时候,如果不指定填充符,默认使用空格填充print(f"{a:10.3}")#输出:Hel# 在发生截断的时候,使用指定的填充符print(f"{a:_>10.3}")#输出:_______Helprint(f"{a:_<10.3}")#输出:Hel_______

8、f-string针对date、datetime和time对象,进行年月日、时分秒等信息提取

from datetime import *# today()返回本地时间的一个date对象a = date.today()print(f"{a:%Y-%m-%d}")#输出:2020-02-01

版权声明

1 本文地址:https://www.sunlonger.com/jijin/1230240.html 转载请注明出处。
2 本站内容除隼龙儿财经签约编辑原创以外,部分来源网络由互联网用户自发投稿及AIGC生成仅供学习参考。
3 文章观点仅代表原作者本人不代表本站立场,并不完全代表本站赞同其观点和对其真实性负责。
4 文章版权归原作者所有,部分转载文章仅为传播更多信息服务用户,如信息标记有误请联系管理员。
5 本站禁止以任何方式发布转载违法违规相关信息,如发现本站有涉嫌侵权/违规及任何不妥内容,请第一时间联系我们申诉反馈,经核实立即修正或删除。


本站仅提供信息存储空间服务,部分内容不拥有所有权,不承担相关法律责任。
上一篇 2024年06月17日
下一篇 2024年06月17日

相关推荐

  • 以下是几种构建指数基金组合的常用方法: 一、核心

    以下是几种构建指数基金组合的常用方法:一、核心 - 卫星策略1.核心资产配置●选择宽基指数基金作为核心资产,如沪深300指数基金。沪深300涵盖了沪深两市规模大、流动性好的300只股票,能代表A股市场的整体表现。这部分资产通常占组合的较大比例,比如60% - 70%。其作用是获取

    2024-10-28 22:02:12
    0 0
  • A500投资锦囊,来了

    风险提示:基金有风险,投资须谨慎。本观点仅代表当时观点,今后可能发生改变,仅供参考,不构成投资建议或保证,亦不作为任何法律文件。基金过往业绩并不预示其未来表现,基金管理人管理的其他基金的业绩并不构成基金业绩表现的保证。我国基金运作时间较短,不能反映股市发展

    2024-10-28 22:02:07
    0 0
  • 李稻葵谈理财:假如有10万元,会先买1万元保险,再买8万元基金

    近日,清化大学中国经济思想与实践研究院院长李稻葵做客央视财经频道《对话》栏目,对当前宏观经济运行情况发表最新见解。现场,李稻葵被问假如有10万元,该如何分配。李稻葵表示:“首先有个小前提,就是这10万元钱我5年之内不需要急用。首先,我想至少拿出1万元钱买保险,我

    2024-10-28 22:01:57
    0 0
  • 指数基金的三种配置方法

    1976年6月,先锋领航发行了旗下第一款指数基金产品,甚至其名称都叫做First Index Investment Trust(现已改名为Vanguard 500 Index Fund ETF——标普500ETF先锋领航)。这只产品的“第一”,不仅预示着先锋领航指数基金业务的开端,同时也标志着全球指数基金产品0的突破。投

    2024-10-28 21:23:17
    0 0
  • 基金投资:稳健获利的策略选择

    在当今的金融市场中,基金投资已成为众多投资者的热门选择。然而,如何进行有效的基金投资却是一门需要深入研究的学问。基金投资的风险、流动性和收益性一直是投资者关注的焦点。过高的风险可能导致本金的大幅损失,而缺乏流动性则可能在急需资金时陷入困境,当然,追求高收益

    2024-10-28 21:23:13
    0 0
  • 权益理财三季度跑输主流指数和权益型基金,施罗德交银理财欲推新品布局红利策略丨机警理财日报

    南财理财通课题组 黄桂煊榜单排名来自理财通AI全自动化实时排名,如您对数据有疑问,请在文末联系助理进一步核实。权益类理财三季度涨8.98%,跑输主流指数和权益型基金2024年三季度,A股出现V型反转,上证指数在第二季度末跌破3000点之后持续下行,9月20日最低至2700点,9月底

    2024-10-28 21:23:09
    0 0

发表回复

8206

评论列表(0条)

    暂无评论