0

有没有更好的方法来编写下面的这段代码?

yellow = green = red = lambda msg: msg
if sys.stdout.isatty():
  try:
    from colors import yellow, green, red
  except ImportError:
    pass

其余代码将使用黄色(“某物”)、绿色(“某物”),不必担心它是终端还是日志文件。

4

1 回答 1

1

不久前,在邮件列表上讨论了写此内容的最佳方式(作为正在进行的 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

如果这些皱纹都不适用,那就做你正在做的事情。

于 2013-06-19T18:48:57.847 回答