sunrise085 发表于 2020-3-16 23:20:16

Python细节之5、print输出函数的一些方法总结

本帖最后由 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()有多个参数,参数个数不固定。有四个关键字参数(sepend   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)10111113b0xb0XB进制
^, <, > 分别是居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
+ 表示在正数前显示 +,负数前显示 -;(空格)表示在正数前加空格
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

板砖丶 发表于 2020-3-17 09:43:24

还未入门,过来看看,现在对print的理解还不够深入,说的东西不一定看得懂,慢慢来品。【mark】
现在对print有稍微有一点点了解

枫枫duck 发表于 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))这个*号好像表格中也没有涉及到,理解不了它的输出

sunrise085 发表于 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'这种形式的确没写到表格中,两个*分别表示宽度和小数位数,具体值在后边参数列表中指出。

枫枫duck 发表于 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位 ...

谢谢楼主,膜拜膜拜

瓶子呀呀 发表于 2020-5-20 15:28:14

#关键字end的使用效果,默认值是回车换行,即'\n'   这句是什么意思,怎么最后运行都是同一行了呢,没有换行
print(a,end='***')
print(b,end='+++')
print(c,end='aaa')
最后运行结果是同一行的意思么?

瓶子呀呀 发表于 2020-5-20 15:29:15

楼主的代码写得真美观,想问下用的什么编辑器么?

sunrise085 发表于 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楼所说的是帖子中的代码美观吗?
发帖时,添加代码的方式在新手乐园板块上方有提到哟~~~
发帖时,编辑框上方有多种空间,有一个类似于 <> 的符号,是发代码用的。

ThreeCat 发表于 2020-7-22 10:38:40

mark

helenfalcon 发表于 2020-9-7 10:43:32

感谢,尤其是‘四个关键字参数(sepend   file   flush),这四个关键字参数都有默认值’这块的解释非常详细。

犬来猫荒 发表于 2021-7-30 23:29:44

学到print的新知识了,棒!
温故而知新{:10_279:}
页: [1]
查看完整版本: Python细节之5、print输出函数的一些方法总结