Host photos locally

This commit is contained in:
Dan Bader
2018-07-16 17:51:29 -07:00
parent 71e387ada6
commit 03ed5fbf0d
92 changed files with 168 additions and 168 deletions
+1 -1
View File
@@ -3,7 +3,7 @@ Hitchhiker's Guide to Python
**Python Best Practices Guidebook** **Python Best Practices Guidebook**
.. image:: https://farm1.staticflickr.com/628/33173824932_58add34581_k_d.jpg .. image:: /_static/photos/33173824932_58add34581_k_d.jpg
----------- -----------
Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

View File
+3 -3
View File
@@ -1,7 +1,7 @@
Your Development Environment Your Development Environment
============================ ============================
.. image:: https://farm3.staticflickr.com/2930/33175624924_7febc46cc4_k_d.jpg .. image:: /_static/photos/33175624924_7febc46cc4_k_d.jpg
Text Editors Text Editors
@@ -164,8 +164,8 @@ MIT licensed.
Enthought Canopy Enthought Canopy
---------------- ----------------
`Enthought Canopy <https://www.enthought.com/products/canopy/>`_ is a Python `Enthought Canopy <https://www.enthought.com/products/canopy/>`_ is a Python
IDE which is focused towards Scientists and Engineers as it provides pre IDE which is focused towards Scientists and Engineers as it provides pre
installed libraries for data analysis. installed libraries for data analysis.
Eclipse Eclipse
------- -------
+1 -1
View File
@@ -3,7 +3,7 @@
Further Configuration of Pip and Virtualenv Further Configuration of Pip and Virtualenv
=========================================== ===========================================
.. image:: https://farm4.staticflickr.com/3934/34018732105_f0e6758859_k_d.jpg .. image:: /_static/photos/34018732105_f0e6758859_k_d.jpg
Requiring an active virtual environment for ``pip`` Requiring an active virtual environment for ``pip``
--------------------------------------------------- ---------------------------------------------------
+1 -1
View File
@@ -3,7 +3,7 @@
Pipenv & Virtual Environments Pipenv & Virtual Environments
============================= =============================
.. image:: https://farm5.staticflickr.com/4290/35294660055_42c02b2316_k_d.jpg .. image:: /_static/photos/35294660055_42c02b2316_k_d.jpg
This tutorial walks you through installing and using Python packages. This tutorial walks you through installing and using Python packages.
+1 -1
View File
@@ -3,7 +3,7 @@
The Community The Community
============= =============
.. image:: https://farm5.staticflickr.com/4225/34689432801_78d97ecec9_k_d.jpg .. image:: /_static/photos/34689432801_78d97ecec9_k_d.jpg
BDFL BDFL
---- ----
+1 -1
View File
@@ -1,7 +1,7 @@
Documentation Documentation
============= =============
.. image:: https://farm5.staticflickr.com/4178/33928823133_2f3d32cf32_k_d.jpg .. image:: /_static/photos/33928823133_2f3d32cf32_k_d.jpg
Official Documentation Official Documentation
---------------------- ----------------------
+1 -1
View File
@@ -1,7 +1,7 @@
Introduction Introduction
============ ============
.. image:: https://farm5.staticflickr.com/4180/34725946825_0f85497e60_k_d.jpg .. image:: /_static/photos/34725946825_0f85497e60_k_d.jpg
From the `official Python website <http://python.org/about/>`_: From the `official Python website <http://python.org/about/>`_:
+1 -1
View File
@@ -1,7 +1,7 @@
Learning Python Learning Python
=============== ===============
.. image:: https://farm3.staticflickr.com/2840/32800783863_11a00db52c_k_d.jpg .. image:: /_static/photos/32800783863_11a00db52c_k_d.jpg
Beginner Beginner
-------- --------
+2 -2
View File
@@ -1,7 +1,7 @@
News News
==== ====
.. image:: https://farm4.staticflickr.com/3804/33573767786_eececc5d27_k_d.jpg .. image:: /_static/photos/33573767786_eececc5d27_k_d.jpg
Planet Python Planet Python
~~~~~~~~~~~~~ ~~~~~~~~~~~~~
@@ -35,7 +35,7 @@ A short-form Python podcast covering recent developer headlines.
Pycoder's Weekly Pycoder's Weekly
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
Pycoder's Weekly is a free weekly Python newsletter for Python developers Pycoder's Weekly is a free weekly Python newsletter for Python developers
by Python developers (Projects, Articles, News, and Jobs). by Python developers (Projects, Articles, News, and Jobs).
`Pycoder's Weekly <http://www.pycoders.com/>`_ `Pycoder's Weekly <http://www.pycoders.com/>`_
+1 -1
View File
@@ -1,7 +1,7 @@
Contribute Contribute
~~~~~~~~~~ ~~~~~~~~~~
.. image:: https://farm3.staticflickr.com/2858/33573769116_49c1ef51e7_k_d.jpg .. image:: /_static/photos/33573769116_49c1ef51e7_k_d.jpg
Python-guide is under active development, and contributors are welcome. Python-guide is under active development, and contributors are welcome.
+1 -1
View File
@@ -2,6 +2,6 @@
License License
======= =======
.. image:: https://farm4.staticflickr.com/3762/32800805573_568d6b72fd_k_d.jpg .. image:: /_static/photos/32800805573_568d6b72fd_k_d.jpg
The Guide is licensed under the `Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported license <https://creativecommons.org/licenses/by-nc-sa/3.0/>`_. The Guide is licensed under the `Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported license <https://creativecommons.org/licenses/by-nc-sa/3.0/>`_.
+1 -1
View File
@@ -4,7 +4,7 @@
The Guide Style Guide The Guide Style Guide
===================== =====================
.. image:: https://farm4.staticflickr.com/3684/33573755856_7f43d43adf_k_d.jpg .. image:: /_static/photos/33573755856_7f43d43adf_k_d.jpg
As with all documentation, having a consistent format helps make the As with all documentation, having a consistent format helps make the
document more understandable. In order to make The Guide easier to digest, document more understandable. In order to make The Guide easier to digest,
+19 -19
View File
@@ -1,7 +1,7 @@
Systems Administration Systems Administration
====================== ======================
.. image:: https://farm5.staticflickr.com/4179/34435690580_3afec7d4cd_k_d.jpg .. image:: /_static/photos/34435690580_3afec7d4cd_k_d.jpg
Fabric Fabric
------ ------
@@ -234,37 +234,37 @@ The Ansible playbook will ping all of the servers in the :file:`hosts.yml` file.
You can also select groups of servers using Ansible. For more information You can also select groups of servers using Ansible. For more information
about Ansible, read the `Ansible Docs <http://docs.ansible.com/>`_. about Ansible, read the `Ansible Docs <http://docs.ansible.com/>`_.
`An Ansible tutorial <https://serversforhackers.com/an-ansible-tutorial/>`_ is also a `An Ansible tutorial <https://serversforhackers.com/an-ansible-tutorial/>`_ is also a
great and detailed introduction to getting started with Ansible. great and detailed introduction to getting started with Ansible.
Chef Chef
---- ----
`Chef <https://www.chef.io/chef/>`_ is a systems and cloud infrastructure automation `Chef <https://www.chef.io/chef/>`_ is a systems and cloud infrastructure automation
framework that makes it easy to deploy servers and applications to any physical, framework that makes it easy to deploy servers and applications to any physical,
virtual, or cloud location. In case this is your choice for configuration management, virtual, or cloud location. In case this is your choice for configuration management,
you will primarily use Ruby to write your infrastructure code. you will primarily use Ruby to write your infrastructure code.
Chef clients run on every server that is part of your infrastructure and these regularly Chef clients run on every server that is part of your infrastructure and these regularly
check with your Chef server to ensure your system is always aligned and represents the check with your Chef server to ensure your system is always aligned and represents the
desired state. Since each individual server has its own distinct Chef client, each server desired state. Since each individual server has its own distinct Chef client, each server
configures itself and this distributed approach makes Chef a scalable automation platform. configures itself and this distributed approach makes Chef a scalable automation platform.
Chef works by using custom recipes (configuration elements), implemented in cookbooks. Cookbooks, which are basically Chef works by using custom recipes (configuration elements), implemented in cookbooks. Cookbooks, which are basically
packages for infrastructure choices, are usually stored in your Chef server. packages for infrastructure choices, are usually stored in your Chef server.
Read the `Digital Ocean tutorial series Read the `Digital Ocean tutorial series
<https://www.digitalocean.com/community/tutorials/how-to-install-a-chef-server-workstation-and-client-on-ubuntu-vps-instances>`_ <https://www.digitalocean.com/community/tutorials/how-to-install-a-chef-server-workstation-and-client-on-ubuntu-vps-instances>`_
on chef to learn how to create a simple Chef Server. on chef to learn how to create a simple Chef Server.
To create a simple cookbook the `knife <https://docs.chef.io/knife.html>`_ command is used: To create a simple cookbook the `knife <https://docs.chef.io/knife.html>`_ command is used:
.. code-block:: console .. code-block:: console
knife cookbook create cookbook_name knife cookbook create cookbook_name
`Getting started with Chef <http://gettingstartedwithchef.com/first-steps-with-chef.html>`_ `Getting started with Chef <http://gettingstartedwithchef.com/first-steps-with-chef.html>`_
is a good starting point for Chef Beginners and many community maintained cookbooks that can is a good starting point for Chef Beginners and many community maintained cookbooks that can
serve as a good reference or tweaked to serve your infrastructure configuration needs can be serve as a good reference or tweaked to serve your infrastructure configuration needs can be
found on the `Chef Supermarket <https://supermarket.chef.io/cookbooks>`_. found on the `Chef Supermarket <https://supermarket.chef.io/cookbooks>`_.
- `Chef Documentation <https://docs.chef.io/>`_ - `Chef Documentation <https://docs.chef.io/>`_
@@ -304,7 +304,7 @@ your Puppet modules.
.. code-block:: console .. code-block:: console
$ facter operatingsystem $ facter operatingsystem
Ubuntu Ubuntu
Writing Modules in Puppet is pretty straight forward. Puppet Manifests together Writing Modules in Puppet is pretty straight forward. Puppet Manifests together
form Puppet Modules. Puppet manifest end with an extension of ``.pp``. form Puppet Modules. Puppet manifest end with an extension of ``.pp``.
@@ -374,7 +374,7 @@ Buildout
-------- --------
`Buildout <http://www.buildout.org>`_ is an open source software build tool. `Buildout <http://www.buildout.org>`_ is an open source software build tool.
Buildout is created using the Python programming language. It implements a Buildout is created using the Python programming language. It implements a
principle of separation of configuration from the scripts that do the setting up. principle of separation of configuration from the scripts that do the setting up.
Buildout is primarily used to download and set up dependencies in Python eggs Buildout is primarily used to download and set up dependencies in Python eggs
format of the software being developed or deployed. Recipes for build tasks in any format of the software being developed or deployed. Recipes for build tasks in any
+1 -1
View File
@@ -1,7 +1,7 @@
Continuous Integration Continuous Integration
====================== ======================
.. image:: https://farm5.staticflickr.com/4173/33907150594_9abba7ad0a_k_d.jpg .. image:: /_static/photos/33907150594_9abba7ad0a_k_d.jpg
.. note:: .. note::
For advice on writing your tests, see :doc:`/writing/tests`. For advice on writing your tests, see :doc:`/writing/tests`.
+5 -5
View File
@@ -1,7 +1,7 @@
Command-line Applications Command-line Applications
========================= =========================
.. image:: https://farm5.staticflickr.com/4272/34435690330_11930b5987_k_d.jpg .. image:: /_static/photos/34435690330_11930b5987_k_d.jpg
Command-line applications, also referred to as Command-line applications, also referred to as
`Console Applications <http://en.wikipedia.org/wiki/Console_application>`_, `Console Applications <http://en.wikipedia.org/wiki/Console_application>`_,
@@ -68,9 +68,9 @@ sub-command to do the work.
Cement Cement
------ ------
`Cement <http://builtoncement.com/>`_ is an advanced CLI Application Framework. `Cement <http://builtoncement.com/>`_ is an advanced CLI Application Framework.
Its goal is to introduce a standard, and feature-full platform Its goal is to introduce a standard, and feature-full platform
for both simple and complex command line applications as well for both simple and complex command line applications as well
as support rapid development needs without sacrificing quality. as support rapid development needs without sacrificing quality.
Cement is flexible, and it's use cases span from the simplicity of a micro-framework Cement is flexible, and it's use cases span from the simplicity of a micro-framework
to the complexity of a meg-framework. to the complexity of a meg-framework.
+4 -4
View File
@@ -1,7 +1,7 @@
Interfacing with C/C++ Libraries Interfacing with C/C++ Libraries
================================ ================================
.. image:: https://farm5.staticflickr.com/4173/34725951345_c8f5959a2e_k_d.jpg .. image:: /_static/photos/34725951345_c8f5959a2e_k_d.jpg
C Foreign Function Interface C Foreign Function Interface
---------------------------- ----------------------------
@@ -105,20 +105,20 @@ Example: Overloading __repr__
:linenos: :linenos:
%include "string.i" %include "string.i"
%module myclass %module myclass
%{ %{
#include <string> #include <string>
#include "MyClass.h" #include "MyClass.h"
%} %}
%extend MyClass { %extend MyClass {
std::string __repr__() std::string __repr__()
{ {
return $self->getName(); return $self->getName();
} }
} }
%include "MyClass.h" %include "MyClass.h"
+1 -1
View File
@@ -1,7 +1,7 @@
Network Applications Network Applications
==================== ====================
.. image:: https://farm5.staticflickr.com/4251/34364815780_bea6614025_k_d.jpg .. image:: /_static/photos/34364815780_bea6614025_k_d.jpg
HTTP HTTP
:::: ::::
+3 -3
View File
@@ -1,13 +1,13 @@
Cryptography Cryptography
============ ============
.. image:: https://farm5.staticflickr.com/4220/33907152824_bf91078cc1_k_d.jpg .. image:: /_static/photos/33907152824_bf91078cc1_k_d.jpg
Cryptography Cryptography
------------ ------------
`Cryptography <https://cryptography.io/en/latest/>`_ is an actively developed `Cryptography <https://cryptography.io/en/latest/>`_ is an actively developed
library that provides cryptographic recipes and primitives. It supports library that provides cryptographic recipes and primitives. It supports
Python 2.6-2.7, Python 3.3+ and PyPy. Python 2.6-2.7, Python 3.3+ and PyPy.
@@ -60,7 +60,7 @@ Example
.. code-block:: python3 .. code-block:: python3
import gpg import gpg
# Encryption to public key specified in rkey. # Encryption to public key specified in rkey.
a_key = input("Enter the fingerprint or key ID to encrypt to: ") a_key = input("Enter the fingerprint or key ID to encrypt to: ")
filename = input("Enter the filename to encrypt: ") filename = input("Enter the filename to encrypt: ")
+1 -1
View File
@@ -1,7 +1,7 @@
Databases Databases
========= =========
.. image:: https://farm5.staticflickr.com/4225/33907152464_a99fdcc8de_k_d.jpg .. image:: /_static/photos/33907152464_a99fdcc8de_k_d.jpg
DB-API DB-API
------ ------
+1 -1
View File
@@ -1,7 +1,7 @@
GUI Applications GUI Applications
================ ================
.. image:: https://farm5.staticflickr.com/4250/33907143624_cd621b535c_k_d.jpg .. image:: /_static/photos/33907143624_cd621b535c_k_d.jpg
Alphabetical list of GUI Applications. Alphabetical list of GUI Applications.
+1 -1
View File
@@ -2,7 +2,7 @@
Image Manipulation Image Manipulation
================== ==================
.. image:: https://farm5.staticflickr.com/4157/34575689432_3de8e9a348_k_d.jpg .. image:: /_static/photos/34575689432_3de8e9a348_k_d.jpg
Most image processing and manipulation techniques can be carried out Most image processing and manipulation techniques can be carried out
effectively using two libraries: Python Imaging Library (PIL) and OpenSource effectively using two libraries: Python Imaging Library (PIL) and OpenSource
+2 -2
View File
@@ -1,7 +1,7 @@
JSON JSON
==== ====
.. image:: https://farm5.staticflickr.com/4174/33928819683_97b5c6a184_k_d.jpg .. image:: /_static/photos/33928819683_97b5c6a184_k_d.jpg
The `json <https://docs.python.org/2/library/json.html>`_ library can parse The `json <https://docs.python.org/2/library/json.html>`_ library can parse
JSON from strings or files. The library parses JSON into a Python dictionary JSON from strings or files. The library parses JSON into a Python dictionary
@@ -60,7 +60,7 @@ You can start using simplejson when the json library is not available by
importing simplejson under a different name: importing simplejson under a different name:
.. code-block:: python .. code-block:: python
import simplejson as json import simplejson as json
After importing simplejson as json, the above examples will all work as if you After importing simplejson as json, the above examples will all work as if you
+8 -8
View File
@@ -2,9 +2,9 @@
Machine Learning Machine Learning
================ ================
.. image:: https://farm4.staticflickr.com/3954/34018729885_002ced9b54_k_d.jpg .. image:: /_static/photos/34018729885_002ced9b54_k_d.jpg
Python has a vast number of libraries for data analysis, statistics and Machine Learning itself, making it a language of choice for many data scientists. Python has a vast number of libraries for data analysis, statistics and Machine Learning itself, making it a language of choice for many data scientists.
Some widely used packages for Machine Learning and other Data Science applications are enlisted below. Some widely used packages for Machine Learning and other Data Science applications are enlisted below.
@@ -45,7 +45,7 @@ Installation
Through PyPI: Through PyPI:
.. code-block:: python .. code-block:: python
pip install -U scikit-learn pip install -U scikit-learn
Through conda: Through conda:
@@ -61,28 +61,28 @@ Example
For this example, we train a simple classifier on the `Iris dataset <http://en.wikipedia.org/wiki/Iris_flower_data_set>`_, which comes bundled in with scikit-learn. For this example, we train a simple classifier on the `Iris dataset <http://en.wikipedia.org/wiki/Iris_flower_data_set>`_, which comes bundled in with scikit-learn.
The dataset takes four features of flowers: sepal length, sepal width, petal length and petal width, and classifies them into three flower species (labels): setosa, versicolor or virginica. The labels have been represented as numbers in the dataset: 0 (setosa), 1 (versicolor) and 2 (virginica). The dataset takes four features of flowers: sepal length, sepal width, petal length and petal width, and classifies them into three flower species (labels): setosa, versicolor or virginica. The labels have been represented as numbers in the dataset: 0 (setosa), 1 (versicolor) and 2 (virginica).
We shuffle the Iris dataset, and divide it into separate training and testing sets: keeping the last 10 data points for testing and rest for training. We then train the classifier on the training set, and predict on the testing set. We shuffle the Iris dataset, and divide it into separate training and testing sets: keeping the last 10 data points for testing and rest for training. We then train the classifier on the training set, and predict on the testing set.
.. code-block:: python .. code-block:: python
from sklearn.datasets import load_iris from sklearn.datasets import load_iris
from sklearn import tree from sklearn import tree
from sklearn.metrics import accuracy_score from sklearn.metrics import accuracy_score
import numpy as np import numpy as np
#loading the iris dataset #loading the iris dataset
iris = load_iris() iris = load_iris()
x = iris.data #array of the data x = iris.data #array of the data
y = iris.target #array of labels (i.e answers) of each data entry y = iris.target #array of labels (i.e answers) of each data entry
#getting label names i.e the three flower species #getting label names i.e the three flower species
y_names = iris.target_names y_names = iris.target_names
#taking random indices to split the dataset into train and test #taking random indices to split the dataset into train and test
test_ids = np.random.permutation(len(x)) test_ids = np.random.permutation(len(x))
#splitting data and labels into train and test #splitting data and labels into train and test
#keeping last 10 entries for testing, rest for training #keeping last 10 entries for testing, rest for training
+2 -2
View File
@@ -1,7 +1,7 @@
Networking Networking
========== ==========
.. image:: https://farm3.staticflickr.com/2892/34151833832_6bdfd930af_k_d.jpg .. image:: /_static/photos/34151833832_6bdfd930af_k_d.jpg
Twisted Twisted
------- -------
@@ -35,4 +35,4 @@ gevent
`gevent <http://www.gevent.org/>`_ is a coroutine-based Python networking `gevent <http://www.gevent.org/>`_ is a coroutine-based Python networking
library that uses greenlets to provide a high-level synchronous API on top of library that uses greenlets to provide a high-level synchronous API on top of
the libev event loop. the libev event loop.
+1 -1
View File
@@ -2,7 +2,7 @@
Scientific Applications Scientific Applications
======================= =======================
.. image:: https://farm3.staticflickr.com/2890/33925223870_97e44f5629_k_d.jpg .. image:: /_static/photos/33925223870_97e44f5629_k_d.jpg
Context Context
::::::: :::::::
+1 -1
View File
@@ -1,7 +1,7 @@
HTML Scraping HTML Scraping
============= =============
.. image:: https://farm3.staticflickr.com/2900/34268661876_442428e122_k_d.jpg .. image:: /_static/photos/34268661876_442428e122_k_d.jpg
Web Scraping Web Scraping
------------ ------------
+15 -15
View File
@@ -2,41 +2,41 @@
Data Serialization Data Serialization
================== ==================
.. image:: https://farm3.staticflickr.com/2927/33467946364_3e59bd376a_k_d.jpg .. image:: /_static/photos/33467946364_3e59bd376a_k_d.jpg
What is data serialization? What is data serialization?
--------------------------- ---------------------------
Data serialization is the concept of converting structured data into a format Data serialization is the concept of converting structured data into a format
that allows it to be shared or stored in such a way that its original that allows it to be shared or stored in such a way that its original
structure to be recovered. In some cases, the secondary intention of data structure to be recovered. In some cases, the secondary intention of data
serialization is to minimize the size of the serialized data which then serialization is to minimize the size of the serialized data which then
minimizes disk space or bandwidth requirements. minimizes disk space or bandwidth requirements.
Pickle Pickle
------ ------
The native data serialization module for Python is called `Pickle The native data serialization module for Python is called `Pickle
<https://docs.python.org/2/library/pickle.html>`_. <https://docs.python.org/2/library/pickle.html>`_.
Here's an example: Here's an example:
.. code-block:: python .. code-block:: python
import pickle import pickle
#Here's an example dict #Here's an example dict
grades = { 'Alice': 89, 'Bob': 72, 'Charles': 87 } grades = { 'Alice': 89, 'Bob': 72, 'Charles': 87 }
#Use dumps to convert the object to a serialized string #Use dumps to convert the object to a serialized string
serial_grades = pickle.dumps( grades ) serial_grades = pickle.dumps( grades )
#Use loads to de-serialize an object #Use loads to de-serialize an object
received_grades = pickle.loads( serial_grades ) received_grades = pickle.loads( serial_grades )
Protobuf Protobuf
-------- --------
If you're looking for a serialization module that has support in multiple If you're looking for a serialization module that has support in multiple
languages, Google's `Protobuf languages, Google's `Protobuf
<https://developers.google.com/protocol-buffers>`_ library is an option. <https://developers.google.com/protocol-buffers>`_ library is an option.
+8 -8
View File
@@ -1,7 +1,7 @@
Speed Speed
===== =====
.. image:: https://farm3.staticflickr.com/2826/33175625804_e225b90f3e_k_d.jpg .. image:: /_static/photos/33175625804_e225b90f3e_k_d.jpg
CPython, the most commonly used implementation of Python, is slow for CPU bound CPython, the most commonly used implementation of Python, is slow for CPU bound
tasks. `PyPy`_ is fast. tasks. `PyPy`_ is fast.
@@ -234,14 +234,14 @@ Concurrent.futures
The `concurrent.futures`_ module is a module in the standard library that The `concurrent.futures`_ module is a module in the standard library that
provides a "high-level interface for asynchronously executing callables". It provides a "high-level interface for asynchronously executing callables". It
abstracts away a lot of the more complicated details about using multiple abstracts away a lot of the more complicated details about using multiple
threads or processes for concurrency, and allows the user to focus on threads or processes for concurrency, and allows the user to focus on
accomplishing the task at hand. accomplishing the task at hand.
The `concurrent.futures`_ module exposes two main classes, the The `concurrent.futures`_ module exposes two main classes, the
`ThreadPoolExecutor` and the `ProcessPoolExecutor`. The ThreadPoolExecutor `ThreadPoolExecutor` and the `ProcessPoolExecutor`. The ThreadPoolExecutor
will create a pool of worker threads that a user can submit jobs to. These jobs will create a pool of worker threads that a user can submit jobs to. These jobs
will then be executed in another thread when the next worker thread becomes will then be executed in another thread when the next worker thread becomes
available. available.
The ProcessPoolExecutor works in the same way, except instead of using multiple The ProcessPoolExecutor works in the same way, except instead of using multiple
threads for its workers, it will use multiple processes. This makes it possible threads for its workers, it will use multiple processes. This makes it possible
@@ -275,7 +275,7 @@ everything in parallel. :
# Do something with the result # Do something with the result
print(page.text) print(page.text)
For even more control, the `submit(func, *args, **kwargs)` method will schedule For even more control, the `submit(func, *args, **kwargs)` method will schedule
a callable to be executed ( as `func(*args, **kwargs)`) and returns a `Future`_ a callable to be executed ( as `func(*args, **kwargs)`) and returns a `Future`_
object that represents the execution of the callable. object that represents the execution of the callable.
@@ -389,9 +389,9 @@ still alive (because the join call timed out):
Because multiple threads have access to the same section of memory, sometimes Because multiple threads have access to the same section of memory, sometimes
there might be situations where two or more threads are trying to write to the there might be situations where two or more threads are trying to write to the
same resource at the same time or where the output is dependent on the sequence same resource at the same time or where the output is dependent on the sequence
or timing of certain events. This is called a `data race`_ or race condition. or timing of certain events. This is called a `data race`_ or race condition.
When this happens, the output will be garbled or you may encounter problems When this happens, the output will be garbled or you may encounter problems
which are difficult to debug. A good example is this `stackoverflow post`_. which are difficult to debug. A good example is this `stackoverflow post`_.
The way this can be avoided is by using a `Lock`_ that each thread needs to The way this can be avoided is by using a `Lock`_ that each thread needs to
acquire before writing to a shared resource. Locks can be acquired and released acquire before writing to a shared resource. Locks can be acquired and released
@@ -412,7 +412,7 @@ through either the contextmanager protocol (`with` statement), or by using
def monitor_website(some_website): def monitor_website(some_website):
""" """
Monitor a website and then if there are any changes, Monitor a website and then if there are any changes,
log them to disk. log them to disk.
""" """
while True: while True:
@@ -429,7 +429,7 @@ Here, we have a bunch of threads checking for changes on a list of sites and
whenever there are any changes, they attempt to write those changes to a file whenever there are any changes, they attempt to write those changes to a file
by calling `log(changes)`. When `log()` is called, it will wait to acquire by calling `log(changes)`. When `log()` is called, it will wait to acquire
the lock with `with file_lock:`. This ensures that at any one time, only one the lock with `with file_lock:`. This ensures that at any one time, only one
thread is writing to the file. thread is writing to the file.
Spawning Processes Spawning Processes
------------------ ------------------
+4 -4
View File
@@ -2,7 +2,7 @@
Web Applications & Frameworks Web Applications & Frameworks
============================= =============================
.. image:: https://farm3.staticflickr.com/2891/34309496175_b82d104282_k_d.jpg .. image:: /_static/photos/34309496175_b82d104282_k_d.jpg
As a powerful scripting language adapted to both fast prototyping As a powerful scripting language adapted to both fast prototyping
and bigger projects, Python is widely used in web application and bigger projects, Python is widely used in web application
@@ -99,7 +99,7 @@ to build RESTful API microservices that are fast and scalable.
It is a reliable, high-performance Python web framework for building large-scale It is a reliable, high-performance Python web framework for building large-scale
app backends and microservices. Falcon encourages the REST architectural style of app backends and microservices. Falcon encourages the REST architectural style of
mapping URIs to resources, trying to do as little as possible while remaining highly effective. mapping URIs to resources, trying to do as little as possible while remaining highly effective.
Falcon highlights four main focuses: speed, reliability, flexibility and debuggability. Falcon highlights four main focuses: speed, reliability, flexibility and debuggability.
It implements HTTP through "responders" such as ``on_get()``, ``on_put()``, etc. It implements HTTP through "responders" such as ``on_get()``, ``on_put()``, etc.
@@ -120,9 +120,9 @@ Pyramid
`Pyramid <https://trypyramid.com/>`_ is a very flexible framework with a heavy `Pyramid <https://trypyramid.com/>`_ is a very flexible framework with a heavy
focus on modularity. It comes with a small number of libraries ("batteries") focus on modularity. It comes with a small number of libraries ("batteries")
built-in, and encourages users to extend its base functionality. A set of built-in, and encourages users to extend its base functionality. A set of
provided cookiecutter templates helps making new project decisions for users. provided cookiecutter templates helps making new project decisions for users.
It poweres one of the most important parts of python infrastucture It poweres one of the most important parts of python infrastucture
`PyPI <http://pypi.org/>`_. `PyPI <http://pypi.org/>`_.
Pyramid does not have a large user base, unlike Django and Flask. It's a Pyramid does not have a large user base, unlike Django and Flask. It's a
+1 -1
View File
@@ -1,7 +1,7 @@
XML parsing XML parsing
=========== ===========
.. image:: https://farm3.staticflickr.com/2808/33888714601_a1f7d020a2_k_d.jpg .. image:: /_static/photos/33888714601_a1f7d020a2_k_d.jpg
untangle untangle
-------- --------
+20 -20
View File
@@ -4,27 +4,27 @@
Freezing Your Code Freezing Your Code
================== ==================
.. image:: https://farm5.staticflickr.com/4227/33907151034_e0a9e53402_k_d.jpg .. image:: /_static/photos/33907151034_e0a9e53402_k_d.jpg
"Freezing" your code is creating a single-file executable file to distribute "Freezing" your code is creating a single-file executable file to distribute
to end-users, that contains all of your application code as well as the to end-users, that contains all of your application code as well as the
Python interpreter. Python interpreter.
Applications such as 'Dropbox', 'Eve Online', 'Civilization IV', and Applications such as 'Dropbox', 'Eve Online', 'Civilization IV', and
BitTorrent clients do this. BitTorrent clients do this.
The advantage of distributing this way is that your application will "just work", The advantage of distributing this way is that your application will "just work",
even if the user doesn't already have the required version of Python (or any) even if the user doesn't already have the required version of Python (or any)
installed. On Windows, and even on many Linux distributions and OS X, the right installed. On Windows, and even on many Linux distributions and OS X, the right
version of Python will not already be installed. version of Python will not already be installed.
Besides, end-user software should always be in an executable format. Files Besides, end-user software should always be in an executable format. Files
ending in ``.py`` are for software engineers and system administrators. ending in ``.py`` are for software engineers and system administrators.
One disadvantage of freezing is that it will increase the size of your One disadvantage of freezing is that it will increase the size of your
distribution by about 212MB. Also, you will be responsible for shipping distribution by about 212MB. Also, you will be responsible for shipping
updated versions of your application when security vulnerabilities to updated versions of your application when security vulnerabilities to
Python are patched. Python are patched.
Alternatives to Freezing Alternatives to Freezing
------------------------ ------------------------
@@ -75,34 +75,34 @@ Prerequisite is to install :ref:`Python, Setuptools and pywin32 dependency on Wi
1. Install :code:`bbfreeze`: 1. Install :code:`bbfreeze`:
.. code-block:: console .. code-block:: console
$ pip install bbfreeze $ pip install bbfreeze
2. Write most basic :file:`bb_setup.py` 2. Write most basic :file:`bb_setup.py`
.. code-block:: python .. code-block:: python
from bbfreeze import Freezer from bbfreeze import Freezer
freezer = Freezer(distdir='dist') freezer = Freezer(distdir='dist')
freezer.addScript('foobar.py', gui_only=True) freezer.addScript('foobar.py', gui_only=True)
freezer() freezer()
.. note:: .. note::
This will work for the most basic one file scripts. For more advanced freezing you will have to provide This will work for the most basic one file scripts. For more advanced freezing you will have to provide
include and exclude paths like so include and exclude paths like so
.. code-block:: python .. code-block:: python
freezer = Freezer(distdir='dist', includes=['my_code'], excludes=['docs']) freezer = Freezer(distdir='dist', includes=['my_code'], excludes=['docs'])
3. (Optionally) include icon 3. (Optionally) include icon
.. code-block:: python .. code-block:: python
freezer.setIcon('my_awesome_icon.ico') freezer.setIcon('my_awesome_icon.ico')
4. Provide the Microsoft Visual C runtime DLL for the freezer. It might be possible to append your :code:`sys.path` 4. Provide the Microsoft Visual C runtime DLL for the freezer. It might be possible to append your :code:`sys.path`
with Microsoft Visual Studio path but I find it easier to drop :file:`msvcp90.dll` in the same folder where your script with Microsoft Visual Studio path but I find it easier to drop :file:`msvcp90.dll` in the same folder where your script
resides. resides.
@@ -110,7 +110,7 @@ resides.
5. Freeze! 5. Freeze!
.. code-block:: console .. code-block:: console
$ python bb_setup.py $ python bb_setup.py
py2exe py2exe
@@ -204,7 +204,7 @@ To create a standalone windowed OS X application, use the :code:`--windowed` opt
This creates a :code:`script.app` in the :code:`dist` folder. Make sure to use GUI packages in your Python code, like `PyQt <https://riverbankcomputing.com/software/pyqt/intro>`_ or `PySide <http://wiki.qt.io/About-PySide>`_, to control the graphical parts of the app. This creates a :code:`script.app` in the :code:`dist` folder. Make sure to use GUI packages in your Python code, like `PyQt <https://riverbankcomputing.com/software/pyqt/intro>`_ or `PySide <http://wiki.qt.io/About-PySide>`_, to control the graphical parts of the app.
There are several options in :code:`script.spec` related to Mac OS X app bundles `here <http://pythonhosted.org/PyInstaller/spec-files.html#spec-file-options-for-a-mac-os-x-bundle>`_. For example, to specify an icon for the app, use the :code:`icon=\path\to\icon.icns` option. There are several options in :code:`script.spec` related to Mac OS X app bundles `here <http://pythonhosted.org/PyInstaller/spec-files.html#spec-file-options-for-a-mac-os-x-bundle>`_. For example, to specify an icon for the app, use the :code:`icon=\path\to\icon.icns` option.
Linux Linux
+1 -1
View File
@@ -4,7 +4,7 @@
Packaging Your Code Packaging Your Code
=================== ===================
.. image:: https://farm5.staticflickr.com/4325/36137234682_be6898bf57_k_d.jpg .. image:: /_static/photos/36137234682_be6898bf57_k_d.jpg
Package your code to share it with other developers. For example Package your code to share it with other developers. For example
to share a library for other developers to use in their application, to share a library for other developers to use in their application,
+1 -1
View File
@@ -3,7 +3,7 @@
Installing Python 2 on Linux Installing Python 2 on Linux
============================= =============================
.. image:: https://farm5.staticflickr.com/4268/34435688560_4cc2a7bcbb_k_d.jpg .. image:: /_static/photos/34435688560_4cc2a7bcbb_k_d.jpg
.. note:: .. note::
Check out our :ref:`guide for installing Python 3 on Linux<install3-linux>`. Check out our :ref:`guide for installing Python 3 on Linux<install3-linux>`.
+1 -1
View File
@@ -3,7 +3,7 @@
Installing Python 2 on Mac OS X Installing Python 2 on Mac OS X
=============================== ===============================
.. image:: https://farm5.staticflickr.com/4268/34435688560_4cc2a7bcbb_k_d.jpg .. image:: /_static/photos/34435688560_4cc2a7bcbb_k_d.jpg
.. note:: .. note::
Check out our :ref:`guide for installing Python 3 on OS X<install3-osx>`. Check out our :ref:`guide for installing Python 3 on OS X<install3-osx>`.
+1 -1
View File
@@ -3,7 +3,7 @@
Installing Python 2 on Windows Installing Python 2 on Windows
============================== ==============================
.. image:: https://farm5.staticflickr.com/4268/34435688560_4cc2a7bcbb_k_d.jpg .. image:: /_static/photos/34435688560_4cc2a7bcbb_k_d.jpg
.. note:: .. note::
Check out our :ref:`guide for installing Python 3 on Windows<install3-windows>`. Check out our :ref:`guide for installing Python 3 on Windows<install3-windows>`.
+2 -2
View File
@@ -3,7 +3,7 @@
Installing Python 3 on Linux Installing Python 3 on Linux
============================ ============================
.. image:: https://farm5.staticflickr.com/4276/34435689480_2e6f358510_k_d.jpg .. image:: /_static/photos/34435689480_2e6f358510_k_d.jpg
This document describes how to install Python 3.6 on Ubuntu Linux machines. This document describes how to install Python 3.6 on Ubuntu Linux machines.
@@ -93,7 +93,7 @@ care about that.
Pipenv & Virtual Environments Pipenv & Virtual Environments
----------------------------- -----------------------------
The next step is to install Pipenv, so you can install dependencies and manage virtual environments. The next step is to install Pipenv, so you can install dependencies and manage virtual environments.
A Virtual Environment is a tool to keep the dependencies required by different projects A Virtual Environment is a tool to keep the dependencies required by different projects
in separate places, by creating virtual Python environments for them. It solves the in separate places, by creating virtual Python environments for them. It solves the
+3 -3
View File
@@ -5,7 +5,7 @@
Installing Python 3 on Mac OS X Installing Python 3 on Mac OS X
=============================== ===============================
.. image:: https://farm5.staticflickr.com/4276/34435689480_2e6f358510_k_d.jpg .. image:: /_static/photos/34435689480_2e6f358510_k_d.jpg
The latest version of Mac OS X, High Sierra, **comes with Python 2.7 out of the box**. The latest version of Mac OS X, High Sierra, **comes with Python 2.7 out of the box**.
@@ -106,13 +106,13 @@ The rest of the guide will assume that ``python`` references Python 3.
# Do I have a Python 3 installed? # Do I have a Python 3 installed?
$ python --version $ python --version
Python 3.6.4 # Success! Python 3.6.4 # Success!
# If you still see 2.7 ensure in PATH /usr/local/bin/ takes precedence over /usr/bin/ # If you still see 2.7 ensure in PATH /usr/local/bin/ takes precedence over /usr/bin/
Pipenv & Virtual Environments Pipenv & Virtual Environments
----------------------------- -----------------------------
The next step is to install Pipenv, so you can install dependencies and manage virtual environments. The next step is to install Pipenv, so you can install dependencies and manage virtual environments.
A Virtual Environment is a tool to keep the dependencies required by different projects A Virtual Environment is a tool to keep the dependencies required by different projects
in separate places, by creating virtual Python environments for them. It solves the in separate places, by creating virtual Python environments for them. It solves the
+1 -1
View File
@@ -3,7 +3,7 @@
Installing Python 3 on Windows Installing Python 3 on Windows
============================== ==============================
.. image:: https://farm5.staticflickr.com/4276/34435689480_2e6f358510_k_d.jpg .. image:: /_static/photos/34435689480_2e6f358510_k_d.jpg
First, follow the installation instructions for `Chocolatey <https://chocolatey.org/install>`_. First, follow the installation instructions for `Chocolatey <https://chocolatey.org/install>`_.
It's a community system packager manager for Windows 7+. (It's very much like Homebrew on OSX.) It's a community system packager manager for Windows 7+. (It's very much like Homebrew on OSX.)
+3 -3
View File
@@ -3,7 +3,7 @@
Properly Installing Python Properly Installing Python
========================== ==========================
.. image:: https://farm5.staticflickr.com/4303/36137232412_fdcb0f84eb_k_d.jpg .. image:: /_static/photos/36137232412_fdcb0f84eb_k_d.jpg
There's a good chance that you already have Python on your operating system. There's a good chance that you already have Python on your operating system.
@@ -16,8 +16,8 @@ other third-party Python libraries.
.. note:: The use of **Python 3** is *highly* preferred over Python 2. Consider upgrading your applications and infrastructure if you find yourself *still* using Python 2 in production today. If you are using Python 3, congratulations — you are indeed a person of excellent taste. .. note:: The use of **Python 3** is *highly* preferred over Python 2. Consider upgrading your applications and infrastructure if you find yourself *still* using Python 2 in production today. If you are using Python 3, congratulations — you are indeed a person of excellent taste.
*Kenneth Reitz* *Kenneth Reitz*
Installation Guides Installation Guides
------------------- -------------------
+1 -1
View File
@@ -1,7 +1,7 @@
Picking an Python Interpreter (3 vs. 2) Picking an Python Interpreter (3 vs. 2)
======================================= =======================================
.. image:: https://farm5.staticflickr.com/4265/34484834733_5b80f65ab1_k_d.jpg .. image:: /_static/photos/34484834733_5b80f65ab1_k_d.jpg
.. _which-python: .. _which-python:
+14 -14
View File
@@ -1,7 +1,7 @@
Documentation Documentation
============= =============
.. image:: https://farm5.staticflickr.com/4279/35620636012_f66aa88f93_k_d.jpg .. image:: /_static/photos/35620636012_f66aa88f93_k_d.jpg
Readability is a primary focus for Python developers, in both project Readability is a primary focus for Python developers, in both project
and code documentation. Following some simple best practices can save and code documentation. Following some simple best practices can save
@@ -67,10 +67,10 @@ There is also **great**, **free** hosting for your Sphinx_ docs:
your source repository so that rebuilding your documentation will your source repository so that rebuilding your documentation will
happen automatically. happen automatically.
When run, Sphinx_ will import your code and using Python's introspection When run, Sphinx_ will import your code and using Python's introspection
features it will extract all function, method and class signatures. It will features it will extract all function, method and class signatures. It will
also extract the accompanying docstrings, and compile it all into well also extract the accompanying docstrings, and compile it all into well
structured and easily readable documentation for your project. structured and easily readable documentation for your project.
.. note:: .. note::
@@ -146,7 +146,7 @@ their source code, and as a side effect, it also ensures that their code is
tested and works. tested and works.
:: ::
def my_function(a, b): def my_function(a, b):
""" """
>>> my_function(2, 3) >>> my_function(2, 3)
@@ -175,14 +175,14 @@ comment block is a programmer's note. The docstring describes the
Unlike block comments, docstrings are built into the Python language itself. Unlike block comments, docstrings are built into the Python language itself.
This means you can use all of Python's powerful introspection capabilities to This means you can use all of Python's powerful introspection capabilities to
access docstrings at runtime, compared with comments which are optimised out. access docstrings at runtime, compared with comments which are optimised out.
Docstrings are accessible from both the `__doc__` dunder attribute for almost Docstrings are accessible from both the `__doc__` dunder attribute for almost
every Python object, as well as with the built in `help()` function. every Python object, as well as with the built in `help()` function.
While block comments are usually used to explain *what* a section of code is While block comments are usually used to explain *what* a section of code is
doing, or the specifics of an algorithm, docstrings are more intended for doing, or the specifics of an algorithm, docstrings are more intended for
explaining to other users of your code (or you in 6 months time) *how* a explaining to other users of your code (or you in 6 months time) *how* a
particular function can be used and the general purpose of a function, class, particular function can be used and the general purpose of a function, class,
or module. or module.
Writing Docstrings Writing Docstrings
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
@@ -196,19 +196,19 @@ really obvious cases, such as::
return a + b return a + b
The docstring should describe the function in a way that is easy to understand. The docstring should describe the function in a way that is easy to understand.
For simple cases like trivial functions and classes, simply embedding the For simple cases like trivial functions and classes, simply embedding the
function's signature (i.e. `add(a, b) -> result`) in the docstring is function's signature (i.e. `add(a, b) -> result`) in the docstring is
unnecessary. This is because with Python's `inspect` module, it is already unnecessary. This is because with Python's `inspect` module, it is already
quite easy to find this information if needed, and it is also readily available quite easy to find this information if needed, and it is also readily available
by reading the source code. by reading the source code.
In larger or more complex projects however, it is often a good idea to give In larger or more complex projects however, it is often a good idea to give
more information about a function, what it does, any exceptions it may raise, more information about a function, what it does, any exceptions it may raise,
what it returns, or relevant details about the parameters. what it returns, or relevant details about the parameters.
For more detailed documentation of code a popular style is the one used for the For more detailed documentation of code a popular style is the one used for the
Numpy project, often called `Numpy style`_ docstrings. While it can take up more Numpy project, often called `Numpy style`_ docstrings. While it can take up more
lines than the previous example, it allows the developer to include a lot lines than the previous example, it allows the developer to include a lot
more information about a method, function, or class. :: more information about a method, function, or class. ::
def random_number_generator(arg1, arg2): def random_number_generator(arg1, arg2):
+1 -1
View File
@@ -1,7 +1,7 @@
Common Gotchas Common Gotchas
============== ==============
.. image:: https://farm5.staticflickr.com/4163/34435688380_b5a740762b_k_d.jpg .. image:: /_static/photos/34435688380_b5a740762b_k_d.jpg
For the most part, Python aims to be a clean and consistent language that For the most part, Python aims to be a clean and consistent language that
avoids surprises. However, there are a few cases that can be confusing to avoids surprises. However, there are a few cases that can be confusing to
+1 -1
View File
@@ -1,7 +1,7 @@
Choosing a License Choosing a License
================== ==================
.. image:: https://farm5.staticflickr.com/4228/33907149294_82d7535a6c_k_d.jpg .. image:: /_static/photos/33907149294_82d7535a6c_k_d.jpg
Your source publication *needs* a license. In the US, if no license is Your source publication *needs* a license. In the US, if no license is
specified, users have no legal right to download, modify, or distribute. specified, users have no legal right to download, modify, or distribute.
+9 -9
View File
@@ -1,7 +1,7 @@
Logging Logging
======= =======
.. image:: https://farm5.staticflickr.com/4246/35254379756_c9fe23f843_k_d.jpg .. image:: /_static/photos/35254379756_c9fe23f843_k_d.jpg
The :mod:`logging` module has been a part of Python's Standard Library since The :mod:`logging` module has been a part of Python's Standard Library since
version 2.3. It is succinctly described in :pep:`282`. The documentation version 2.3. It is succinctly described in :pep:`282`. The documentation
@@ -37,14 +37,14 @@ Other reasons why logging is better than ``print``:
Logging in a Library Logging in a Library
-------------------- --------------------
Notes for `configuring logging for a library`_ are in the Notes for `configuring logging for a library`_ are in the
`logging tutorial`_. Because the *user*, not the library, should `logging tutorial`_. Because the *user*, not the library, should
dictate what happens when a logging event occurs, one admonition bears dictate what happens when a logging event occurs, one admonition bears
repeating: repeating:
.. note:: .. note::
It is strongly advised that you do not add any handlers other than It is strongly advised that you do not add any handlers other than
NullHandler to your librarys loggers. NullHandler to your librarys loggers.
Best practice when instantiating loggers in a library is to only create them Best practice when instantiating loggers in a library is to only create them
@@ -100,23 +100,23 @@ section of the `logging tutorial`_.
[loggers] [loggers]
keys=root keys=root
[handlers] [handlers]
keys=stream_handler keys=stream_handler
[formatters] [formatters]
keys=formatter keys=formatter
[logger_root] [logger_root]
level=DEBUG level=DEBUG
handlers=stream_handler handlers=stream_handler
[handler_stream_handler] [handler_stream_handler]
class=StreamHandler class=StreamHandler
level=DEBUG level=DEBUG
formatter=formatter formatter=formatter
args=(sys.stderr,) args=(sys.stderr,)
[formatter_formatter] [formatter_formatter]
format=%(asctime)s %(name)-12s %(levelname)-8s %(message)s format=%(asctime)s %(name)-12s %(levelname)-8s %(message)s
@@ -131,7 +131,7 @@ Then use :meth:`logging.config.fileConfig` in the code:
fileConfig('logging_config.ini') fileConfig('logging_config.ini')
logger = logging.getLogger() logger = logging.getLogger()
logger.debug('often makes a very good meal of %s', 'visiting tourists') logger.debug('often makes a very good meal of %s', 'visiting tourists')
Example Configuration via a Dictionary Example Configuration via a Dictionary
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+1 -1
View File
@@ -1,7 +1,7 @@
Reading Great Code Reading Great Code
================== ==================
.. image:: https://farm5.staticflickr.com/4221/34689452831_93d7fd0571_k_d.jpg .. image:: /_static/photos/34689452831_93d7fd0571_k_d.jpg
One of the core tenets behind the design of Python is creating One of the core tenets behind the design of Python is creating
readable code. The motivation behind this design is simple: The number readable code. The motivation behind this design is simple: The number
+7 -7
View File
@@ -1,7 +1,7 @@
Structuring Your Project Structuring Your Project
======================== ========================
.. image:: https://farm5.staticflickr.com/4203/33907151224_0574e7dfc2_k_d.jpg .. image:: /_static/photos/33907151224_0574e7dfc2_k_d.jpg
By "structure" we mean the decisions you make concerning By "structure" we mean the decisions you make concerning
how your project best meets its objective. We need to consider how to how your project best meets its objective. We need to consider how to
@@ -395,9 +395,9 @@ folder named :file:`my` which is not the case. There is an
dot notation should be used in the Python docs. dot notation should be used in the Python docs.
If you'd like you could name your module :file:`my_spam.py`, but even our If you'd like you could name your module :file:`my_spam.py`, but even our
friend the underscore should not be seen often in module names. However, using other friend the underscore should not be seen often in module names. However, using other
characters (spaces or hyphens) in module names will prevent importing characters (spaces or hyphens) in module names will prevent importing
(- is the subtract operator), so try to keep module names short so there is (- is the subtract operator), so try to keep module names short so there is
no need to separate words. And, most of all, don't namespace with underscores, use submodules instead. no need to separate words. And, most of all, don't namespace with underscores, use submodules instead.
.. code-block:: python .. code-block:: python
@@ -799,7 +799,7 @@ its parts, it is much more efficient to accumulate the parts in a list,
which is mutable, and then glue ('join') the parts together when the which is mutable, and then glue ('join') the parts together when the
full string is needed. One thing to notice, however, is that list full string is needed. One thing to notice, however, is that list
comprehensions are better and faster than constructing a list in a loop comprehensions are better and faster than constructing a list in a loop
with calls to ``append()``. with calls to ``append()``.
One other option is using the map function, which can 'map' a function One other option is using the map function, which can 'map' a function
('str') to an iterable ('range(20)'). This results in a map object, ('str') to an iterable ('range(20)'). This results in a map object,
@@ -833,14 +833,14 @@ The map function can be even faster than a list comprehension in some cases.
# create a concatenated string from 0 to 19 (e.g. "012..1819") # create a concatenated string from 0 to 19 (e.g. "012..1819")
nums = [str(n) for n in range(20)] nums = [str(n) for n in range(20)]
print "".join(nums) print "".join(nums)
**Best** **Best**
.. code-block:: python .. code-block:: python
# create a concatenated string from 0 to 19 (e.g. "012..1819") # create a concatenated string from 0 to 19 (e.g. "012..1819")
nums = map(str, range(20)) nums = map(str, range(20))
print "".join(nums) print "".join(nums)
One final thing to mention about strings is that using ``join()`` is not always One final thing to mention about strings is that using ``join()`` is not always
best. In the instances where you are creating a new string from a pre-determined best. In the instances where you are creating a new string from a pre-determined
+1 -1
View File
@@ -3,7 +3,7 @@
Code Style Code Style
========== ==========
.. image:: https://farm5.staticflickr.com/4223/33907150054_5ee79e8940_k_d.jpg .. image:: /_static/photos/33907150054_5ee79e8940_k_d.jpg
If you ask Python programmers what they like most about Python, they will If you ask Python programmers what they like most about Python, they will
often cite its high readability. Indeed, a high level of readability often cite its high readability. Indeed, a high level of readability
+7 -7
View File
@@ -1,11 +1,11 @@
Testing Your Code Testing Your Code
================= =================
.. image:: https://farm5.staticflickr.com/4166/34435687940_8f73fc1fa6_k_d.jpg .. image:: /_static/photos/34435687940_8f73fc1fa6_k_d.jpg
Testing your code is very important. Testing your code is very important.
Getting used to writing testing code and running this code in parallel is now Getting used to writing testing code and running this code in parallel is now
considered a good habit. Used wisely, this method helps you define more considered a good habit. Used wisely, this method helps you define more
precisely your code's intent and have a more decoupled architecture. precisely your code's intent and have a more decoupled architecture.
@@ -29,7 +29,7 @@ Some general rules of testing:
tests as often as needed. tests as often as needed.
- Learn your tools and learn how to run a single test or a test case. Then, - Learn your tools and learn how to run a single test or a test case. Then,
when developing a function inside a module, run this function's tests when developing a function inside a module, run this function's tests
frequently, ideally automatically when you save the code. frequently, ideally automatically when you save the code.
- Always run the full test suite before a coding session, and run it again - Always run the full test suite before a coding session, and run it again
@@ -65,10 +65,10 @@ Some general rules of testing:
- Another use of the testing code is as an introduction to new developers. When - Another use of the testing code is as an introduction to new developers. When
someone will have to work on the code base, running and reading the related someone will have to work on the code base, running and reading the related
testing code is often the best thing that they can do to start. They will testing code is often the best thing that they can do to start. They will
or should discover the hot spots, where most difficulties arise, and the or should discover the hot spots, where most difficulties arise, and the
corner cases. If they have to add some functionality, the first step should corner cases. If they have to add some functionality, the first step should
be to add a test to ensure that the new functionality is not already a be to add a test to ensure that the new functionality is not already a
working path that has not been plugged into the interface. working path that has not been plugged into the interface.
The Basics The Basics