赞
踩
print 是 Python 的一个内置函数。
print("Hello world!")
# Hello world!
print(8848)
# 8848
需要注意的是:
pi = 3.14
print(pi)
# 3.14
print("圆周率", pi)
# 圆周率 3.14
我们看到,中间用空格分隔,变量也帮我们打印出了具体的值。试试看以下代码:
print(8848, '新的高度。')
print(1, 2, 3, 4)
print("圆周率", pi, sep=":")
# 圆周率:3.14
我们看到,两个值之间多了个: 分隔。试试以下代码:
print(1, 2, 3, 4, sep="-")
# 1-2-3-4
print(1, 2, 3, 4, sep="\n") # \n 代表换行
'''
1
2
3
4
'''
print() 执行完后,会在所有内容输出完后加一个换行 \n, end 参数可以让我们自己定义输出什么。以下代码,结尾用空格连接, 1 和 2 在同一行。如果没有 end 参数执行完 1 和 2 各占一行。
print(1, end=" " )
print(2, end=" " )
# 1 2
需要再次强调的是,在 Python 2 中 print 是一个关键字,在打印内容是直接用此关键字,如:
print 123;
print 'Hello';
但在 Python 3 中,print 变为一个内置函数,同时 print 函数支持多个传入参数
print 语句的写法也是我们分辨 python 版本的一个重要标志。
print() 作为内置函数,它的语法为:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
它将值打印到流或 sys.stdout(默认)。其中 objects 是一个序列对象,语法表示中可见它可以被解包,其他可选的关键字参数有:
注意:
以下我们实现一个将 print 内容输出到文件的功能:
# 重写
with open('file.txt', 'w') as f:
print('hello world', file=f)
# 追加
with open('file.txt', 'a') as f:
print('hello world', file=f)
# 或者
f = open('file.txt', 'a')
print('hello world', file=f)
f.close()
另外一个技巧是重写 sys.stdout 方法:
import sys # 原输出方法赋值 orig_stdout = sys.stdout # 定义输出文件操作 f = open('out.txt', 'w') # 重写默认输出方法 sys.stdout = f # 打印=文件输出 for i in range(3): print('i = ', i) # 默认输出归位 sys.stdout = orig_stdout # 关闭文件操作 f.close()
另一种重定向输出的方法是在执行 Python 脚本时直接从命令行重定向。我们可以使用 > 字符来输出重定向:
# demo.py 脚本文件内容
print('Hello, Python!')
# 在终端执行 Python 脚本
python3 demo.py > demo.txt
# 得到 demo.txt 的内容
# Hello, Python!
如同 C 语言,print() 使用标准输出。这不过是操作系统中的“文件”,程序的文本输出在操作系统中发送,因此可以显示给用户。
默认情况下,stdout 是缓冲的。也就是说,在收到特殊换行代码 \n 之前,它会存储接收到的数据而不显示数据。Python 的 print 函数会自动增加换行符给发送给它的任何字符串。但有时这种行为是不可取的,你想在同一行上显示多个东西。
在下例中,将使用 print 函数的 end 参数以换行符以外的字符(或空字符串)结束字符串,这样您就不会打印除所要求的内容之外的任何内容。以下代码在同一行上打印几个点,每 0.5s 打印一个点(注意:在终端中执行,不要在 Notebook):
# 参考:https://itqna.net/questions/37569/what-print-flush-python-closed
import time
for _ in range(5):
print('.', end='')
time.sleep(0.5)
print(' Gairuo!')
# 在终端中最后一次性显示
# ..... Gairuo!
但在大多数情况下,2.5 秒内什么也没发生,然后所有的点都同时出现。这是因为在默认情况下,stdout 在接收到新行之前不会显示任何内容,而我们直到最后才会发送新行。那么我们如何解决这个问题呢?很简单,只需使用 flush 强制立即显示结果,即使没有新行:
import time
for _ in range(5):
print('.', end='', flush=True)
time.sleep(0.5)
print(' Gairuo!')
# 依次显示以下内容
# ..... Gairuo!
值得一提的是,flush 作为 print 的增强参数,仅在Python 3.3 中提供。在此之前,它必须手动调用:
import sys
import time
for _ in range(5):
print('.', end='')
sys.stdout.flush() # 这儿
time.sleep(0.5)
print(' Gairuo!')
这个 flush 参数可以帮我们做出类似执行进度条之类的功能。
使用场景:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。