#Inside a python console
import this

"""
Explanation: Run the following:
End of explanation
"""


# execution semantics
for i in range(10):
    print i**2
print "Outside for loop"

# dynamic binding
my_str = "hola"
type(my_str)

# dynamic binding
my_str = 90
type(my_str)

# fully dynamic typing
4 +5 +6

# fully dynamic typing
4 + "hola"

"""
Explanation: From official website ( http://www.python.org/ ):
Python is a programming language that lets you work more quickly and integrate
your systems more effectively. You can learn to use Python and see almost
immediate gains in productivity and lower maintenance costs.
Executive summary from official website ( http://www.python.org/doc/essays/blurb.html )
Python is an interpreted, object-oriented, high-level programming language
 with dynamic semantics. Its high-level built in data structures, combined
 with dynamic typing and dynamic binding, make it very attractive for Rapid
 Application Development, as well as for use as a scripting or glue language
 to connect existing components together. Python's simple, easy to learn syntax
 emphasizes readability and therefore reduces the cost of program maintenance.
 Python supports modules and packages, which encourages program modularity and
 code reuse. The Python interpreter and the extensive standard library are
 available in source or binary form without charge for all major platforms,
 and can be freely distributed.
TO SUM UP

quick development
simple, readable, easy to learn syntax
general purpose
interpreted (not compiled)
object-oriented
high-level
dynamic semantics (aka execution semantics)
fully dynamic typing
dynamic binding
low programs manteinance cost
modularity and code reuse
no licensing costs
extensive standard library, "batteries included"
imperative and functional programming
automatic memory management
End of explanation
"""


## TOOLS

**CPython** is the real name of default standard Python implementation
  - The interpreter is deployed together with standard library
  - It can take a file as argument to run. Otherwise it opens and interactive console
  - With '-m' parameter you can execute directly certain modules (debugging, profiling)
  - Implemented in C
 
There are Python implementations in other languages:
  - Jython: Python 2.5 interpreter written in Java which runs bytecode in the JVM
  - IronPython: Similar approach for .NET Common Language Runtime
  - JS, C++, CIL...
  - Stackless Python: CPython fork with microthreads concurrency
  - PyPy: Python 2.7 interpreter implemented in Python. Really fast, multi-core...!!!


**IPython**: create a comprehensive environment for interactive and exploratory computing  
An enhanced interactive Python shell  
An architecture for interactive parallel computing:
  - Other powerful interactive shells (terminal and Qt-based)
  - A browser-based notebook with support for code, text, mathematical expressions
    inline plots and other rich media
  - Support for interactive data visualization and use of GUI toolkits
  - Flexible, embeddable interpreters to load into your own projects
  - Easy to use, high performance tools for parallel computing
  - Recently funded with $1.15M from the Alfred P. Sloan Foundation


**virtualenv**: a tool to create isolated Python environments  
It simply changes your PATH environment var to point to a different folder


**PyPi**: The Python Package Index is a repository of software for the Python programming language.  
There are currently 89324 packages here.  
The packages are 'eggs'.

**pip**: A tool for installing and managing Python packages
It installs packages from PyPi, local folders or Git and other repositories
It can read a list of packages from a file or generate the list of installed packages

"""
Explanation: HISTORY

http://docs.python.org/2/license.html
http://en.wikipedia.org/wiki/History_of_Python
http://en.wikipedia.org/wiki/Benevolent_Dictator_For_Life
http://www.python.org/dev/peps/pep-0001/
http://docs.python.org/3.0/whatsnew/3.0.html
End of explanation
"""


