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.si...@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


-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to