请考虑以下示例,使用Python的datetime模块:
from datetime import datedate1 = date(2019,1,1)date2 = date(2019,5)type(date2-date1) #<class 'datetime.timedelta'>type(date2) #<class 'datetime.date'>
然后date2-date1属于timedelta类,即使我们没有导入它.
(我可能还会做其他示例,我们获取对象,即使我们没有定义它们.)
怎么会这样?
我是否应该考虑这些新对象只是作为内存中由其他函数返回的片段d出,即使我们没有定义它们,也包含“本身”足够的信息,以便Python解释器可以有意义地应用type()和其他函数?
解决方法 您错误地认为导入限制了加载到内存中的内容. import限制模块全局变量中绑定的名称.整个模块仍然被加载,该模块的依赖项也是如此.仅仅因为您的命名空间没有绑定对datetime.timedelta对象的引用并不意味着它不可用于datetime模块.
见import
statement documentation:
The
find the module specifIEd in thefrom
form uses a slightly more complex process:from
clause,loading and initializing it if necessary; for each of the IDentifIErs specifIEd in theimport
clauses: check if the imported module has an attribute by that name if not,attempt to import a submodule with that name and then check the imported module again for that attribute if the attribute is not found,importError
is raised. otherwise,a reference to that value is stored in the local namespace,using the name in the as clause if it is present,otherwise using the attribute name
因此,加载和初始化模块是一个单独的步骤,每个模块执行一次.第二步绑定命名空间中的名称.
从datetime导入日期确保加载datetime模块,然后找到datetime.date并将date = datetime.date添加到命名空间.
如果要查看加载了哪些模块,请查看sys.modules
mapping.这是import
statement machinery checks查看给定模块是否已加载的位置.
以上是内存溢出为你收集整理的Python如何处理来自“其他地方”的对象全部内容,希望文章能够帮你解决Python如何处理来自“其他地方”的对象所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)