Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 库定义中的Import语句似乎未执行_Python_Import_Nameerror - Fatal编程技术网

Python 库定义中的Import语句似乎未执行

Python 库定义中的Import语句似乎未执行,python,import,nameerror,Python,Import,Nameerror,我遇到了一个问题,这可能是一个很基本的问题,但作为一名Python学习者,我已经为此奋斗了好几个小时。到目前为止,文档还没有给我提供答案 问题在于,当我从python脚本导入模块时,模块中包含的import语句似乎没有执行。我的资料如下: 我有一个文件project.py(即python库),它如下所示: import datetime class Project: """ This class is a container for project data """ titl

我遇到了一个问题,这可能是一个很基本的问题,但作为一名Python学习者,我已经为此奋斗了好几个小时。到目前为止,文档还没有给我提供答案

问题在于,当我从python脚本导入模块时,模块中包含的import语句似乎没有执行。我的资料如下:

我有一个文件project.py(即python库),它如下所示:

import datetime

class Project:
    """ This class is a container for project data """

    title        = ""
    manager      = ""
    date         = datetime.datetime.min

    def __init__( self, title="", manager="", date=datetime.datetime.min ):
    """ Init function with some defaults """

        self.title        = title
        self.manager      = manager
        self.date         = date
import project

print datetime.datetime.min
该库稍后用于导入项目的脚本(
file.py
),其启动方式如下:

import datetime

class Project:
    """ This class is a container for project data """

    title        = ""
    manager      = ""
    date         = datetime.datetime.min

    def __init__( self, title="", manager="", date=datetime.datetime.min ):
    """ Init function with some defaults """

        self.title        = title
        self.manager      = manager
        self.date         = date
import project

print datetime.datetime.min
当我试图用Python
file.py
执行这个脚本时,问题就出现了。Python随后抱怨出现以下错误:

Traceback (most recent call last):
  File "file.py", line 3, in <module>
    print datetime.datetime.min
NameError: name 'datetime' is not defined
回溯(最近一次呼叫最后一次):
文件“File.py”,第3行,在
打印datetime.datetime.min
NameError:未定义名称“datetime”
如果我试图直接从pythonshell生成相同的语句(
import
print
),也会发生这种情况

datetime
模块不应该在我调用
import project
时自动导入吗


非常感谢。

日期时间模块只导入
项目
名称空间。因此,您可以通过
project.datetime.datetime.min
访问它,但实际上您应该直接将它导入到脚本中


project.py
文件中创建的每个符号(名称)(如
project
类)最终都位于
project
命名空间中,其中包括从其他模块导入的内容。然而,这并不像看上去那么低效-实际的
datetime
模块仍然只导入一次,不管您导入多少次。每次在第一个名称空间之后导入它时,它只是将名称导入到当前名称空间中,而不是真正执行读取和导入模块的所有繁重工作。

尝试将
import
语句看作大致相当于:

project = __import__('project')
实际上,
import
语句只是对变量的赋值。加载模块时可能会有一些副作用,但从脚本内部,您看到的只是一个简单的名称赋值

您可以使用project import*中的
从模块中提取所有名称,但是不要这样做,因为这样会使代码更脆弱,更难维护。相反,要么直接导入模块,要么直接导入所需的名称

因此,对于您的代码:

import datetime
from project import Project

是你应该做的事情。

告诉一个新的python程序员,一些非常基本的东西,如
导入
等于超级内部。如果你不需要使用它,你的生活会更好
\uuuuuu导入
函数似乎适得其反(使用真正的伪代码可能会更好)我的观点是,它仅仅等同于在一个神奇的函数和一个简单的赋值中所做的事情。你可以把
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
读作“\uuuuuuuuu。。。它不是“超级内部”(尽管有四个下划线,但它与其他非内部的、未被弃用的内置函数一起记录);OTOH它肯定属于pas devant les enfants类别。
datetime
在您的模块中没有任何意义,因为您没有将该名称绑定到任何内容。其他模块不会影响您的本地名称空间!