당신은 정말 백퍼센트의 인쇄 기능을 이해하고 있는가?

인쇄 기능 프로토 타입

이 기능을 사용하는 대부분의 기능을해야 인쇄하지만, 모든 기능의 사용은 당신의 마음에 분명? 의는 인쇄 기능의 구조를 살펴 보도록하자.

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:是否及时刷新到缓冲区。

표시

이제, 내부의 매개 변수를 수정 어떤 다른 인쇄 결과를 살펴 보자.

9월

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

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

종료

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之间不会互相影响

파일

여기에 콘솔 인 기본은 sys.stdout되고, 출력 파일의 위치를 ​​나타냅니다거야.

import sys

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

그러나 우리는 문자열 "hello2는"분명히 두 번째 행에 인쇄되어 있지만 디스플레이가 콘솔의 시간에 마지막으로 나타났다 참조하십시오. 우리는 두 개의 출력 위치의 출현을 보았다 버퍼 영역이, 하나는 기본 sys.stdout이기 때문에, 우리는 하나의 지정된 sys.stderr를, 다른 출력 버퍼와 다른 위치에있는,이다 첫번째 I 수 없습니다 보장하는 그래서 표시합니다. 심지어 여러 실행하면, 결과는 동일하지 않을 수 있습니다.

import sys

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

마찬가지로, 우리는 또한 다음 분명히 그것은 내부에 기록 된 파일의 내용을 출력합니다, 파일 핸들로 파일을 지정할 수 있습니다. 참고 : 우리가 기록 된 인쇄 때문에, 파일 핸들에 쓰기 권한이 있어야합니다.

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

이 때, 단자는 출력이되지 않습니다, 그러나 우리는 파일에, 당신이 그것을에 기록 된 내용을 찾을 수 찾을 수 있습니다. 인쇄도 간단하게 할 수 있도록 로그 유사한 기능을 달성했다.

플러시

플러시가 새로 고침 버퍼를 표현, 버퍼는 모든 지점의 데이터를 한 번 갱신하는 경우, 그것은 비효율적이다, 저를 소개하지. 따라서, 데이터가 일시적 것이다 한꺼번에 다른 버퍼는 상기 단말기로 전체 인 브러시 버퍼에 기록된다. 참으로 지정된 경우 플러시 기본은 거짓이며, 다음 버퍼하지가 가득 여부를 나타냅니다 가득의 내용이 화면에 표시됩니다, 버퍼를 플래시 강제로.

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

추천

출처www.cnblogs.com/traditional/p/12236279.html