我编写以下模块myinit.py:
import os
import numpy as np
import pandas as pd
import datetime
并将其复制到搜索路径中
sudo cp init.py /usr/local/lib/python3.5/dist-packages/myinit.py
现在,在cmd中使用python进入我的python交互环境
import myinit
dir(pd)
NameError: name 'pd' is not defined
dir(pandas)
NameError: name 'pandas' is not defined
dir(myinit.pd)
<module 'pandas' from '/usr/local/lib/python3.5/dist-packages/pandas/__init__.py'>
在我当前的python cmd环境中,我有两种方法来调用pandas
用myinit.pd
调用它
在当前python cmd环境中输入import pandas as pd
,然后用pd
调用它
它们都让我感到不舒服,在当前的python名称空间中没有os, np ,pd ,datetime
。
如何用自己的名称调用自定义模块导入的模块
import myinit
导入整个myinit
模块,但它只向本地名称空间添加一个名称:myinit
现在,
myinit
本身可能包含pd
、np
、os
和datetime
(以及您在其中定义的任何变量/函数),但它们在myinit
中。因此,要访问它们,我们需要本质上,名称空间是这样嵌套的。我们使用点表示法从一个名称空间下降到另一个名称空间(例如
pandas
有自己的名称空间,pandas.DataFrame
有自己的名称空间,等等)您可以使用
from
从不同模块导入特定名称:而且,将不同模块中包含的每个名称导入本地名称空间的方法(您似乎正在尝试这样做)是使用星号:
尽管您可以做到这一点,但您不应该按照PEP22“显式优于隐式”,并且您应该清楚地知道您在给定导入中使用的名称
顺便说一下,不要担心在两个不同的文件中两次导入相同的模块(比如
pandas
)。它只会加载到内存中一次sys
模块包含整个程序中以前加载的模块的缓存,如果您尝试加载程序中以前加载过的任何模块,它只会从该缓存中选取相同的引用,而不是加载一个全新的实例在程序中的多个文件中导入
pandas
、或os
或几乎任何其他模块都是更好的代码样式,因为这样可以更清楚地了解您使用的工具以及它们的来源相关问题 更多 >
编程相关推荐