python return返回值格式化_python格式化输出:%s和format()用法比较

python格式化输出:%s和format()用法比较

黄伟呢 凹凸数据

1、python格式化输出历史起源

python2.5之前,我们使用的是老式格式化输出:%s。从python3.0开始起(python2.6同期发布),同时支持两个版本的格式化,多出来的一个新版本就是利用format()函数,进行格式化输出。

2、为什么要学习python3支持的新式格式化输出呢?

虽然老式的语法,兼容性很好,但是它的功能很少,很难完成复杂的任务,而format()函数进行格式化输出,功能更加强大,从下面的学习中你会慢慢体会到。

01

基本用法

a = "%s张飞%s关羽%s刘备%s赵云" % (1,2,3,4)

display(a)

b = "{}张飞{}关羽{}刘备{}赵云".format(1,2,3,4)

display(b)

结果如下:

d675b2d0149b3b935542d830816fef71.png

1)format()支持位置格式化填充,%s不支持;

第一种方式:

大括号{ }中写的是format()传入值所对应的下标。

第二种方式:

大括号{ }中的变量,和format()传入值是一一对应的。

# --------------------方式一-----------------------

c = "{3}张飞{1}关羽{2}刘备{0}赵云".format(1,2,3,4)

display(c)

# --------------------方式二-----------------------

def my_hobbies(fruit,ball,drink):

hobbies = "我喜欢水果{fruit},我也喜欢球类{ball},我还喜欢饮料{drink}".format(ball=ball,fruit=fruit,drink=drink)

return hobbies

fruit = "apple"

ball = "basketball"

drink = "milk"

my_hobbies(fruit,ball,drink)

# --------------------方式二-----------------------

fruit = "apple"

ball = "basketball"

drink = "milk"

hobbies = "我喜欢水果{fruit},我也喜欢球类{ball},我还喜欢饮料{drink}".format(ball=ball,fruit=fruit,drink=drink)

display(hobbies)

结果如下:

e640b787b55e2a2f35b934d1a6d4a9ef.png

02

填充和对齐

1)填充(只能用一个字符进行填充)

① 什么是填充?

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

② %s:实现填充功能;

a = "%s" % ("张飞")

display(a)

b = "%10s" % ("张飞")

display(b)

结果如下:

f08cfc32e18a260848be20a310abb5ce.png

③ format():实现填充功能;

c = "{}".format("张飞")

display(c)

d = "{:10}".format("张飞")

display(d)

结果如下:

bc6ef1e830278da2267f6a59e87add05.png

总结如下:通过上述案例结果呈现,当使用的是%s,进行字符串填充的时候,默认是在原字符串左侧进行填充;当使用的是format(),进行字符串填充的时候,默认是在原字符串右侧进行填充。这就是我们下面要讲述的"对齐"。

2)对齐

① 什么是对齐?

概念:"对齐"要与"填充"一起使用,才会显得有意义。当我们进行填充的时候,我们可以选择只在字符串左侧填充,也可以选择只在字符串右侧填充,还可以选择在字符串两侧填充(字符串居中显示的填充方式)。

② %s:实现对齐功能,只有左对齐和右对齐;

# 左填充

a = '%10s' % ('张飞')

display(a)

# 右填充

b = '%-10s' % ('张飞')

display(b)

结果如下:

82ac5b3885f63f1d3eee96a7b940b33a.png

③ format():实现对齐功能,不仅有左对齐和右对齐,还有居中对齐;

# 左填充

a = ':>10'.format('张飞')

display(a)

# 右填充

b = ':<10'.format('张飞')

display(b)

# 居中填充

c = ':^10'.format('张飞')

display(c)

结果如下:

a1e91feb2fe2b180bf0110b7fdc7e7c1.png

④ 使用"特定符号"进行填充;

旧版语法中(%s),使用"特定符号"填充,很麻烦,不直接,你也不用去管。

这里主要看新版语法中(format()函数),进行"特定符号"填充。

0900b3859e76e1229ee2fa1f4305de65.png

03

截断

概念:如果我们指定的"截断长度",比实际给出的"字符串"的长度要短,会发生截断。

