Python:print()函数
Python版本:3.8.8
目录
引入
一、print()函数详解
二、print()的格式化输出
2.1 格式控制符
引入
>>> print(“Hello World”)
Hello World
这是我初学者写的*个Python程序,这个程序的主体由一个函数组成,这个函数的函数名是print(打印),顾名思义,这个函数的作用将程序运行的结果以字符串输出,让用户/其他程序可见可读。本文将就print()函数进行系统解说
一、print()函数详解
首先,我们来看看Python自己是怎么解释print()函数的,在IDLE中输入
>>> help(print)
Python会给出如下反馈
Help on built-in function print in module builtins:
print(…)
print(value, …, 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()函数的一些基本信息:
built-in function print in module builtins表示print()是Python的69个内置函数之一,也就是说,使用print()函数不需要导入任何模块
print(value, …, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)展示了print()函数运行所需要的全部5个参数:value、sep、end、file、flush,其中
value参数是你要输出的值,可以是数字,字符串,列表,元组或者字典,多个value之间用逗号分隔
>>> outnum=1
>>> print(outnum)
1
>>> outstr=”Hello World”
>>> print(outstr)
Hello World
>>> outlis=[1,2,3,4,5]
>>> print(outlis)
[1, 2, 3, 4, 5]
>>> outtup=(5,10)
>>> print(outtup)
(5, 10)
>>> outdic={“Chinese”:90,”Math”:80}
>>> print(outdic)
{‘Chinese’: 90, ‘Math’: 80}
>>> print(outnum,outstr,outlis,outtup,outdic)
1 Hello World [1, 2, 3, 4, 5] (5, 10) {‘Chinese’: 90, ‘Math’: 80}
sep是separation(间隔)的缩写,这个参数控制在两个value之间输出的内容
比较下面代码的输出:
>>> print(1,2)
1 2
>>> print(1,2,sep=”+”)
1+2
可以看到*次输出的1和2之间有一个空格,第二次输出的1和2之间不再有空格,取而代之的是一个加号。这是由于参数sep在你调用print()函数时default a space(默认为空格),也就是说,当你没有为sep参数指定值时,Python默认给sep赋值为一个空格,即
>>> print(1,2)
是以
>>> print(1,2,sep=’ ‘)
被Python执行的
end(结尾)参数控制print()函数结尾输出的内容
同样比较下面代码的输出
print(1)
print(2)
”’
运行结果如下:
”’
print(1,end=”+”)
print(2)
”’
运行结果如下:
1+2
”’
和*次的输出相比,第二次输出的1和2并不在两行,而在一行中以加号分隔。与sep相似,参数end在你调用print()函数时default a newline(默认为换行),也就是说,当你没有为end参数指定值时,Python默认给end赋值为一个换行符,即
>>> print(“Hello World”)
是以
>>> print(“Hello World”,end=’\n’)
被Python执行的
file(文件)参数控制print()函数的输出目标,这个参数在你调用print()函数时defaults to the current sys.stdout(默认系统标准输出流,也就是输出到我们常说的控制台(console)),在你需要的时候,通过给file赋值,可以将程序运行的结果输出到指定的文件中
flush(刷新)参数控制print()函数输出过程中的缓冲区的刷新状态,默认为False,即不强制刷新缓冲区。简单来说,在你调用print()函数时,输出的字符串首先写入内存缓冲区,再从缓冲区写入文件,同时刷新缓冲区
运行如下代码:
import time
for i in range(10):
for j in range(200):
print(“.”,end=””)
print()
time.sleep(1)
会发现每隔一秒,200个.会一次性出现在屏幕上
如果将flush设置为True,强制刷新缓冲区:
import time
for i in range(10):
for j in range(200):
print(“.”,end=””,flush=True)
print()
time.sleep(1)
再次运行,每隔1秒,200个.会陆续出现在屏幕上,这说明输出的字符不再于缓冲区内等待,而是直接输出到控制台
同理,flush可以将数据即时写入文件,而不是等到close()后一并写入文件
综上所述,我们眼里的print()函数时这样的:
print(“Hello”,”World”)
而Python眼里的print()函数是这样的:
print(“Hello”,”World”,sep=’ ‘,end=’\n’,file=sys.stdout,flush=False)
通过熟练运用这些“不为人知”的参数,我们可以应对更加复杂的输出
注:
调用print()时必须先赋没有默认值的value参数,然后才能是其他有默认值的参数,对于有默认值的参数,其先后顺序没有要求,这和正常Python函数的调用一致
# right
print(“Hello World”,end=”!”,flush=False)
print(“Hello World”,flush=False,end=”!”)
# wrong
虽然file的默认参数是sys.stdout而print()本身并不需要导入模块,但是如果我们真的在程序中使用了sys.stdout,需要导入sys模块
# wrong
print(“Hello World”,file=sys.stdout)
# right
import sys
print(“Hello World”,file=sys.stdout)
二、print()的格式化输出
有的时候,单纯地把value用print()输出并不能满足我们的需要,比如以下几个例子:
# 输出变量数量多,种类复杂
print(“My name is”,name+”.”,”I’m”,age,”years old.”,”My major is”,major+”.”)
# 浮点数保留小数位数
print(round(valf,6))
# 以二进制输出整数
while(vali):
ans+=str(vali%2)
vali//=2
print(ans[::-1])
为了解决这类问题,print()为我们提供了格式化输出的功能,下面是实现格式化输出的几种方法
2.1 格式控制符
Python继承了很多C语言的特性,格式控制符便是其中之一,Python可以通过格式控制符和转换说明符来进行格式化输出,如上例用格式控制符写为
print(“My name is %s. I’m %d years old. My major is %s.”%(name,age,major))
1
可以看到,原本很多个value组成的复杂表达式变成了一个字符串,所有的变量被放在了*后,这些变量原本所在的位置被 %+字母 代替了,这就是格式控制符,而变量所在的元组叫做转换说明符,两者之间用 % 连接。变量与格式控制符之间的对应关系如下表
格式控制符 说明 格式控制符 说明
%d / %i 十进制整数(dec) %r 字符串以repr()显示
%b 二进制整数(bin) %c 单个字符(char)及其ASCII码
%o 八进制整数(oct) %f / %F 浮点数
%x / %X 十六进制整数(hex),区分大小写 %e / %E 科学计数法 ,区分大小写
%s 字符串以str()显示 %g / %G 自动匹配 十进制整数/浮点数/科学计数法