有没有更好的方法来编写下面的这段代码?
yellow = green = red = lambda msg: msg
if sys.stdout.isatty():
try:
from colors import yellow, green, red
except ImportError:
pass
其余代码将使用黄色(“某物”)、绿色(“某物”),不必担心它是终端还是日志文件。
有没有更好的方法来编写下面的这段代码?
yellow = green = red = lambda msg: msg
if sys.stdout.isatty():
try:
from colors import yellow, green, red
except ImportError:
pass
其余代码将使用黄色(“某物”)、绿色(“某物”),不必担心它是终端还是日志文件。
不久前,在邮件列表上讨论了写此内容的最佳方式(作为正在进行的 Python 3 过程的一部分,即将每个纯 C 模块转换为带有 C 加速器的 Python 模块)。
并行并不完美,因为这些是模块导出的函数以用作 stdlib 的一部分,而不是要在当前脚本中使用的函数。但我认为它足够接近用作指南——就像你一样,他们正在定义后备方法,然后尝试在它们上导入实现。
共识——或者至少是从 3.3 开始实施的——似乎与你正在做的几乎完全一样,只是有一些细微的皱纹。
当导入的模块被专门编写以供导入代码使用时,只需使用 a from foo import *
,如在 中elementtree
,您只需使用from _elementtree import *
.
如果您可能需要访问回退功能,即使真实功能可用,如在 中pickle
,请执行以下操作:
_yellow = _green = _red = lambda msg: msg
if sys.stdout.isatty():
try:
from colors import yellow, green, red
except ImportError:
yellow, green, red = _yellow, _green, _red
else:
yellow, green, red = _yellow, _green, _red
尽管在这种情况下,我可能会将其写为:
_yellow = _green = _red = lambda msg: msg
yellow, green, red = _yellow, _green, _red
if sys.stdout.isatty():
try:
from colors import yellow, green, red
except ImportError:
pass
如果这些皱纹都不适用,那就做你正在做的事情。