你真的百分百了解print函数吗?

print函数原型

print这个函数应该是用的最多的一个函数了,但是这个函数的所有用法你都了然于心吗?我们先来看看print函数的结构。

def print(self, *args, sep=' ', end='\n', file=None): # known special case of 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.
    """
    pass
  • *args:表示我们要打印的内容,是一个可变参数。
  • sep:分隔符,对打印的多个元素进行分隔,默认是空格
  • end:我们print打印的时候,会自动换行,就是因为这里的\n
  • file:输出位置,默认是输出到sys.stdout
  • flush:是否及时刷新到缓冲区。

演示

我们来修改一下里面的参数,来看看打印会有什么不同的结果。

sep

# 我们看到打印的三个数字是以空格分开的,就是因为sep=' '
print(1, 2, 3)  # 1 2 3

# 我们修改一下,可以看到此时就是我们指定的分割符了
print(1, 2, 3, sep='>>>')  # 1>>>2>>>3

end

print(1, 2, 3)
print(4, 5, 6)
"""
1 2 3
4 5 6
"""

# 我们看到上面的两个print打印的时候,是位于不同的行
# 就是因为python中的print在打印之后会自动在结尾加上一个换行符,也就是end='\n',使得光标停在下一行
# 像在C语言中,由于printf不会自动加上换行符,所以会需要手动加上\n
# 我们这里修改一下,也把sep加上去。而我们的end已经被改为了@@@
print(1, 2, 3, sep='>>>', end='@@@')
print(4, 5, 6)
print(7, 8, 9)
"""
1>>>2>>>3@@@4 5 6
7 8 9
"""
# 此时我们看到4 5 6本来应该出现在第二行的,但是第一个print的end不再是\n了,而是@@@
# 因此不会再换行了,而是直接在结尾加上一个@@@,光标还是停在当前行,所以第二个print打印就连在一起了
# 但是第二个print我们没有指定end,那么默认还是\n,所以第三个print打印还是会在新的行
# 也说明了print之间不会互相影响

file

这里的file表示输出到什么位置,默认是sys.stdout,也就是控制台。

import sys

print("hello1")
print("hello2", file=sys.stderr)
print("hello3")
"""
hello1
hello3
hello2
"""

不过我们看到字符串"hello2"明明是在第二行打印的,但是显示在控制台的时候却出现在了最后。这是因为缓冲区,我们看到里面出现了两个输出位置,一个是默认的sys.stdout,一个是我们单独指定的sys.stderr,不同的输出位置具有不同的缓冲区,所以无法保证哪个先显示。如果多执行即便的话,结果可能还不一样。

import sys

print("hello1")
print("hello2", file=sys.stderr)
print("hello3")
# 此时顺序又变了
"""
hello2
hello1
hello3
"""

同样的,我们还可以将file指定成文件句柄,那么显然就会把print的内容写到文件里面。注意:因为既然print是写,那么这个文件句柄就必须是可写的。

f = open("1.txt", "a", encoding="utf-8")
print("hello1", file=f)
print("hello2", file=f)
print("hello3", file=f)

此时终端不会有任何输出,但是我们可以看看文件,会发现内容已经写进去了。因此print还可以简单地实现类似于日志的功能。

flush

flush表示刷新缓冲区,缓冲区不用我介绍了,如果每来一点数据就刷新一次的话,效率会很低。于是会把数据暂时写到缓冲区里面,等缓冲区满了一下子全部刷到终端中。flush默认是False,如果指定为True的话,那么表示不管缓冲区满没满,都强行刷新缓冲区,将里面的内容显示到屏幕上。

print(123)
print(456, flush=True)
print(789)
"""
123
456
789
"""
# 这个不好展示,感受一下即可

猜你喜欢

转载自www.cnblogs.com/traditional/p/12236279.html
今日推荐