先提前说,我这篇文章很水,是我用了很久Python,却发现连最常用的print方法都不熟悉,这个方法竟然还有四个参数!这是我学艺不精了,幸好发现得早。所以我得把这个四个参数都练练,水一篇笔记出来。
输出变量
python的print函数是输出对象的__str__方法返回的字符串的,为此我写一个类,重载它的__expr__和__str__方法,做个试验:
class NumberPair:
def __init__(self, a, b):
self.a = a
self.b = b
def expr(self):
return f'{self.a},{self.b}'
def __str__(self):
return f'{self.a}-{self.b}'
if __name__ == '__main__':
x = NumberPair(1, 2)
print(x)
输出结果为:
1-2
从试验结果看,执行的是__str__方法。
sep参数
修改分隔符,默认是空格,可以改成别的。
# _*_ coding:utf-8 _*_
if __name__ == '__main__':
print("list", "all", "files", sep="-")
结果:
list-all-files
end参数
修改结尾用的,默认是换行,我写了个例子改成空格,就很像java的print了,哈哈:
# _*_ coding:utf-8 _*_
if __name__ == '__main__':
print("Your", end=" ")
print("great", end=" ")
print("puffs", end=" ")
print("of", end=" ")
print("flowers", end=" \n")
结果:
Your great puffs of flowers
file参数
当我知道这个参数时我是震惊的。我根本没想到print函数还能这样用:
# _*_ coding:utf-8 _*_
if __name__ == '__main__':
file = open('x.txt', "w")
print("You are everywhere.", file=file)
print("You were everywhere.", file=file)
file.close()
文件会自动生成,里面成功写入了内容:
You are everywhere.
You were everywhere.
flush参数
flash参数在菜鸟教程里是用来做loading效果的。但是我试了,flush为false,也是会出现loading效果的。但是使用文件再单步debug,或者狂加断点就可以知道这个参数的作用!如以下代码:
# _*_ coding:utf-8 _*_
import time
if __name__ == '__main__':
if __name__ == '__main__':
file = open('x.txt', "w")
print("You are everywhere.", file=file, flush=False)
print(file=file, flush=True, end='')
print("You were everywhere.", file=file)
file.close()
使用PyCharm打开双窗口,如图:
注意,及时刷新文件,按下图,再鼠标右键菜单中操作:
就会发现flush参数为false时,文件里是没内容的。执行下一行后,右键加载磁盘后,文件内存才更新了:
经过了这个小小的debug实验,就深刻理解了flush这个参数的作用了。