原始:重复问题。 if 'idlelib.run' in sys.modules: 可能是最好的答案。加and sys.stdin is not sys.__stdin__更放心。
编辑:这是这个问题的正确答案:我如何判断我的代码是在 IDLE 中运行还是直接在 Python 中运行,没有 IDLE。结束此问题的人的想法与假设的重复项回答此问题时的想法相同。
从 IDLE 编辑器运行代码基本上与在 shell 中输入的代码相同。这就是为什么在 Shell 中出现打印输出,然后是 shell 提示符的原因。因此,如果无法自己验证,我不会相信从 IDLE 编辑器运行相同的代码时运行速度会快 10 倍。
原文:由于进程间通信的开销,在 shell 中打印大量短字符串 速度较慢。在打印之前加入字符串更快,因为每个字符的开销更少。
编辑:这里我比较了在 IDLE 中运行与在没有 IDLE 的情况下在 Python 中运行。在这两种截然不同的情况下,我看到了 10 倍的打印速度差异。
原文:如果有其他问题,请提出一个新问题,我会看看它。
编辑:上面我说“从 shell 提示符运行”和“从编辑器运行”本质上是相同的。 “Shell 正常启动,没有先运行文件”和“Shell 通过首先从编辑器运行文件启动”之间略有不同。是模块main中存在属性file,必须导入。
================================ RESTART: Shell ====================
>>> import __main__
>>> hasattr(__main__, '__file__')
False
>>>
========================= RESTART: F:\Python\a\tem-3.py ===
# File has same two lines above.
True
# But note that subsequent calls entered here now return True.
>>> hasattr(__main__, '__file__')
True
>>>
编辑总结:在 IDLE 的 Shell 中运行的函数可以知道 Shell 上次是如何启动或重新启动的。据我所知,它无法说出它是如何输入的。在任何一种情况下,函数的编译方式都是相同的,并且具有相同的属性。因此,它只能检测由环境设置方式不同引起的环境差异似乎是合理的。我能找到的唯一环境差异是 main.file 是否以文件开头。