说我想
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
的模块文件的一部分?
答案 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表示即使您只使用其中的一小部分,整个模块仍会导入。