

###############
Learning Python
###############

.. image:: /_static/photos/32800783863_11a00db52c_k_d.jpg


********
Beginner
********

The Python Tutorial
~~~~~~~~~~~~~~~~~~~~

This is the official tutorial. It covers all the basics, and offers a tour of
the language and the standard library. Recommended for those who need a
quick-start guide to the language.

    `The Python Tutorial <http://docs.python.org/tutorial/index.html>`_

Real Python
~~~~~~~~~~~

Real Python is a repository of free and in-depth Python tutorials created by a diverse team of professional Python developers. At Real Python you can learn all things Python from the ground up. Everything from the absolute basics of Python, to web development and web scraping, to data visualization, and beyond.

    `Real Python <https://realpython.com/>`_

Python Basics
~~~~~~~~~~~~~

pythonbasics.org is an introductory tutorial for beginners. The tutorial includes exercises. It covers the basics and there are also in-depth lessons like object oriented programming and regular expressions.

   `Python basics <https://pythonbasics.org/>`_

Python for Beginners
~~~~~~~~~~~~~~~~~~~~

thepythonguru.com is a tutorial focused on beginner programmers. It covers many Python concepts
in depth. It also teaches you some advanced constructs of Python like lambda expressions and regular expressions.
And last it finishes off with the tutorial "How to access MySQL db using Python"

   `Python for Beginners <https://thepythonguru.com/>`_

Learn Python Interactive Tutorial
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Learnpython.org is an easy non-intimidating way to get introduced to Python.
The website takes the same approach used on the popular
`Try Ruby <https://ruby.github.io/TryRuby>`_ website. It has an interactive Python
interpreter built into the site that allows you to go through the lessons
without having to install Python locally.

    `Learn Python <http://www.learnpython.org/>`_

Python for You and Me
~~~~~~~~~~~~~~~~~~~~~

If you want a more traditional book, *Python For You and Me* is an excellent
resource for learning all aspects of the language.

    `Python for You and Me <https://pymbook.readthedocs.io/>`_

Learn Python Step by Step
~~~~~~~~~~~~~~~~~~~~~~~~~

Techbeamers.com provides step-by-step tutorials to teach Python. Each tutorial is supplemented with logically added coding snippets and equips with a follow-up quiz on the subject learned. There is a section for `Python interview questions <https://www.techbeamers.com/python-interview-questions-programmers>`_ to help job seekers. You can also read essential `Python tips <https://www.techbeamers.com/essential-python-tips-tricks-programmers>`_ and learn `best coding practices <https://www.techbeamers.com/python-code-optimization-tips-tricks>`_ for writing quality code. Here, you'll get the right platform to learn Python quickly.

`Learn Python Basic to Advanced <https://www.techbeamers.com/python-tutorial-step-by-step>`_


Online Python Tutor
~~~~~~~~~~~~~~~~~~~

Online Python Tutor gives you a visual step-by-step
representation of how your program runs. Python Tutor
helps people overcome a fundamental barrier to learning
programming by understanding what happens as the computer
executes each line of a program's source code.

    `Online Python Tutor <http://pythontutor.com/>`_

Invent Your Own Computer Games with Python
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This beginner's book is for those with no programming experience at all. Each
chapter has the source code to a small game, using these example programs
to demonstrate programming concepts to give the reader an idea of what
programs "look like".

    `Invent Your Own Computer Games with Python <http://inventwithpython.com/>`_


Hacking Secret Ciphers with Python
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This book teaches Python programming and basic cryptography for absolute
beginners. The chapters provide the source code for various ciphers, as well
as programs that can break them.

    `Hacking Secret Ciphers with Python <http://inventwithpython.com/hacking/>`_


Learn Python the Hard Way
~~~~~~~~~~~~~~~~~~~~~~~~~

This is an excellent beginner programmer's guide to Python. It covers "hello
world" from the console to the web.

    `Learn Python the Hard Way <https://learnpythonthehardway.org/book/>`_


Crash into Python
~~~~~~~~~~~~~~~~~

Also known as *Python for Programmers with 3 Hours*, this guide gives
experienced developers from other languages a crash course on Python.

    `Crash into Python <https://stephensugden.com/crash_into_python/>`_


Dive Into Python 3
~~~~~~~~~~~~~~~~~~

Dive Into Python 3 is a good book for those ready to jump in to Python 3. It's
a good read if you are moving from Python 2 to 3 or if you already have some
experience programming in another language.

    `Dive Into Python 3 <http://diveintopython3.problemsolving.io/>`_


Think Python: How to Think Like a Computer Scientist
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Think Python attempts to give an introduction to basic concepts in computer
science through the use of the Python language. The focus was to create a book
with plenty of exercises, minimal jargon, and a section in each chapter devoted
to the subject of debugging.

