导入模块(或包).function实际导入整个模块/包?

时间:2017-05-05 03:55:57

标签: python

说我想

import module.function

它是否真的将整个module导入内存而不仅仅是function

我想问这个问题,因为我认为只从模块中导入我需要的功能可以减少内存消耗。

修改
澄清我的问题并在以下两个背景下提出问题:
 1. import module.function1其中module是单个module.py文件,其中包含function1以及其他函数定义和类定义等。整个module是否已加载到内存中或只是function1定义部分?
 2. import package.function1其中package是像numpy这样的包,其中包含文件层次结构,如下所述的Mike Tung。整个包是加载到内存中的,还是仅包含function1定义的模块文件,还是只是定义function1的模块文件的一部分?

4 个答案:

答案 0 :(得分:3)

是的,它确实导入了整个功能。包含该函数的目的主要是为了代码样式。它使您更容易理解您只在模块中使用该特定功能。

您是否使用

import module.function 
# this is equivalent to "import module" since you will still have to type 
# "module.function()" to use the function.  See next answer for correct syntax

from module import function

String emailText = (EditText) findViewById(R.id.emailText);

对内存/性能影响不大。

答案 1 :(得分:2)

我们假设你有以下结构

app/
├── foo/
│   ├── __init__.py
│   ├── foo1.py
│   └── foo2.py
├── bar/
│   ├── __init__.py
│   └── bar1.py
└── app.py

当您在app.py

中说
import foo

你要说导入foo下的所有py文件,以便在app.py

中使用

当你说:

import foo.foo1

你说我只想要foo1.py

的内容

当你说:

from foo.foo2 import *

你说要把foo2中的所有内容都转储到与app.py相同的命名空间。

在方案1中,您必须非常具体地限定所有来电。

foo.foo1.function()

在方案2中

foo1.function()

在方案3中

function()

理想情况下,您将使用方案2,因为它是一个很好的中间地带,有助于防止命名空间污染。

答案 2 :(得分:2)

实际上,

import module.function是一个错误。您只能使用该语法导入子模块,而不能导入函数。

from module import function不是错误。 from module import function将执行整个模块,因为该函数可能以任意复杂的方式依赖于模块中的其他函数或模块执行的任意设置。

答案 3 :(得分:1)

This post表示即使您只使用其中的一小部分,整个模块仍会导入。