我正在查看print
的Python文档,其中指出:
print(* objects,sep ='',end ='\ n',file = sys.stdout,flush = False)
可以看出,如果未指定要在其上进行打印的file
,则使用默认的sys.stdout
,这让我开始思考。
肯定会在后台调用print
并不会导入 sys
,怎么办?
sys.stdout
到处都是可访问吗?
示例:
我正在使用PyCharm,我想创建一个函数,该函数可以将消息text
打印到文件或标准输出。我开始写:
def my_print(text, file=None):
print(text, file=file if file is not None else ?)
那么else
之后会怎样? sys.stdout
无效,很明显,我对冗长的内容不感兴趣:
def my_print(text, file=None):
if file is None:
print(text)
else:
print(text, file=file)
答案 0 :(得分:1)
另一个答案指出print是用C实现的。但是,即使 是用Python实现的,这也不意味着sys
随处可见。
考虑以下代码:
utils.py
import sys
def my_print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False):
file.write(sep.join(objects))
main.py
from utils import print
my_print('foo')
这里sys
仅在utils中可用,但是打印仍将输出到sys.stdout
,而无法从main进行访问。
答案 1 :(得分:0)
我认为@DanielRoseman很好地说明了为什么,该实现不一定会直接让您访问sys
,但是要解决问题的最后一部分,您可以使用此方法方法...:
def my_print(text, file=None):
print(text, **({'file': file} if file else {}))
...如果存在file=file
,则基本上是在解压缩参数file
的地方,否则不传递任何参数。
就可读性而言,我认为您的原始实现是优越的。
实际上,您只需传递None
:
def my_print(text, file=None):
print(text, file=file)
...,如果未提供print
,它将只是text
file
...