Python .format()函数使用方法详解
作者:胡星煜 发布时间:2022-10-12 04:18:12
format函数的调用
format函数可以被直接调用或在print函数中以占位符实现格式化调用。
在**2.6**版本前,占位符仍和其他语言一样使用%(比如C中)。但在其后的版本,format函数的占位符更改为{}(花括号)。
优化的目的目前总结出了4个:
1.花括号封闭可以实现更多格式化的实现,更强大的功能
2.使代码具有更强的可读性。
3.单个参数可以多次输出,参数顺序可以不相同
4.不需要理会数据类型的问题,在%方法中%s只能替代字符串类型
好了,进入正文,对于format函数的使用将分为两部分。
1.format函数及其占位符的调用格式
2.占位符格式和参数设定
ps:在介绍的时候各个内容会有小小的穿插,其实是为了更加便于理解~
format函数及其占位符的调用格式
format函数可以直接被调用,比如在shell中直接调用
例1
>>>'{} {}'.format('hello','world') #占位符不指定顺序
'hello world'
>>>'{0} {1}'.format('hello','world') #占位符制定顺序
'hello world'
>>>'{1} {0}'.format('hello','world') #换一下顺序试试
'world hello'
我们更常用的方式是放入print()函数中进行格式化输出
例2
print('{}获得了S8冠军'.format('IG')
#结果:
#IG获得了S8冠军
占位符以及参数设定
在第一部分中,简单地介绍了两种调用format函数的方式。可以很清晰地发现,在占位符中也可以输入一些参数,对格式化输出的参数进行设定,下面就详细的介绍占位符中各项参数的顺序和设置。
占位符中的各项参数格式如下所示
例3(伪代码)
'{position/key:fill,align,sign,width,precision,type}'.format(...)
position/key
position/key指定了占位符处从format函数的参数中调用哪个值,position很好理解,比如上面例1中介绍的后两种调用,就指定了format中两个参数hello和world在占位符中调用的顺序,注意这个顺序是按照数组排序中从‘0'开始计算的。 当然,你也可以使用键值对进行操作。比如下面的例4:
例4
print(
'the championship of the S8 is {S8}, and for S9, it\'s {S9}.'.format(S8='IG',S9='FPX'))
#结果:the championship of the S8 is IG, and for S9, it'FPX.
有写小伙伴可能要问了,键值对(字典)的使用在这里有什么好处吗?感觉还不如填个数字来的快捷啊?
再来看下面这一段代码:
例5:
dic={'S8':'IG','S9':'FPX'}
print(
'the championship of the S8 is {S8}, and for S9, it\'s {S9}.'.format(**dic))
#结果:the championship of the S8 is IG, and for S9, it'FPX.
在例5中,有些需要特别说明的地方,首先如果你要在format的括号里调用字典,记得在字典名前面加**,也就是字典的函数调用方法哦!从例5中应该能发现了,我们不需要在format中专门把字典列出来,而是可以调用以前定义过的字典,这就使得其具备了重复调用的优点。想象一下这一点会有什么不同,这是%方法做不到的哦。
你也可以用数组的形式填充,如例6所示:
例6:
names=['hilary','vergil','nero']
places=['chengdu','shijiazhuang','tokyo']
print(
'Hi, {names[0]}. I am {names[1]} and this is {names[2]}.'.format(names=names)
#Hi, hilary. I am vergil and this is nero.
第一个位置的参数,也是冒号前唯一的参数相信大家就搞明白啦。
下面的参数都是并列的,我们一个一个说明。首先要讲清楚这些参数如何并列或分隔。
那就是无需分隔,没错,下面的这些参数,你需要定义哪些就按照顺序写下就行,不用加什么逗号或者空格分开,你可能会想,这不容易产生歧义吗?我学习的时候也想过这个问题,事实是开发者编辑函数逻辑时就吧这些参数的设定值用不会产生任何歧义的符号或数字组合起来了,这一点当你使用时也会发现。
fill参数
fill参数用于指定填充符,默认值为空格,实际经验是,很少有场景会用到这个参数,除非是按照国际通用的三位一个逗号分隔数字等场景。
例7:
>>> print('{:,}'.format(12345678))
12,345,678
align参数
align参数用于格式化文本的对齐方式,当你填充了宽度的时候,这个参数的作用是很大的,当然,在一句话中无缝的插入一个格式化文本的话,这个参数的设置就不大有意义了。
> | < | ^ |
右对齐 | 左对齐 | 居中对齐 |
例8:
在shell中运行如下代码(代码中数字三十表示宽度,目的是为了拉大总体宽度显示出对齐的效果,后文会提到宽度的使用方法)
>>> print('{:<30}'.format('pos'))
pos
>>> print('{:>30}'.format('pos'))
pos
>>> print('{:^30}'.format('pos'))
pos
sign参数
sign参数用于指定是否保留正负号,这个针对format中数字起作用。
+ | - | SPACE |
保留正负号 | 仅保留负号 | 正数留空,负数保留负号 |
例9:
>>> print('{0:+} {0:-} {0: }'.format(123))
+123 123 123
>>> print('{0:+} {0:-} {0: }'.format(-123))
-123 -123 -123
ps:注意第一行代码运行结果中最后一个保留了一个空格哦
width参数
width参数控制输出的长度,经过我的测试,该长度为最小长度,即当设定的width参数小于format中调用的值时,不生效;而当设定值大时,会用空格(默认)或零进行填补,如果想要用0进行填补,那么需要在width前添加0,width参数的使用如例10所示。在例8中展示对齐参数时也使用了宽度参数,可以看出对齐是对我们的填补方式存在影响,其具体影响也在例10中给出。
例10:
print('{0:12} {0:05} {0:2}'.format(123)) #依次为12位宽空格填补、5位宽0填补、2位宽
#结果:
# 123 00123 123
print('{0:<012},{0:>012},{0:^012} '.format(123))
#结果:
#123000000000,000000000123,000012300000
print('{0:^012},{1:^012},{0:^011},{1:^011} '.format(123,1234))
#结果:
#000012300000,000012340000,00001230000,00012340000
可以看出空格的填补同样以对齐的区别显示出来,但是0的填补却往往改变了我们数字的表示,使用时要注意。另一个要注意的是当你的总宽度和数据的有效宽度的奇偶性不同时,居中对齐的方式会有不同,这就是例10中第三行代码希望表达的意思。可以看出,当奇偶次出现不同时,总是偏向左一位对齐。
precision参数
和%方法中一样,如%.3f表示保留小数点三位小数,用【.保留有效数字位数(f)】表示数据的精确度,如果添加f,则表明保留的为小数点后位数,如果不加,则表示保留的是有效数字位数。例11很好的展示了这种区别。
例11:
print('{0:.2f},{0:.7f},{0:.2},{0:.2%} '.format(123.123456789))
#结果:
#123.12,123.1234568,1.2e+02,12312.35%
其实小伙伴们应该注意到了,这里的f,%其实都算是precision参数后的type参数控制的内容——数据类型。因此,我们对精度简单介绍,而将precision-type参数的联合参数具体介绍,因为二者具有很强的关联。
precision-type参数
首先介绍所有的type参数,如下表所示:
type参数 | 含义 | 例 | |
---|---|---|---|
默认 | 十进制整数 | 123 | |
f | 浮点数 | 123.123 | |
% | 百分比格式 | 12312.3% | |
e | 指数形式 | 1.2e01 | |
- | d | 十进制整数 | 123 |
进制转换 | 十进制 | 123 | |
b | 二进制 | 1101111 | |
o | 八进制 | 157 | |
x | 十六进制 | 6f | |
#x | 小写表示的十六进制 | 0x6f | |
#X | 大写表示的十六进制 | 0X6F | |
c | 字符,打印前转换为Unicode代码 | ‘123' |
本文由学习总结而成,引用了一段代码,文章中有引用号,引用链接放在下面:
https://www.jb51.net/article/226500.htm
来源:https://blog.csdn.net/m0_46164535/article/details/120960933
猜你喜欢
- 一、filter()在Python内建函数中,有一个和map()函数用法类似、却可以用来过滤元素的迭代函数,这个函数就是filter()。它
- 今天在下脚本的时候遇到一个问题,比如有这样的一个字符串 t = "book123456",想把尾部的数字全部去掉,只留下
- user-define-session-inc.php文件代码:<?php function mysession_open($save
- 模块概述如果说模块是按照逻辑来组织 Python 代码的方法, 那么文件便是物理层上组织模块的方法。 因此, **一个文件被看作是一个独立模
- 使用python爬虫其实就是方便,它会有各种工具类供你来使用,很方便。Java不可以吗?也可以,使用httpclient工具、还有一个大神写
- 1. 背景在软件需求、开发、测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,要么需要手动制造一些数据。
- 前沿在CV领域,我们需要熟练掌握最基本的知识就是各种卷积神经网络CNN的模型架构,不管我们在图像分类或者分割,目标检测,NLP等,我们都会用
- 在NLP中,数据清洗与分词往往是很多工作开始的第一步,大多数工作中只有中文语料数据需要进行分词,现有的分词工具也已经有了很多了,这里就不再多
- 一、简介:1、cron包cron包:"github.com/robfig/cron/v3"文档:cron package
- 什么是可变/不可变对象不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份
- 前言初学者看到 Python 中的下划线 _ 时可能会有些懵圈,不知道这个到底是干什么用的,今天就来盘点一下 Python 中间的下划线有哪
- 设计中文网站的朋友都会有这样的体会,Dreamweaver功能虽然强大,但要按照中文的行文习惯实现每个
- Pandas函数的核心功能是,既计算了统计值,又保留了明细数据。为了更好地理解transform和agg的不同,下面从实际的应用场景出发进行
- 这篇文章主要介绍了python如果快速判断数字奇数偶数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- #最近在网上看代码时,出现了@???的代码,看了好久也不知道是什么意思,经过了解原来是装饰器,我给大家举个例子讲解一下,帮助大家快速理解:#
- 读取一个已经保存了的字典f = open('dict_th','r')a = f.read()dict_hi
- 一、记事本源码#python简易记事本from tkinter import *from tkinter import messagebox
- It is much easier to criticize somebody else’s work than to create som
- 对python3下的requests使用并不是很熟练,今天稍微用了下,请求几次下来后发现出现连接超时的异常,上网查了下,找到了一个还算中肯的
- python数据类型之间怎么转换?数据如果类型不对,在运行中有交集的话就会出现错误,那怎么让两个类型的数据变成同一个类型的呢首先是字符串,在