导入 Python 文件是否也将导入的文件导入 shell?

Ris*_*nit 7 python numpy python-3.x

我正在运行 Python 3.6.2 并尝试根据需要将其他文件导入到我的 shell 提示符中。我在 my_file.py 中有以下代码。

import numpy as np
def my_file(x):
    s = 1/(1+np.exp(-x))
    return s
Run Code Online (Sandbox Code Playgroud)

从我的 3.6.2 shell 提示我调用

from my_file import my_file
Run Code Online (Sandbox Code Playgroud)

但是在我的 shell 提示中,如果我想使用库 numpy,我仍然需要将 numpy 导入到 shell 提示中,即使我已经导入了一个导入 numpy 的文件。这是设计使然的功能吗?或者有没有办法导入 numpy 一次?

Dav*_*ing 4

import具有三个完全独立的效果:

\n\n
    \n
  1. 如果模块尚未在当前进程中导入(通过任何脚本或模块),则执行其代码(通常从磁盘)并存储带有生成的类、函数和变量的模块对象。
  2. \n
  3. 如果模块位于包中,(首先导入包,然后)将新模块存储为包含包的属性(以便引用正常scipy.special工作)。
  4. \n
  5. 将最终导入的模块分配给调用范围中的变量。import foo.bar分配fooimport baz.quux as frob分配baz.quux给名称frob。)
  6. \n
\n\n

前两个效果在所有客户端之间共享,而最后一个则完全是本地的。这是设计使然,因为它可以避免意外使用导入模块的依赖项,而不确保它\xe2\x80\x99s 可用(如果其他模块更改了它们导入的内容,则稍后会中断)。它还允许不同的客户使用不同的简写。

\n\n

正如hpaul 指出的,您可以使用另一个带有限定名称的 module\xe2\x80\x99s 导入,但这会滥用 module\xe2\x80\x99s 接口,就像私有名称的任何其他使用一样,除非(例如six.moves,或者os.path实际上根本不是一个模块)该模块打算发布其他模块的名称。

\n