Questions on "import" and "datetime"

Yunfei Dai yunfei.dai.sigma at gmail.com
Wed Jun 12 06:29:12 EDT 2013


On Monday, June 10, 2013 7:01:30 PM UTC+2, Zachary Ware wrote:
> On Mon, Jun 10, 2013 at 10:37 AM, Yunfei Dai <yunfei.dai.sigma at gmail.com> wrote:
> 
> > Hi all,
> 
> 
> 
> Hi Yunfei,
> 
> 
> 
> >
> 
> > I have some questions on "import":
> 
> >
> 
> > 1."from datetime import datetime" works well. But I am confused why "import datetime.datetime" leads to importerror. "from xlrd import open_workbook" could be replaced by "from xlrd.open_workbook" without any problem.
> 
> 
> 
> I assume you mean "import xlrd.open_workbook" here, as "from
> 
> xlrd.open_workbook" would be a SyntaxError :)
> 
> 
> 
> > The only difference here is that if "from xlrd import open_workbook" is used we do not have to write "xlrd.open_workbook" in the following code but just "open_workbook". So my understanding of the difference is "from...import..." shortens the code (just like "using namespace std" in C++) but maybe leads to name clash.
> 
> 
> 
> "from ... import ..." imports an object from a module and assigns it
> 
> to a local name that is the same as the name in the other module.  In
> 
> other words, the following two examples do the same thing:
> 
> 
> 
> from foo import bar
> 
> 
> 
> import foo;bar = foo.bar
> 
> 
> 
> If foo.bar happens to be a module (module 'bar' in package 'foo'), you
> 
> could also do this:
> 
> 
> 
> import foo.bar as bar
> 
> 
> 
> ...and that restriction is where your problem lies.
> 
> 
> 
> > But what is the problem of datetime?
> 
> 
> 
> I'm not familiar with xlrd, but I believe the difference between
> 
> xlrd.open_workbook and datetime.datetime would be that
> 
> xlrd.open_workbook is a module in a package, while datetime.datetime
> 
> is a class in a module.  'from ... import ...' can import any object
> 
> from the target module/package, and assign it to a local name.
> 
> 'import ...' on the other hand can only import a module (you'll notice
> 
> the ImportError you get when you try 'import datetime.datetime' is 'No
> 
> module named datetime'.  This particular example is a bit confusing
> 
> due to there being a class in a module of the same name, but try
> 
> 'import datetime.date' for a clearer message.
> 
> 
> 
> > 2.I am also comfused that "datetime.datetime" is a function but whithin "datetime.datetime" there are lots of other functions. So what is the type of "datetime.datetime" on earth? is it a function, or a class or a folder(library) here?
> 
> 
> 
> datetime.datetime is actually a type of type 'type' (as can be seen
> 
> with 'import datetime;type(datetime.datetime)').  In Python 2, this
> 
> means it is a new-style class (meaning it is a subclass of 'object').
> 
> In Python 3, it's just a class (since there are no longer old-style
> 
> classes).
> 
> 
> 
> > Thanks very much in advance! Very looking forward to your answers.
> 
> >
> 
> > Best,
> 
> > Yunfei
> 
> >
> 
> 
> 
> I hope I have actually answered your question and not just muddied
> 
> things further for you.  You can of course ask again if I've made
> 
> things worse :)
> 
> 
> 
> -- Zach

Hi Zach,

Thanks so much for your quick, long and detailed reply and sorry for replying you late. It is really helpful for me understanding "import". 

Yunfei





More information about the Python-list mailing list