Re: [Tutor] library terminology and importing

2016-02-21 Thread Martin A. Brown

Good morning,

I'm inverting the order of your questions, because I think the order of the
answers may help.

>But if I import all of os and datetime, I can use those functions by
>writing the full 'path' 3 levels deep:
>
>os.path.expanduser('~')
>datetime.datetime.now()

[... hold onto your hat, we'll get to datetime.datetime ...]

>from os.path import join,expanduser
>
>Also, is there proper terminology for each of the 3 sections of
>os.path.expanduser('~') for example?  Such as

Yes, there most certainly is; it's good that you are asking.  See below.

>os - library (or module?)
>path - ?
>expanduser - function

Here's how you could figure out what they are called.  Use 'type' to figure
it out:

  >>> import os
  >>> type(os)
  

  >>> type(os.path)
  

  >>> type(os.path.expanduser)
  

Observe that the type of os.path.expanduser is function.

It is for this reason that you can importi (and use) the expanduser 
function by itself.  It can stand alone:

  >>> from os.path import expanduser
  >>> type(expanduser)
  

Side note, for diagnostics, 'type' can be handy, also, for things 
like:

  >>> type('word')
  
  >>> type(7)
  

>I often use now() and strftime() from datetime, but it seems like I can't
>import just those functions.  The os module allows me to import like this:

Ok, so back to datetime...

  >>> type(datetime)
  

This should not surpise you.  So, datetime is a module.  Good.

  >>> type(datetime.datetime)
  

Oh-ho!  What is this one?  It's called 'type'?  Well, it's a Python 
class.  You can see it in the source code, if you look for the class 
definition of 'datetime' in the module 'datetime'.  I find mine in 
/usr/lib64/python3.4/datetime.py around line 1290ff.  Look for this:

  class datetime(date):
  """datetime(year, month, day[, hour[, minute[, second[, 
microsecond[,tzinfo])

Why am I pointing you to this?  Well, in particular, you should see the
following a few lines later (lines 1394 ff in my copy):

@classmethod
def now(cls, tz=None):
"Construct a datetime from time.time() and optional time zone info."
t = _time.time()
return cls.fromtimestamp(t, tz)

If you wish, you can go look up the decorator @classmethod and what 
it does, but the main point I'm making here is that this is not a 
function!  It cannot be separated from the datetime class.  It is 
(in this case) an alternate constructor for a datetime object.  And, 
'type' will tell you so:

  >>> type(datetime.datetime.now)
  

So, even though the name is available to you and callable, when you 
import the module datetime, you can't separate the classmethod 
called 'now()' from the datetime.datetime class.

>but I get an error if I try
>
>from datetime.datetime import now, strftime

If you are mostly interested in shortening your import statement, I have seen
people use this sort of technique:

  >>> from datetime import datetime as dt
  >>> now = dt.now()
  >>> now.strftime('%F-%T')
  '2016-02-21-18:30:37'

Good luck and enjoy,

-Martin

-- 
Martin A. Brown
http://linux-ip.net/
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


Re: [Tutor] library terminology and importing

2016-02-21 Thread Ben Finney
street.swee...@mailworks.org writes:

> I get an error if I try
>
> from datetime.datetime import now, strftime

‘datetime.datetime’ is not a module, so you can not import objects from
it.

> But if I import all of os and datetime, I can use those functions by
> writing the full 'path' 3 levels deep:
>
> os.path.expanduser('~')
> datetime.datetime.now()

Yes. That's a good way to do it, because it makes your code explicit and
clear to read.

> Is there a way to import individual functions from datetime.datetime?

Don't try to do that. Namespaces are a honking good idea in Python, you
should not seek to avoid them.

-- 
 \ “I may disagree with what you say, but I will defend to the |
  `\death your right to mis-attribute this quote to Voltaire.” |
_o__)   —Avram Grumer, rec.arts.sf.written, 2000-05-30 |
Ben Finney

___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


[Tutor] library terminology and importing

2016-02-21 Thread street . sweeper
Hello all,

I often use now() and strftime() from datetime, but it seems like I
can't import just those functions.  The os module allows me to import
like this:

from os.path import join,expanduser

but I get an error if I try

from datetime.datetime import now, strftime

But if I import all of os and datetime, I can use those functions by
writing the full 'path' 3 levels deep:

os.path.expanduser('~')
datetime.datetime.now()

Is there a way to import individual functions from datetime.datetime?


Also, is there proper terminology for each of the 3 sections of
os.path.expanduser('~') for example?  Such as

os - library (or module?)
path - ?
expanduser - function


Thanks!
___
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor