调用打印时sys是否“临时”导入?

时间:2018-12-04 13:40:27

标签: python python-3.x import sys

我正在查看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)

2 个答案:

答案 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 ...