Where can I locate the library for python base functions in Linux?
Question: I am mainly trying to get examples from the library of the base functions to
help aid me in my studies of Python. I am running Linux Mint 17 and I would
like to simply know the path to the base functions, so I can open them and
view the Python code they contain.


Answer: Each non built-ins modules have a `__file__` attribute. He contains the
fullpath of the loaded file, so if it's a module write in python, you will get
a '.pyc' file, if it's a C module a '.so'.

    
    
    >>> import collections  # from the std lib in pure python
    >>> collections.__file__
    '/usr/lib/python2.7/collections.pyc'
    >>> import datetime  # from the std lib as a C module
    >>> datetime.__file__
    '/usr/lib/python2.7/lib-dynload/datetime.so'
    >>> import itertools  # from the std lib but a built-in module
    >>> itertools.__file__
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'module' object has no attribute '__file__'
    

You can also use the inspect module, who have a `.getsourcefile` function,
this work not only at module level but a function level too. **If the function
is declared in python !**

    
    
    >>> import inspect
    >>> inspect.getsourcefile(collections)  # Pure python
    '/usr/lib/python2.7/collections.py'
    >>> inspect.getsourcefile(collections.namedtuple)  # Work with a function too.
    '/usr/lib/python2.7/collections.py'
    >>> inspect.getsourcefile(datetime)  # C module so it will return just None
    >>> inspect.getsourcefile(itertools)  # Built-in so it raise an exception
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.7/inspect.py", line 444, in getsourcefile
        filename = getfile(object)
      File "/usr/lib/python2.7/inspect.py", line 403, in getfile
        raise TypeError('{!r} is a built-in module'.format(object))
    TypeError: <module 'itertools' (built-in)> is a built-in module
    

Has you can see, if it's a external C library, `.getsourcefile` return
nothing. And if it's a built-in module/function/class, it raise a `TypeError`
exception.

The others advantages of `.getsourcefile` over `__file__` is that if the
function/class is declared in a subfile of the module it return the right
file. And you can even use it on the type of a "an unknown" object and do
`inspect.getsourcefile(type(obj))`.

(It's test if the source file exist too and return `None` if the '.pyc' is
loaded but the '.py' doesn't exist)