While exploring the various features available in the Python language the
author weaves in various design patterns and best practices.

The book also includes several case studies which have the reader explore the
topics discussed in the book in greater detail by applying those topics to
real-world examples. Case studies include assignments in GUI programming and Markov
Analysis.

    `Think Python <http://greenteapress.com/thinkpython/html/index.html>`_


Python Koans
~~~~~~~~~~~~

Python Koans is a port of Edgecase's Ruby Koans.  It uses a test-driven
approach to provide an interactive tutorial
teaching basic Python concepts.  By fixing assertion statements that fail in a
test script, this provides sequential steps to learning Python.

For those used to languages and figuring out puzzles on their own, this can be
a fun, attractive option. For those new to Python and programming, having an
additional resource or reference will be helpful.

    `Python Koans <https://github.com/gregmalcolm/python_koans>`_

More information about test driven development can be found at these resources:

    `Test Driven Development <https://en.wikipedia.org/wiki/Test-driven_development>`_


A Byte of Python
~~~~~~~~~~~~~~~~

A free introductory book that teaches Python at the beginner level, it assumes
no previous programming experience.

    `A Byte of Python for Python 2.x <http://www.ibiblio.org/swaroopch/byteofpython/read/>`_
    `A Byte of Python for Python 3.x <https://python.swaroopch.com/>`_


Computer Science Path on Codecademy
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

A Codecademy course for the absolute Python beginner. This free and interactive
course provides and teaches the basics (and beyond) of Python programming while 
testing the user's knowledge in between progress.
This course also features a built-in interpreter for receiving instant feedback on your learning.

    `Computer Science Path on Codecademy <https://www.codecademy.com/learn/paths/computer-science>`_


Code the blocks
~~~~~~~~~~~~~~~

*Code the blocks* provides free and interactive Python tutorials for
beginners. It combines Python programming with a 3D environment where
you "place blocks" and construct structures. The tutorials teach you
how to use Python to create progressively more elaborate 3D structures,
making the process of learning Python fun and engaging.

    `Code the blocks <https://codetheblocks.com/tutorials/introduction>`_


************
Intermediate
************

Python Tricks: The Book
~~~~~~~~~~~~~~~~~~~~~~~

Discover Python's best practices with simple examples and start writing even more beautiful + Pythonic code. *Python Tricks: The Book* shows you exactly how.

You’ll master intermediate and advanced-level features in Python with practical examples and a clear narrative.

    `Python Tricks: The Book <https://realpython.com/products/python-tricks-book/>`_

Effective Python
~~~~~~~~~~~~~~~~

This book contains 59 specific ways to improve writing Pythonic code. At 227
pages, it is a very brief overview of some of the most common adaptations
programmers need to make to become efficient intermediate level Python
programmers.

    `Effective Python <https://effectivepython.com/>`_


********
Advanced
********

Pro Python
~~~~~~~~~~

This book is for intermediate to advanced Python programmers who are looking to
understand how and why Python works the way it does and how they can take their
code to the next level.

    `Pro Python <https://www.apress.com/gp/book/9781430227571>`_


Expert Python Programming
~~~~~~~~~~~~~~~~~~~~~~~~~
Expert Python Programming deals with best practices in programming Python and
is focused on the more advanced crowd.

It starts with topics like decorators (with caching, proxy, and context manager
case studies), method resolution order, using super() and meta-programming, and
general :pep:`8` best practices.

It has a detailed, multi-chapter case study on writing and releasing a package
and eventually an application, including a chapter on using zc.buildout.  Later
chapters detail best practices such as writing documentation, test-driven
development, version control, optimization, and profiling.

    `Expert Python Programming <https://www.packtpub.com/application-development/expert-python-programming>`_


A Guide to Python's Magic Methods
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This is a collection of blog posts by Rafe Kettler which explain 'magic methods'
in Python. Magic methods are surrounded by double underscores (i.e. __init__)
and can make classes and objects behave in different and magical ways.

    `A Guide to Python's Magic Methods <http://www.rafekettler.com/magicmethods.html>`_

.. note:: Rafekettler.com is currently down; you can go to their GitHub version directly. Here you can find a PDF version:
    `A Guide to Python's Magic Methods (repo on GitHub) <https://github.com/RafeKettler/magicmethods/blob/master/magicmethods.pdf>`_


****************************
For Engineers and Scientists
****************************

A Primer on Scientific Programming with Python
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

A Primer on Scientific Programming with Python, written by Hans Petter
Langtangen, mainly covers Python's usage in the scientific field. In the book,
examples are chosen from mathematics and the natural sciences.

    `A Primer on Scientific Programming with Python <https://www.springer.com/us/book/9783642302930#otherversion=9783642302923>`_

