あなたは本当に百パーセントの印刷機能を理解していますか?

印刷機能のプロトタイプ

この関数は、最も使用の関数であるべき印刷しますが、すべての機能を使用すると、あなたの心にはっきりしていますか?のは、印刷機能の構造を見てみましょう。

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」を参照してください明らかに第二列に印刷されますが、表示は、コンソールの時点で最終的に登場しています。私が保証され最初にすることはできませんので、我々は二つの出力位置の出現を見たバッファゾーンは、1がデフォルトsys.stdoutのある、我々は、単一の指定sys.stderrを持ち、異なる出力バッファと異なる場所であるためですディスプレイ。でも、複数の実行場合、結果は同じではないかもしれません。

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)

あなたがそれに書かれているものを見つけるでしょう、このとき、端末は、任意の出力を持っていないだろうが、我々は、ファイルを見ることができます。だから、印刷もログに同様の機能を実現するためにシンプルにすることができます。

流す

フラッシュはリフレッシュバッファを表明し、バッファは、すべてのポイントデータで一度リフレッシュされる場合、それは非効率的である、私を導入していません。こうしてデータを一時的に他の全てのバッファが端子に完全ブラシなるとし、バッファに書き込まれます。その後、バッファがいっぱいになることがいっぱいであるかどうかを示すものではありませフラッシュデフォルトは、trueと指定した場合、画面上に表示されます内容は、バッファをフラッシュする偽余儀なくされています。

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

おすすめ

転載: www.cnblogs.com/traditional/p/12236279.html