鱼C论坛

 找回密码
 立即注册
查看: 3651|回复: 10

[技术交流] Python细节之5、print输出函数的一些方法总结

[复制链接]
发表于 2020-3-16 23:20:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 sunrise085 于 2020-9-9 21:53 编辑

学习使人进步,总结使人快速进步!
print() 是我们学习python编程经常用到的输出函数。关于print函数的使用方法,有的人可能认真研究过,有的人可能一知半解。今天我来做一下简单总结。
我们先看一下官方给出的print介绍:
print(...)
    print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
   
    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.

print()有多个参数,参数个数不固定。有四个关键字参数(sep  end   file   flush),这四个关键字参数都有默认值。print作用是将objects的内容输出到file中,objects中的各个参数以sep为间隔,以end为结尾。sep默认值是一个空格;end默认值为’\n’即“回车换行”;file的默认值是sys.stdout,即标准输出终端;flush的作用是是否即时输出,默认值为False,即执行完后输出。
下面看一下例子,助于理解。
a=3;b=98;c=0.23

#关键字参数sep的使用效果,默认值是空格,即' '
print(a,b,c)
print(a,b,c,sep='####')  

#关键字end的使用效果,默认值是回车换行,即'\n'
print(a)
print(b)
print(c)
print(a,end='***')
print(b,end='+++')
print(c,end='aaa')
运行结果:
3 98 0.23
3####98####0.23
3
98
0.23
3***98+++0.23aaa
print还可以写入文件,这时候就需要file参数了
f=open("ttt.txt",'w+')
print("abc",file=f,flush=True)
f.close()
这样就把字符串 'abc'写到文件 ttt.txt 中了
flush 参数也是在这里起作用的。
如果是 False,则 close 文件时才真正写入,如果是 True,则立即写入。


使用print()进行输出时,我们经常会用到格式化输出。使用格式化输出有两种方式:一种是使用格式化符号%,一种是使用字符串格式化函数str.format()。这两种方式都需要掌握格式化符号和转义字符。
关于格式化符号和转义字符小甲鱼有详细介绍:字符串格式化符号含义及转义字符含义
关于format函数的使用方法做一下介绍。主要就是用{}和:代替格式化符号%。format可以有多个参数,参数位置也可以不按顺序。例如:"{} {}".format('hello','python')就是'hello python'; '{1}{0}{1}'.format("不","好")就是"好不好"。
此外,format还可以对数字进行格式化。
  
数字
  
格式
输出
描述
3.1415926
{:.2f}
3.14
保留小数点后两位
3.1415926
{:+.2f}
+3.14
带符号保留小数点后两位
-1
{:+.2f}
-1.00
带符号保留小数点后两位
2.71828
{:.0f}
3
不带小数
5
{:0>2d}
05
数字补零 (填充左边, 宽度为2)
5
{:x<4d}
5xxx
数字补x (填充右边, 宽度为4)
10
{:x<4d}
10xx
数字补x (填充右边, 宽度为4)
1000000
{:,}
1,000,000
以逗号分隔的数字格式
0.25
{:.2%}
25.00%
百分比格式
1000000000
{:.2e}
1.00e+09
指数记法
13
{:>10d}
        13
右对齐 (默认, 宽度为10)
13
{:<10d}
13
左对齐 (宽度为10)
13
{:^10d}
    13
中间对齐 (宽度为10)
11
'{:b}'.format(11)
  
'{:d}'.format(11)
  
'{:o}'.format(11)
  
'{:x}'.format(11)
  
'{:#x}'.format(11)
  
'{:#X}'.format(11)
1011
  
11
  
13
  
b
  
0xb
  
0XB
进制
^, <, > 分别是居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
+ 表示在正数前显示 +,负数前显示 -;  (空格)表示在正数前加空格
b、d、o、x 分别是二进制、十进制、八进制、十六进制。
若是需要输出大括号{},则需要用大括号{}进行转义,例如:'{{0}} is {0}'.format('第一个参数')就是'{0} is 第一个参数'。
直接看一下例程:
a=9
b=95
c=0.234
d='Tony'
e="I'm a student"

print('%06d'%a)
print('%#x'%b)
print('%8.4f'%c)
print('%*.*f'%(8,4,c))
print('{0:a^10d}--{1:>8}-->{1:5.2%}'.format(a,c))

print(d,'said:',e,end='.\n')
print('%s said: %s.'%(d,e),'I\'m %d years old.'%a)
print('{1} said: {0}.'.format(e,d),'I\'m {} years old.'.format(a))
print('{name} said: {words}.'.format(words=e,name=d),'I\'m {} years old.'.format(a))
print('{{name: {}}}'.format(d))
输出结果:
000009
0x5f
  0.2340
  0.2340