1)长度和截断长度的区别

① 什么是长度?

“{:8}”.format(“xishi is beautiful”)中,这个8表示的是填充长度,又成为长度,当字符串长度小于这个长度8的时候,会发生填充;当字符串长度大于这个长度8的时候,长度无效,返回的仍然是原来的字符串。

操作如下:

a = "{:8}".format("xishi")

display(a)

b = "{:8}".format("xishi is beautiful")

display(b)

结果如下:

e559532c8912db8a9a5f49ea6d182a4b.png

② 什么是截断长度?

“{:10.8}”.format(“xishi is beautiful”)中,这个".8"叫做截断长度,这个10叫做填充长度。

注意:只有字符串的长度大于这个阶段长度的时候,才会发生截断。当既有截断长度,又有填充长度的时候一般先进行截断,截断后再进行填充。

操作如下:

a = "{:.8}".format("xishi is beautiful")

display(a)

# 当字符串长度,小于截断长度,返回原始字符串,截断长度无效;

b = "{:.8}".format("abc")

display(b)

结果如下:

70017013c9c81df5da026e9fc7c2908d.png

③ 填充长度和截断长度的联合使用

a = "{:*>15.8}".format("xishi is beautiful")

display(a)

结果如下:

8198152ea26b2ccf4ed27230daf7dad3.png

注意:当既有截断长度,又有填充长度的时候一般先进行截断,截断后,再进行填充。

④ 使用%s完成截断

a = "%.8s" % ("xishi is beautiful")

display(a)

b = "%15.8s" % ("xishi is beautiful")

display(b)

结果如下:

6ad6145ada098441fb03792cbf6d582a.png

04

格式化输出中,与数字相关的语法

1)引入案例

a = '{}-{}'.format("1","2")

display(a)

b = '{}-{}'.format(1,2)

display(b)

结果如下:

58154481250eb75ea0d08a73f93a0c31.png

存在的问题:

format()中明明需要传入字符串,可是这里传入数值,却没有报错,这是为什么呢?

原因是:python自动帮我们做了一次隐式转换,但是这种隐式转换是需要代价的,它会消耗额外的性能,牺牲速度。

因此,我们需要用特定的语法去解决这个问题。

2)填充整数,使用d

① 使用%s完成整数的填充;

a = '%5d' % (3000)

display(a)

b = '%d' % ("3000")

display(b)

结果如下:

01b4eb0e82ca60fa562864cfe62a588d.png

② 使用format()完成整数的填充;

a = '{:$>5d}'.format(3000)

display(a)

b = '{:¥>5d}'.format(3000)

display(b)

结果如下:

6cf30e5ae25792956ef25992a77985de.png

3)填充浮点数,使用f(这个才是最常用的,用于保留小数点的位数);

① 引入案例

a = '{:f}'.format(3.14159268)

display(a)

b = '{:f}'.format(3.1415921)

display(b)

c = '{:f}'.format(312)

display(c)

d = '{:d}'.format(12,34)

display(d)

结果如下:

1777942225d3f9239f7c2392227f2b35.png

存在的问题:

1)当使用的f的时候,不管你传入的数字有几个小数位,最终都将返回一个六位数的小数,这个问题源自c语言,你也不用管,自己知道就行。

2)当使用f的时候,可以传入整数;当使用d的时候,就只能传入整数,而不能传入小数。

② 使用%s完成浮点数填充,保留2位有效数字;

a = '%.2f' % (3.1415)

display(a)

结果如下:

4cd35c77ec1180b13bce5c9ee862d869.png

③ 使用format()完成浮点数的填充,保留2位有效数字;

b = '{:.2f}'.format(3.1415)

display(b)

c = '{:$>5.2f}'.format(3.1415)

display(c)

结果如下:

7ebd508b28f430d4ace7b0b8a955ee22.png

注意:在使用浮点数填充的时候,用的最多的就是保留几位有效数字,由于返回值默认是保留6位小数,因此需要配合使用"截断"。

作者:黄伟呢,个人博客地址:https://blog.csdn.net/weixin_41261833

公众号「凹凸玩数据」,有趣的不像个技术号~

End

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值