Numerical Methods in Engineering with Python
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Numerical Methods in Engineering with Python, written by Jaan Kiusalaas,
puts the emphasis on numerical methods and how to implement them in Python.

    `Numerical Methods in Engineering with Python <https://www.cambridge.org/us/academic/subjects/engineering/engineering-mathematics-and-programming/numerical-methods-engineering-python-2nd-edition>`_


********************
Miscellaneous Topics
********************

Problem Solving with Algorithms and Data Structures
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Problem Solving with Algorithms and Data Structures covers a range of data
structures and algorithms. All concepts are illustrated with Python code along
with interactive samples that can be run directly in the browser.

    `Problem Solving with Algorithms and Data Structures
    <http://www.interactivepython.org/courselib/static/pythonds/index.html>`_

Programming Collective Intelligence
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Programming Collective Intelligence introduces a wide array of basic machine
learning and data mining methods. The exposition is not very mathematically
formal, but rather focuses on explaining the underlying intuition and shows
how to implement the algorithms in Python.

    `Programming Collective Intelligence <http://shop.oreilly.com/product/9780596529321.do>`_


Transforming Code into Beautiful, Idiomatic Python
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Transforming Code into Beautiful, Idiomatic Python is a video by Raymond Hettinger.
Learn to take better advantage of Python's best features and improve existing code
through a series of code transformations: "When you see this, do that instead."

    `Transforming Code into Beautiful, Idiomatic Python <https://www.youtube.com/watch?v=OSGv2VnC0go>`_


Fullstack Python
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Fullstack Python offers a complete top-to-bottom resource for web development
using Python.

From setting up the web server, to designing the front-end, choosing a database,
optimizing/scaling, etc.

As the name suggests, it covers everything you need to build and run a complete
web app from scratch.

    `Fullstack Python <https://www.fullstackpython.com>`_


PythonistaCafe
~~~~~~~~~~~~~~

PythonistaCafe is an invite-only, online community of Python and software development enthusiasts helping each other succeed and grow. Think of it as a club of mutual improvement for Pythonistas where a broad range of programming questions, career advice, and other topics are discussed every day.

    `PythonistaCafe <https://www.pythonistacafe.com>`_


**********
References
**********

Python in a Nutshell
~~~~~~~~~~~~~~~~~~~~

Python in a Nutshell, written by Alex Martelli, covers most cross-platform
Python usage, from its syntax to built-in libraries to advanced topics such
as writing C extensions.

    `Python in a Nutshell <http://shop.oreilly.com/product/9780596001889.do>`_

The Python Language Reference
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This is Python's reference manual. It covers the syntax and the core semantics
of the language.

    `The Python Language Reference <http://docs.python.org/reference/index.html>`_

Python Essential Reference
~~~~~~~~~~~~~~~~~~~~~~~~~~

Python Essential Reference, written by David Beazley, is the definitive reference
guide to Python. It concisely explains both the core language and the most essential
parts of the standard library. It covers Python 3 and 2.6 versions.

    `Python Essential Reference <http://www.dabeaz.com/per.html>`_

Python Pocket Reference
~~~~~~~~~~~~~~~~~~~~~~~

Python Pocket Reference, written by Mark Lutz, is an easy to use reference to
the core language, with descriptions of commonly used modules and toolkits. It
covers Python 3 and 2.6 versions.

    `Python Pocket Reference <http://shop.oreilly.com/product/9780596158095.do>`_

Python Cookbook
~~~~~~~~~~~~~~~

Python Cookbook, written by David Beazley and Brian K. Jones, is packed with
practical recipes. This book covers the core Python language as well as tasks
common to a wide variety of application domains.

    `Python Cookbook <http://shop.oreilly.com/product/0636920027072.do>`_

Writing Idiomatic Python
~~~~~~~~~~~~~~~~~~~~~~~~

Writing Idiomatic Python, written by Jeff Knupp, contains the most common and
important Python idioms in a format that maximizes identification and
understanding.  Each idiom is presented as a recommendation of a way to write
some commonly used piece of code, followed by an explanation of why the idiom
is important. It also contains two code samples for each idiom: the "Harmful"
way to write it and the "Idiomatic" way.

	`For Python 2.7.3+ <https://www.amazon.com/Writing-Idiomatic-Python-Jeff-Knupp-ebook/dp/B00B5KG0F8/>`_

	`For Python 3.3+  <https://www.amazon.com/Writing-Idiomatic-Python-Jeff-Knupp-ebook/dp/B00B5VXMRG/>`_
