【问题标题】:Importing from python interactive mode从 python 交互模式导入
【发布时间】:2019-01-19 12:30:48
【问题描述】:

我从命令行使用“python -i”运行了一个脚本。该脚本按预期运行,并且按预期以交互模式结束。

不过,现在我想使用 scipy.signal 包中的命令,所以我输入:

>>> from scipy import signal

由于某种原因,这会触发解释器从头开始再次运行整个脚本。

为什么会这样?又该如何避免呢?

【问题讨论】:

  • 您的脚本文件是否命名为scipy.py
  • 如果不是,您使用的文件名是什么?它可能正在某个地方导入。
  • 脚本被命名为 timeit.py,它显然是一个 python 模块。但是,我将其更改为 test.py,同样的事情不断发生:$ python -i test.py Calculate Spectral Densities Correlate time np.correlate() : 0.04867911338806152 /anaconda3/lib/python3.7/site-packages/numpy/core/numeric.py:501: ComplexWarning: Casting complex values to real discards the imaginary part return array(a, dtype, copy=False, order=order) >>> from scipy import signal Calculate Spectral Densities Correlate time np.correlate() : 0.05021977424621582 >>>
  • 抱歉,这种格式看起来很糟糕。基本上, Calculate Spectral Densities Correlate time np.correlate() : 0.04867911338806152 部分是脚本的输出(数字是使用时间模块的计算时间,所以如果数字是'不一样)

标签: python import interactive


【解决方案1】:

当您导入文件时,会读入并执行整个文件。无论您使用from file import function 还是仅使用import file,这都是一样的。

您应该将在导入时不想运行的任何代码放在这样的块中:

if __name__ = '__main__':
    your code here

您希望导入的函数定义应位于此块之外,因为它们需要加载并执行才能导入并可供使用。

请参阅this duplicate question,其中详细解释了这一点。

【讨论】:

猜你喜欢
  • 2011-05-31
  • 2016-04-05
  • 2020-08-15
  • 2010-12-19
  • 2012-11-06
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 2018-09-20
相关资源
最近更新 更多