Python:print()函数

  Python版本:3.8.8

引入

>>> 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个参数:valuesependfileflush,其中
    • 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)
      
      '''
      运行结果如下:
      1
      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)
  • 通过熟练运用这些“不为人知”的参数,我们可以应对更加复杂的输出

注:

  1. 调用print()时必须先赋没有默认值的value参数,然后才能是其他有默认值的参数,对于有默认值的参数,其先后顺序没有要求,这和正常Python函数的调用一致
    # right
    print("Hello World",end="!",flush=False)
    print("Hello World",flush=False,end="!")
    
    # wrong
    print(end="!","Hello World",flush=False)
    
  2. 虽然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))

可以看到,原本很多个value组成的复杂表达式变成了一个字符串,所有的变量被放在了最后,这些变量原本所在的位置被 %+字母 代替了,这就是格式控制符,而变量所在的元组叫做转换说明符,两者之间用 % 连接。变量与格式控制符之间的对应关系如下表

格式控制符说明格式控制符说明
%d / %i十进制整数(dec)%r字符串以repr()显示
%b二进制整数(bin)%c单个字符(char)及其ASCII码
%o八进制整数(oct)%f / %F浮点数
%x / %X十六进制整数(hex),区分大小写%e / %E科学计数法 ,区分大小写
%s字符串以str()显示%g / %G自动匹配 十进制整数/浮点数/科学计数法

  仅供学习参考,如有不足之处,敬请批评指正

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绵雨晨曦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值