aaaa9aaaaa--   0.234-->23.40%
Tony said: I'm a student.
Tony said: I'm a student. I'm 9 years old.
Tony said: I'm a student. I'm 9 years old.
Tony said: I'm a student. I'm 9 years old.
{name: Tony}

巧妙的使用格式化输出和关键字参数有时候能够使输出非常整齐美观。例如输出乘法口诀列表的时候,使用关键字参数end和宽度控制输出能够使得打印出来的结果特别美观。
for i in range(1,10):
    for j in range(1,i+1):
        print('%d×%d=%-2d'%(j,i,i*j),end='\t')
    print()
结果:
1×1=1         
1×2=2         2×2=4         
1×3=3         2×3=6         3×3=9         
1×4=4         2×4=8         3×4=12        4×4=16        
1×5=5         2×5=10        3×5=15        4×5=20        5×5=25        
1×6=6         2×6=12        3×6=18        4×6=24        5×6=30        6×6=36        
1×7=7         2×7=14        3×7=21        4×7=28        5×7=35        6×7=42        7×7=49        
1×8=8         2×8=16        3×8=24        4×8=32        5×8=40        6×8=48        7×8=56        8×8=64        
1×9=9         2×9=18        3×9=27        4×9=36        5×9=45        6×9=54        7×9=63        8×9=72        9×9=81

评分

参与人数 3荣誉 +10 鱼币 +15 贡献 +8 收起 理由
巴巴鲁 + 5 + 5 + 3 感谢楼主,这几天刚入门python,对print函数.
帅雷必成c王 + 5 + 2
枫枫duck + 5 + 5 + 3 无条件支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-17 09:43:24 | 显示全部楼层
还未入门,过来看看,现在对print的理解还不够深入,说的东西不一定看得懂,慢慢来品。【mark】
现在对print有稍微有一点点了解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 11:49:51 | 显示全部楼层
想请教楼主
print('{0:a^10d}--{1:>8}-->{1:5.2%}'.format(a,c))
1:5.2%这个打出来为什么不是5位小数?

print('%*.*f'%(8,4,c))这个*号好像表格中也没有涉及到,理解不了它的输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-8 12:08:16 | 显示全部楼层
枫枫duck 发表于 2020-4-8 11:49
想请教楼主
print('{0:a^10d}--{1:>8}-->{1:5.2%}'.format(a,c))
1:5.2%这个打出来为什么不是5位小数?

1、print('{0:a^10d}--{1:>8}-->{1:5.2%}'.format(a,c))中的1:5.2%表示一百分数显示输出,输出宽度是5位(包含小数点),若宽度不足前面补充空格,小数位数是2位。而不是你所理解的5位小数
2、%*.*f'这种形式的确没写到表格中,两个*分别表示宽度和小数位数,具体值在后边参数列表中指出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-8 12:12:14 | 显示全部楼层
sunrise085 发表于 2020-4-8 12:08
1、print('{0:a^10d}--{1:>8}-->{1:5.2%}'.format(a,c))中的1:5.2%表示一百分数显示输出,输出宽度是5位 ...

谢谢楼主,膜拜膜拜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 15:28:14 | 显示全部楼层
#关键字end的使用效果,默认值是回车换行,即'\n'   这句是什么意思,怎么最后运行都是同一行了呢,没有换行
print(a,end='***')
print(b,end='+++')
print(c,end='aaa')
最后运行结果是同一行的意思么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 15:29:15 | 显示全部楼层
楼主的代码写得真美观,想问下用的什么编辑器么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-20 15:51:51 | 显示全部楼层
瓶子呀呀 发表于 2020-5-20 15:28
#关键字end的使用效果,默认值是回车换行,即'\n'   这句是什么意思,怎么最后运行都是同一行了呢,没有换 ...

上面那个例子,end关键字例程,
前三行没有给出end关键字参数,所以end关键字参数是默认值,end='\n',也就是每次执行print都是以回车换行结尾,所以第8、9、10三行打印完对应的参数后,就换行了
后三行设置的end参数,在执行print的时候,就以所设置的关键词参数end的值作为print结束字符,打印完a之后就有 *** ,打印完b之后就有 +++ ,打印完c之后就有 aaa

你在7楼所说的是帖子中的代码美观吗?
发帖时,添加代码的方式在新手乐园板块上方有提到哟~~~
发帖时,编辑框上方有多种空间,有一个类似于 <> 的符号,是发代码用的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-7-22 10:38:40 | 显示全部楼层
mark
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-7 10:43:32 | 显示全部楼层
感谢,尤其是‘四个关键字参数(sep  end   file   flush),这四个关键字参数都有默认值’这块的解释非常详细。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-30 23:29:44 | 显示全部楼层
学到print的新知识了,棒!
温故而知新
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 20:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表