1000 Python Examples
$7.99
Minimum price
$9.99
Suggested price

1000 Python Examples

About the Book

About the Author

Gábor Szabó
Gábor Szabó

Gabor Szabo has been programming for more than 30 years in a number of languages and in various environments. He used to do DevOps before there was a name for it.

These days he usually helps companies improve their engineering practices by providing training, introducing test automation, CI, CD. Sometimes this includes building internal web sites. Gabor also loves explaining things and provides training to his clients.

He also has a number of websites. Each one using a different technology.

Gabor runs the Code Maven site where he write about lots of different technologies such as Python, Golang, Jenkins, Continuous Integration, etc.

Gabor has been writing Perl since 1995 and teaching it since 2000. He is the author of the Perl Maven site including the Perl Tutorial. He has taught web development with Perl Dancer many time including at Perl Conferences in Europe and USA. Gabor is the chief editor of the Perl Weekly newsletter.

The Code And Talk and Pydigger sites use Python Flask.

Table of Contents

  • Fixtures and Mocking in Python
    • How do you test Moon-landing?
    • How do you test a system …
    • Plan
    • About me
    • Goal
    • Fixtures
    • Fixtuers in Pytest
    • Traditional xUnit fixtures
    • Dependency Injection
    • Temporary directory - tmpdir
    • Capture STDOUT and STDERR - capsys
    • Home-made fixture
    • Home-made fixture - conftest
    • Home-made fixture with tempdir
    • Home-made fixture with yield
    • Fixture Autouse
    • Fixture Autouse with yield
    • Fixture for MongoDB
    • Test Doubles
    • Test Doubles explained
    • Verify behavior or state?
    • What is Mocking and Monkey Patching?
    • Situations
    • Unit testing vs. Integration testing
    • Experiment with mocking in various situations
    • Examples are simple
    • Hard coded path
    • Manually Patching attribute
    • Monkey Patching attribute
    • Monkey Patching functions
    • Monkey Patching dictionary items
    • Mocking a whole class
    • Mocking input/output
    • Mocking input/output
    • Mocking random numbers
    • Exercises
    • Work in pairs
    • Exercise: test login expiration
    • Solution: test login expiration
    • Exercise: Record e-mail sending
    • Solution: Record e-mail sending
    • Exercise: Fixture database
    • Exercise: One Dimentsional space-fight
    • Exercise: web client
    • Exercise: Open WeatherMap client
    • Exercise: Mocking A Bank
    • Testing the whole application
    • Resources
    • Retrospective
    • Job searching help
    • Solutions - game
    • Solutions - Mocking the database access
  • First steps
    • What is Python?
    • What is needed to write a program?
    • The source (code) of Python
    • Python 2 vs. Python 3
    • Installation
    • Installation on Linux
    • Installation on Apple Mac OSX
    • Installation on MS Windows
    • Editors, IDEs
    • Documentation
    • Program types
    • Python on the command line
    • First script - hello world
    • Examples
    • Comments
    • Variables
    • Exercise: Hello world
    • What is programming?
    • What are the programming languages
    • A written human language
    • A programming language
    • Words and punctuation matter!
    • Literals, Value Types in Python
    • Floating point limitation
    • Value Types in Numpy
    • Rectangle (numerical operations)
    • Multiply string
    • Add numbers
    • Add strings
    • Exercise: Calculations
    • Solution: Calculations
  • Second steps
    • Modules
    • A main function
    • The main function - called
    • Indentation
    • Conditional main
    • Input - Output I/O
    • print in Python 2
    • print in Python 3
    • print in Python 2 as if it was Python 3
    • Exception: SyntaxError: Missing parentheses in call
    • Prompting for user input in Python 2
    • Prompting for user input in Python 3
    • Python2 input or raw_input?
    • Prompting both Python 2 and Python 3
    • Add numbers entered by the user (oups)
    • Add numbers entered by the user (fixed)
    • How can I check if a string can be converted to a number?
    • Converting string to int
    • Converting float to int
    • Conditionals: if
    • Conditionals: if - else
    • Divide by 0
    • Conditionals: if - else (other example)
    • Conditionals: else if
    • Conditionals: elif
    • Ternary operator (Conditional Operator)
    • Case or Switch in Python
    • Exercise: Rectangle
    • Exercise: Calculator
    • Exercise: Age limit
    • Exercise: What is this language?
    • Exercise: Standard Input
    • Solution: Area of rectangle
    • Solution: Calculator
    • Solution: Calculator eval
    • Solution: Age limit
    • Solution: What is this language?
    • Command line arguments
    • Command line arguments - len
    • Command line arguments - exit
    • Exercise: Rectangle (argv)
    • Exercise: Calculator (argv)
    • Solution: Area of rectangle (argv)
    • Solution: Calculator (argv)
    • Solution: Calculator eval
    • Compilation vs. Interpretation
    • Is Python compiled or interpreted?
    • Flake8 checking
    • Pylint checking
  • Numbers
    • Numbers
    • Operators for Numbers
    • Integer division and the future
    • Pseudo Random Number (unform distribution)
    • Fixed random numbers
    • Rolling dice - randrange
    • Random choice
    • built-in method
    • Exception: TypeError: ‘module’ object is not callable
    • Fixing the previous code
    • Exception: AttributeError: module ‘random’ has no attribute
    • Exercise: Number guessing game - level 0
    • Exercise: Fruit salad
    • Solution: Number guessing game - level 0
    • Solution: Fruit salad
  • Comparison and Boolean
    • if statement again
    • Comparison operators
    • Compare numbers, compare strings
    • Do NOT Compare different types!
    • Complex if statement with boolean operators
    • Boolean operators
    • Boolean truth tables
    • Boolean values: True and False
    • Using True and False in variables
    • Comparison returns True or False
    • Assign comparisons to variables
    • Flag
    • Toggle
    • Short circuit
    • Short circuit fixed
    • Does this value count as True or False?
    • True and False values in Python
    • Incorrect use of conditions
    • Exercise: compare numbers
    • Exercise: compare strings
    • Solution: compare numbers
    • Solution: compare strings
  • Strings
    • Single quoted and double quoted strings
    • Long lines
    • Triple quoted strings (multiline)
    • String length (len)
    • String repetition and concatenation
    • A character in a string
    • String slice (instead of substr)
    • Change a string
    • How to change a string
    • String copy
    • String functions and methods (len, upper, lower)
    • index in string
    • index in string with range
    • rindex in string with range
    • find in string
    • Find all in the string
    • in string
    • index if in string
    • Encodings: ASCII, Windows-1255, Unicode
    • raw strings
    • ord
    • ord in a file
    • chr - number to character
    • Exercise: one string in another string
    • Exercise: to ASCII CLI
    • Exercise: from ASCII CLI
    • Solution: one string in another string
    • Solution: compare strings
    • Solution: to ASCII CLI
    • Solution: from ASCII CLI
  • Loops
    • Loops: for-in and while
    • for-in loop on strings
    • for-in loop on list
    • for-in loop on range
    • Iterable, iterator
    • for in loop with early end using break
    • for in loop skipping parts using continue
    • for in loop with break and continue
    • while loop
    • Infinite while loop
    • While with complex expression
    • While with break
    • While True
    • Duplicate input call
    • Eliminate duplicate input call
    • do while loop
    • while with many continue calls
    • Break out from multi-level loops
    • Exit vs return vs break and continue
    • Exercise: Print all the locations in a string
    • Exercise: Number guessing game
    • Exercise: Count unique characters
    • Exercise: Convert for-loop to while-loop
    • Solution: Print all the locations in a string
    • Solution 1 for Number Guessing
    • Solution 2 for Number Guessing (x)
    • Solution 3 for Number Guessing (s)
    • Solution for Number Guessing (debug)
    • Solution for Number Guessing (move)
    • Solution for Number Guessing (multi-game)
    • Solution: Count unique characters
    • Solution: Convert for-loop to while-loop
  • Formatted printing
    • format - sprintf
    • Examples using format - indexing
    • Examples using format with names
    • Format columns
    • Examples using format - alignment
    • Format - string
    • Format characters and types
    • Format floating point number
    • f-strings (formatted string literals)
    • printf using old %-syntax
    • Format braces, bracket, and parentheses
    • Examples using format with attributes of objects
    • raw f-strings
  • Lists
    • Anything can be a list
    • Any layout
    • Lists
    • List slice with steps
    • Change a List
    • Change with steps
    • List assignment and list copy
    • Shallow vs. Deep copy of lists
    • join
    • join list of numbers
    • split
    • for loop on lists
    • in list
    • Where is the element in the list
    • Index improved
    • [].insert
    • [].append
    • [].remove
    • Remove element by index [].pop
    • Remove first element of list
    • Remove several elements of list by index
    • Use list as a queue
    • Queue using deque from collections
    • Fixed size queue
    • List as a stack
    • stack with deque
    • Exercies: Queue
    • Exercise: Stack
    • Exercise: MasterMind
    • Solution: Queue with list
    • Solution: Queue with deque
    • Solution: Reverse Polish calculator (stack) with lists
    • Solution: Reverse Polish calculator (stack) with deque
    • Solution: MasterMind
    • MasterMind to debug
    • Debugging Queue
    • sort
    • sort numbers
    • sort mixed
    • key sort
    • sort with sorted
    • sort vs. sorted
    • key sort with sorted
    • Sorting characters of a string
    • range
    • Looping over index
    • Enumerate lists
    • List operators
    • List of lists
    • List assignment
    • List documentation
    • tuple
    • Sort tuples
    • Exercise: color selector menu
    • Exercise: count digits
    • Exercise: Create list
    • Exercise: Count words
    • Exercise: Check if number is prime
    • Exercise: DNA sequencing
    • Solution: menu
    • Solution: count digits
    • Solution: Create list
    • Solution: Count words
    • Solution: Check if number is prime
    • Solution: DNA sequencing
    • Solution: DNA sequencing with filter
    • Solution: DNA sequencing with filter and lambda
    • [].extend
    • append vs. extend
    • split and extend
  • Files
    • File types: Text vs Binary
    • Open vs. Read vs. Load
    • Binary files: Images
    • Reading an Excel file
    • Open and read file (easy but not recommended)
    • Open and read file using with (recommended)
    • Read file remove newlines
    • Filename on the command line
    • Filehandle with return
    • Read all the lines into a list
    • Read all the characters into a string (slurp)
    • Not existing file
    • Open file exception handling
    • Open many files - exception handling
    • Writing to file
    • Append to file
    • Binary mode
    • Does file exist? Is it a file?
    • Direct access of a line in a file
    • Exercise: count numbers
    • Exercise: strip newlines
    • Exercise: print lines with Report:
    • Exercise: color selector
    • Exercise: ROT13
    • Exercise: Combine lists
    • Solution: count numbers
    • Solution: strip newlines
    • Solution: print lines with Report:
    • Solution: color selector
    • Solution: Combine lists
    • Filehandle using with and not using it
  • Dictionary (hash)
    • What is a dictionary
    • When to use dictionaries
    • Dictionary
    • keys
    • Loop over keys
    • Loop over dictionary keys
    • Loop using items
    • values
    • Not existing key
    • Get key
    • Does the key exist?
    • Does the value exist?
    • Delete key
    • List of dictionaries
    • Shared dictionary
    • immutable collection: tuple as dictionary key
    • immutable numbers: numbers as dictionary key
    • Sort dictionary by value
    • Sort dictionary keys by value
    • Insertion Order is kept
    • Change order of keys in dictionary - OrderedDict
    • Set order of keys in dictionary - OrderedDict
    • Exercise: count characters
    • Exercise: count words
    • Exercise: count words from a file
    • Exercise: Apache log
    • Exercise: Combine lists again
    • Exercise: counting DNA bases
    • Exercise: Count Amino Acids
    • Exercise: List of dictionaries
    • Exercise: Dictinoary of dictionaries
    • Exercise: Age limit with dictionaries
    • Solution: count characters
    • Default Dict
    • Solution: count characters with default dict
    • Solution: count words
    • Solution: count words in file
    • Solution: Apache log
    • Solution: Combine lists again
    • Solution: counting DNA bases
    • Solution: Count Amino Acids
    • Do not change dictionary in loop
  • Sets
    • sets
    • set operations
    • Creating a set
    • Creating an empty set
    • Adding an element to a set (add)
    • Merging one set into another set (update)
    • set intersection
    • set subset
    • set symmetric difference
    • set union
    • set relative complement
  • Functions (subroutines)
    • Why use functions?
    • Defining simple function
    • Passing positional parameters to a function
    • Function parameters can be named
    • Mixing positional and named parameters
    • Default values, optional parameters, optional parameters
    • Default value in first param
    • Several defaults, using names
    • Arbitrary number of arguments *
    • Fixed parmeters before the others
    • Arbitrary key-value pairs in parameters **
    • Extra key-value pairs in parameters
    • Every parameter option
    • Duplicate declaration of functions (multiple signatures)
    • Pylint duplicate declaration
    • Return more than one value
    • Recursive factorial
    • Recursive Fibonacci
    • Non-recursive Fibonacci
    • Unbound recursion
    • Variable assignment and change - Immutable
    • Variable assignment and change - Mutable
    • Parameter passing of functions
    • Passing references
    • Function documentation
    • Sum ARGV
    • Copy-paste code
    • Copy-paste code fixed
    • Copy-paste code further improvement
    • Palindrome
    • Exercise: statistics
    • Exercise: recursive
    • Exercise: Tower of Hanoi
    • Exercise: Merge and Bubble sort
    • Exercise: Refactor previous solutions to use functions
    • Solution: statistics
    • Solution: recursive
    • Solution: Tower of Hanoi
    • Solution: Merge and Bubble sort
  • Modules
    • Before modules
    • Create modules
    • path to load modules from - The module search path
    • sys.path - the module search path
    • Flat project directory structure
    • Absolute path
    • Relative path
    • Python modules are compiled
    • How “import” and “from” work?
    • Runtime loading of modules
    • Conditional loading of modules
    • Duplicate importing of functions
    • Script or library
    • Script or library - import
    • Script or library - from import
    • assert to verify values
    • mycalc as a self testing module
    • doctest
    • Scope of import
    • Export import
    • Export import with all
    • import module
    • Execute at import time
    • Import multiple times
    • Exercise: Number guessing
    • Exercies: Scripts and modules
    • Exercise: Module my_sum
    • Exercise: Convert your script to module
    • Exercise: Add doctests to your own code
    • Solution: Module my_sum
  • Regular Expressions
    • What are Regular Expressions (aka. Regexes)?
    • What are Regular Expressions good for?
    • Examples
    • Where can I use it ?
    • grep
    • Regexes first match
    • Match numbers
    • Capture
    • Capture more
    • Capture even more
    • findall
    • findall with capture
    • findall with capture more than one
    • Any Character
    • Match dot
    • Character classes
    • Common characer classes
    • Negated character class
    • Optional character
    • Regex 0 or more quantifier
    • Quantifiers
    • Quantifiers limit
    • Quantifiers on character classes
    • Greedy quantifiers
    • Minimal quantifiers
    • Anchors
    • Anchors on both end
    • Match ISBN numbers
    • Matching a section
    • Matching a section - minimal
    • Matching a section negated character class
    • DOTALL S (single line)
    • MULTILINE M
    • Two regex with logical or
    • Alternatives
    • Grouping and Alternatives
    • Internal variables
    • More internal variables
    • Regex DNA
    • Regex IGNORECASE
    • Regex VERBOSE X
    • Substitution
    • findall capture
    • Fixing dates
    • Duplicate numbers
    • Remove spaces
    • Replace string in assembly code
    • Full example of previous
    • Split with regex
    • Exercises: Regexes part 1
    • Exercise: Regexes part 2
    • Exercise: Sort SNMP numbers
    • Exercise: parse hours log file and give report
    • Exercise: Parse ini file
    • Exercise: Replace Python
    • Exercise: Extract phone numbers
    • Solution: Sort SNMP numbers
    • Solution: parse hours log file and give report
    • Solution: Processing INI file manually
    • Solution: Processing config file
    • Solution: Extract phone numbers
    • Regular Expressions Cheat sheet
    • Fix bad JSON
    • Fix very bad JSON
    • Raw string or escape
    • Remove spaces regex
    • Regex Unicode
    • Anchors Other example
  • PyCharm
    • PyCharm Intro
    • PyCharm configurations
    • PyCharm Project
    • PyCharm Files
    • PyCharm - run code
    • PyCharm Python console at the bottom left
    • Refactoring example with PyCharm
  • Python standard modules
    • Some Standard modules
    • sys
    • Writing to standard error (stderr)
    • Current directory (getcwd, pwd, chdir)
    • OS dir (mkdir, makedirs, remove, rmdir)
    • python which OS are we running on (os, platform)
    • Get process ID
    • OS path
    • Traverse directory tree - list directories recursively
    • os.path.join
    • Directory listing
    • expanduser - handle tilde ~
    • Listing specific files using glob
    • External command with system
    • subprocess
    • subprocess in the background
    • Accessing the system environment variables from Python
    • Set env and run command
    • shutil
    • time
    • sleep in Python
    • timer
    • Current date and time datetime now
    • Converting string to datetime
    • datetime arithmeticis
    • Rounding datetime object to nearest second
    • Signals and Python
    • Sending Signal
    • Catching Signal
    • Catching Ctrl-C on Unix
    • Catching Ctrl-C on Unix confirm
    • Alarm signal and timeouts
    • deep copy list
    • deep copy dictionary
    • Exercise: Catching Ctrl-C on Unix 2nd time
    • Exercise: Signals
    • Ctrl-z
  • JSON
    • JSON - JavaScript Object Notation
    • dumps
    • loads
    • dump
    • load
    • Round trip
    • Pretty print JSON
    • Sort keys in JSON
    • Set order of keys in JSON - OrderedDict
    • Exercise: Counter in JSON
    • Exercise: Phone book
    • Exercise: Processes
    • Solution: Counter in JSON
    • Solution: Phone book
  • Command line arguments with argparse
    • Modules to handle the command line
    • argparse
    • Basic usage of argparse
    • Positional argument
    • Many positional argument
    • Convert to integers
    • Convert to integer
    • Named arguments
    • Boolean Flags
    • Short names
    • Exercise: Command line parameters
    • Exercise: argparse positional and named
    • argparse print help explicitely
    • Argparse xor - mutual exlucise - only one - exactly one
  • Exception handling
    • Hierarchy of calls
    • Handling errors as return values
    • Handling errors as exceptions
    • A simple exception
    • Working on a list
    • Catch ZeroDivisionError exception
    • Module to open files and calculate something
    • File for exception handling example
    • Open files - exception
    • Handle divide by zero exception
    • Handle files - exception
    • Catch all the exceptions and show their type
    • List exception types
    • Exceptions
    • How to raise an exception
    • Stack trace
    • Exercies: Exception int conversion
    • Exercies: Raise Exception
    • Solution: Exception int conversion (specific)
    • Solution: Exception int conversion (all other)
    • Solution: Raise Exception
  • Classes - OOP - Object Oriented Programming
    • Why Object Oriented Programming?
    • Generic Object Oriented Programming terms
    • OOP in Python
    • OOP in Python (numbers, strings, lists)
    • OOP in Python (argparse)
    • Create a class
    • Import module containing class
    • Import class from module
    • Initialize a class - constructor, attributes
    • Attributes are not special
    • Create Point class
    • Initialize a class - constructor, attributes
    • Methods
    • Stringify class
    • Inheritance
    • Inheritance - another level
    • Modes of method inheritance
    • Modes of method inheritance - implicit
    • Modes of method inheritance - override
    • Modes of method inheritance - extend
    • Modes of method inheritance - delegate - provide
    • Composition - Line
    • Some comments
    • Class in function
    • Serialization of instances with pickle
    • Quick Class definition and usage
    • Exercise: Add move_rad to based on radians
    • Exercise: Improve previous examples
    • Exercise: Polygon
    • Exercise: Number
    • Exercise: Library
    • Exercise: Bookexchange
    • Exercise: Represent turtle graphics
    • Solution - Polygon
  • PyPi - Python Package Index
    • What is PyPi?
    • Easy Install
    • pip
    • Upgrade pip
    • PYTHONPATH
    • Virtualenv
    • Virtualenv for Python 3
  • SQLite Database Access
    • SQLite
    • Connecting to SQLite database
    • Create TABLE in SQLite
    • INSERT data into SQLite database
    • SELECT data from SQLite database
    • A counter
  • MySQL
    • Install MySQL support
    • Create database user (manually)
    • Create database (manually)
    • Create table (manually)
    • Connect to MySQL
    • Connect to MySQL and Handle exception
    • Select data
    • Select more data
    • Select all data fetchall
    • Select some data fetchmany
    • Select some data WHERE clause
    • Select into dictionaries
    • Insert data
    • Update data
    • Delete data
    • Exercise MySQL
    • Exercise: MySQL Connection
    • Solution: MySQL Connection
  • PostgreSQL
    • PostgreSQL install
    • Python and Postgresql
    • PostgreSQL connect
    • INSERT
    • INSERT (from command line)
    • SELECT
    • DELETE
  • SQLAlchemy
    • SQLAlchemy hierarchy
    • SQLAlchemy engine
    • SQLAlchemy autocommit
    • SQLAlchemy engine CREATE TABLE
    • SQLAlchemy engine INSERT
    • SQLAlchemy engine SELECT
    • SQLAlchemy engine SELECT all
    • SQLAlchemy engine SELECT fetchall
    • SQLAlchemy engine SELECT aggregate
    • SQLAlchemy engine SELECT IN
    • SQLAlchemy engine SELECT IN with placeholders
    • SQLAlchemy engine connection
    • SQLAlchemy engine transaction
    • SQLAlchemy engine using context managers
    • Exercise: Create table
    • SQLAlchemy Metada
    • SQLAlchemy types
    • SQLAlchemy ORM - Object Relational Mapping
    • SQLAlchemy ORM create
    • SQLAlchemy ORM schema
    • SQLAlchemy ORM reflection
    • SQLAlchemy ORM INSERT after automap
    • SQLAlchemy ORM INSERT
    • SQLAlchemy ORM SELECT
    • SQLAlchemy ORM SELECT cross tables
    • SQLAlchemy ORM SELECT and INSERT
    • SQLAlchemy ORM UPDATE
    • SQLAlchemy ORM logging
    • Solution: Create table
    • Exercise: Inspector
    • SQLAlchemy CREATE and DROP
    • SQLAlchemy Notes
    • SQLAlchemy Meta SQLite CREATE
    • SQLAlchemy Meta Reflection
    • SQLAlchemy Meta INSERT
    • SQLAlchemy Meta SELECT
  • NoSQL
    • Types of NoSQL databases
  • MongoDB
    • MongoDB CRUD
    • Install MongoDB support
    • Python MongoDB insert
    • MongoDB CLI
    • Python MongoDB find
    • Python MongoDB find refine
    • Python MongoDB update
    • Python MongoDB remove (delete)
    • Python MongoDB replace
    • Python MongoDB upsert
    • Python Mongodb: TypeError: upsert must be True or False
  • Redis
    • Redis CLI
    • Redis list keys
    • Redis set get
    • Redis incr
    • Redis incrby
    • Redis setex
  • Web client
    • urllib the web client
    • urllib2 the web client
    • httpbin.org
    • requests get
    • Download image using requests
    • Download image as a stream using requests
    • Download zip file
    • Extract zip file
    • Interactive Requests
    • requests get JSON
    • requests get JSON UserAgent
    • requests get JSON UserAgent
    • requests get header
    • requests change header
    • requests post
    • Tweet
    • API config file
    • bit.ly
    • Exercise: Combine web server and client
  • Python Web server
    • Hello world web
    • Dump web environment info
    • Web echo
    • Web form
    • Resources
  • Python Flask
    • Python Flask intro
    • Python Flask installation
    • Flask: Hello World
    • Flask: Run Hello World
    • Flask: testing hello world
    • Flask generated page - time
    • Flask generated page - time tested
    • Flask: Echo GET
    • Flask: Echo POST
    • Flask: templates
    • Flask: templates
    • Flask: templates with parameters
    • Flask: runner
    • Exercise: Flask calculator
    • Static files
    • Flask Logging
    • Flask: Counter
    • Color selector without session
    • Session management
    • Flask custom 404 page
    • Flask Error page
    • Flask URL routing
    • Flask Path params
    • Flask Path params (int)
    • Flask Path params add (int)
    • Flask Path params add (path)
    • Jinja loop, conditional, include
    • Exercise: Flask persistent
    • Exercise: Flask persistent
    • Flask Exercises
    • Flask login
    • Flask JSON API
    • Flask and AJAX
    • Flask and AJAX
    • passlib
    • Flask Testing
    • Flask Deploy app
    • Flask Simple Authentication + test
    • Flask REST API
    • Flask REST API - Echo
    • Flask REST API - parameters in path
    • Flask REST API - parameter parsing
    • Flask REST API - parameter parsing - required
  • Networking
    • Secure shell
    • ssh
    • ssh from Windows
    • Parallel ssh
    • telnet
    • prompt for password
    • Python nmap
    • ftp
  • Interactive shell
    • The Python interactive shell
    • REPL - Read Evaluate Print Loop
    • Using Modules
    • Getting help
    • Exercise: Interactive shell
  • Testing Demo
    • How do you test your code?
    • What is testing?
    • What is testing really?
    • Testing demo tools
    • Testing demo methodology
    • Testing demo - AUT - Application Under Test
    • Testing demo - use the module
    • Testing demo: doctest
    • Testing demo: doctest with failure
    • Testing demo: Unittest success
    • Testing demo: Unittest failure
    • Testing demo: pytest using classes
    • Testing demo: pytest using classes - failure
    • Testing demo: pytest without classes
    • Testing demo: pytest run doctests
    • Testing demo: pytest run unittest
    • Exercise: Testing demo
    • Solution: Testing demo
  • Types in Python
    • mypy
    • Types of variables
    • Types of function parameters
    • Types used properly
    • TODO: mypy
  • Testing Intro
    • The software testing equasion
    • The software testing equasion (fixed)
    • The pieces of your software?
    • Manual testing
    • What to tests?
    • Continuous Integration
  • Functional programming
    • Functional programming
    • Iterators (Iterables)
    • range
    • range with list
    • range vs. list size
    • for loop with transformation
    • map
    • map delaying function call
    • map on many values
    • map with list
    • double with lambda
    • What is lambda in Python?
    • lambda returning tuple
    • map returning tuples
    • lambda with two parameters
    • map for more than one iterable
    • map on uneven lists
    • replace None (for Python 2)
    • map on uneven lists - fixed (for Python 2)
    • map mixed iterators
    • map fetch value from dict
    • Exercise: string to length
    • Exercise: row to length
    • Exercise: compare rows
    • Solution: string to length
    • Solution: row to length
    • Solution: compare rows
    • filter
    • filter with lambda
    • filter - map example
    • filter - map in one expression
    • Get indexes of values
    • reduce
    • reduce with default
    • zip
    • Creating dictionary from two lists using zip
    • all, any
    • Compare elements of list with scalar
    • List comprehension - double
    • List comprehension - simple expression
    • List generator
    • List comprehension
    • Dict comprehension
    • Lookup table with lambda
    • Read lines without newlines
    • Read key-value pairs
    • Create index-to-value mapping in a dictionary based on a list of values
    • Exercise: min, max, factorial
    • Exercise: Prime numbers
    • Exercise: Many validator functions
    • Exercise: Calculator using lookup table
    • Exercise: parse file
    • Solution: min, max, factorial
    • Solution: Prime numbers
    • Solution: Many validator functions
    • Solution: Calculator using lookup table
    • map with condtion
    • map with lambda
    • map with lambda with condition
    • List comprehension - complex
  • Iterators - with and without Itertools
    • Advantages of iterators and generators
    • The Fibonacci research institute
    • Fibonacci plain
    • Fibonacci copy-paste
    • Iterators Glossary
    • What are iterators and iterables?
    • A file-handle is an iterator
    • range is iterable but it is not an iterator
    • Iterator: a counter
    • Using iterator
    • Iterator without temporary variable
    • The type of the iterator
    • Using iterator with next
    • Mixing for and next
    • Iterable which is not an iterator
    • Iterator returning multiple values
    • Range-like iterator
    • Unbound or infinite iterator
    • Unbound iterator Fibonacci
    • Operations on Unbound iterator
    • itertools
    • itertools - count
    • itertools - cycle
    • Exercise: iterators - reimplement the range function
    • Exercise: iterators - cycle
    • Exercise: iterators - alter
    • Exercise: iterators - limit Fibonacci
    • Exercise: iterators - Fibonacci less memory
    • Exercise: read char
    • Exercise: read section
    • Exercise: collect packets
    • Exercise: compare files
    • Solution: iterators - limit Fibonacci
    • Solution: iterators - Fibonacci less memory
    • Solution: read section
    • Solution: compare files
    • Solution: collect packets
  • Generators and Generator Expressions
    • Generators Glossary
    • Iterators vs Generators
    • List comprehension and Generator Expression
    • List comprehension vs Generator Expression - less memory
    • List comprehension vs Generator Expression - lazy evaluation
    • Generator: function with yield - call next
    • Generators - call next
    • Generator with yield
    • Generators - fixed counter
    • Generators - counter
    • Generators - counter with parameter
    • Generators - my_range
    • Fibonacci - generator
    • Infinite series
    • Integers
    • Integers + 3
    • Integers + Integers
    • Filtered Fibonacci
    • The series.py
    • generator - unbound count (with yield)
    • iterator - cycle
    • Exercise: Alternator
    • Exercise: Prime number generator
    • Exercise: generator
    • Exercise: Tower of Hanoi
    • Exercise: Binary file reader
    • Exercise: File reader with records
  • Logging
    • Simple logging
    • Simple logging - set level
    • Simple logging to a file
    • Simple logging format
    • Simple logging change date format
    • getLogger
    • Time-based logrotation
    • Size-based logrotation
  • Closures
    • Counter local - not working
    • Counter with global
    • Create incrementors
    • Create internal function
    • Create function by a function
    • Create function with parameters
    • Counter closure
    • Make incrementor with def (closure)
    • Make incrementor with lambda
    • Exercise: closure bank
    • Solution: closure bank
    • Solution: counter with parameter
  • Decorators
    • Function assignment
    • Function inside other function
    • Decorator
    • Use cases for decorators in Python
    • A recursive Fibonacci
    • trace fibo
    • tron decorator
    • Decorate with direct call
    • Decorate with parameter
    • Decorator accepting parameter
    • Decorate function with any signature
    • Decorate function with any signature - implementation
    • Exercise: Logger decorator
    • Exercise: memoize decorator
    • Solution: Logger decorator
    • Solution: Logger decorator (testing)
    • Solution memoize decorator
  • Context managers (with statement)
    • Why use context managers?
    • Context Manager examples
    • cd in a function
    • open in function
    • open in for loop
    • open in function using with
    • Plain context manager
    • Param context manager
    • Context manager that returns a value
    • Use my tempdir - return
    • Use my tempdir - exception
    • cwd context manager
    • tempdir context manager
    • Context manager with class
    • Context managers with class
    • Context manager: with for file
    • With - context managers
    • Exercise: Context manager
    • Exercise: Tempdir on Windows
    • Solution: Context manager
  • Advanced lists
    • Change list while looping: endless list
    • Change list while looping
    • Copy list before iteration
    • for with flag
    • for else
    • enumerate
    • do while
    • list slice is copy
  • Advanced Exception handling
    • Exceptions else
    • Exceptions finally
    • Exit and finally
    • Catching exceptions
    • Home made exception
    • Home made exception with attributes
    • Home made exception hierarcy
    • Home made exception hierarcy - 1
    • Home made exception hierarcy - 2
    • Home made exception hierarcy - 3
    • Exercise: spacefight with exceptions
    • Exercies: Raise My Exception
    • Solution: spacefight with exceptions
    • Solution: Raise My Exception
    • Exception finally return
  • Warnings
    • Warnings
  • CSV
    • Reading CSV the naive way
    • CSV with quotes and newlines
    • Reading a CSV file
    • CSV dialects
    • CSV to dictionary
    • Exercise: CSV
    • Solution: CSV
  • Excel
    • Spreadsheets
    • Python Excel
    • Create an Excel file from scratch
    • Worksheets in Excel
    • Add expressions to Excel
    • Format field
    • Number series and chart
    • Read Excel file
    • Update Excel file
    • Exercise: Excel
  • XML
    • XML Data
    • Expat - Callbacks
    • XML DOM - Document Object Model
    • XML SAX - Simple API for XML
    • SAX collect
    • XML elementtree
  • SciPy - for Scientific Computing in Python
    • Data Science tools in Python
    • Data Analysis resources
  • Python and Biology
    • Biopython
    • Biopython background
    • Bio python sequences
    • Download data
    • Read FASTA, GenBank files
    • Search nucleotids
    • Download nucleotids
    • Exercise: Nucleotid
    • Biology background
  • Chemistry
    • Chemistry links
    • Bond length
    • Covalent radius
    • Python energy landscape explorer
    • Other chemistry links
  • numpy
    • What is NumPy
    • Numpy - vector
    • NumPy 2D arrays
    • Numpy - set type
    • NumPy arrays: ones and zeros
    • Numpy: eye
    • NumPy array random
    • NumPy Random integers
    • NumPy array type change by division (int to float)
    • Numpy: Array methods: transpose
    • Numpy: reference, not copy
    • Numpy: copy array
    • Numpy: Elementwise Operations on Arrays
    • Numpy: multiply, matmul, dot for vectors
    • Numpy: multiply, matmul, dot for vector and matrix
    • Numpy: multiply, matmul, dot for matrices
    • Numpy: casting - converting from strings to integer.
    • Numpy: indexing 1d array
    • Numpy: slice is a reference
    • Numpy: slice - copy
    • Numpy: abs value on a Numpy array
    • Numpy: Logical not on a Numpy array
    • Numpy: Vectorize a function
    • Numpy: Vectorize len
    • Numpy: Vectorize lambda
    • Numpy: Filtering array
    • Numpy: Filter matrix values
    • Numpy: Filter matrix rows
    • Numpy: Stat
    • Numpy: Serialization
    • Numpy: Load from Matlab file
    • Numpy: Save as Matlab file
    • Numpy: Horizontal stack vectors (hstack)
    • Numpy: Append or vertically stack vectors and matrices (vstack)
    • Numpy uint8
    • Numpy int8
  • Pandas
    • Pandas
    • Planets
    • Pandas Planets - Dataframes
    • Pandas Stocks
    • Pandas Stocks
    • Merge Dataframes
    • Analyze Alerts
    • Analyze IFMetrics
    • Create Excel file for experiment with random data
    • Calculate Genome metrics
    • Calculate Genome metrics - add columns
    • Calculate Genome metrics - vectorized
    • Calculate Genome metrics - vectorized numpy
    • Genes using Jupyter
    • Combine columns
    • Pandas more
    • Pandas Series
    • Pandas Series with names
  • Matplotlib
    • About Matplotlib
    • Matplotlib Line
    • Matplotlib Line with dates
    • Matplotlib Simple Pie
    • Matplotlib Simple Pie with params
    • Matplotlib Pie
    • Matplotlib Pie 2
    • Plot, scatter, histogram
  • Seaborn
    • Searborn use examples
    • Seaborn tip
    • Seaborn Anscombes Quartet
  • Jupyter notebooks
    • Jupyter on Windows
    • Jupyter on Linux and OSX
    • Jupyter add
    • Planets
    • Jupyter notebook Planets
    • Jupyter StackOverflow
    • Jupyter StackOverflow - selected columns
    • Jupyter processing chunks
    • Jupyter StackOverflow - selected rows
    • Jupyter StackOverflow - biggest countries (in terms of number of responses)
    • Jupyter StackOverflow - historgram
    • Jupyter StackOverflow - filter by country
    • Jupyter StackOverflow - OpenSourcer
    • Jupyter StackOverflow - cross tabulation
    • Jupyter StackOverflow - salaries
    • Jupyter StackOverflow - replace values
    • Jupyter StackOverflow - selected rows
    • Jupyter notebook Intellisense (TAB completition)
    • Jupyter examples
    • IPy Widgets
  • Testing
    • Traditional Organizations
    • Quality Assurance
    • Web age Organizations
    • TDD vs Testing as an Afterthought
    • Why test?
    • Testing Modes
    • Testing Applications
    • Testing What to test?
    • Testing in Python
    • Testing Environment
    • Testing Setup - Fixture
    • Testing Resources
  • Testing with unittest
    • Use a module
    • Test a module
    • The tested module
    • Testing - skeleton
    • Testing
    • Test examples
  • Testing with PyTest
    • Pytest features
    • Pytest setup
    • Testing with Pytest
    • Testing functions
    • Testing class and methods
    • Pytest - execute
    • Pytest - execute
    • Pytest simple module to be tested
    • Pytest simple tests - success
    • Pytest simple tests - success output
    • Pytest simple tests - failure
    • Pytest simple tests - failure output
    • Exercise: test math functions
    • Exercise: test this app
    • Exercise: test the csv module
    • Solution: Pytest test math functions
    • Solution: Pytest test this app
    • Solution: test the csv module
    • PyTest bank deposit
    • PyTest expected exceptions (bank deposit)
    • PyTest expected exceptions (bank deposit) - no exception happens
    • PyTest expected exceptions (bank deposit) - different exception is raised
    • PyTest expected exceptions
    • PyTest expected exceptions output
    • PyTest expected exceptions (text changed)
    • PyTest expected exceptions (text changed) output
    • PyTest expected exceptions (other exception)
    • PyTest expected exceptions (other exception) output
    • PyTest expected exceptions (no exception)
    • PyTest expected exceptions (no exception) output
    • PyTest: Multiple Failures
    • PyTest: Multiple Failures output
    • PyTest Selective running of test functions
    • PyTest: stop on first failure
    • Pytest: expect a test to fail (xfail or TODO tests)
    • Pytest: expect a test to fail (xfail or TODO tests)
    • PyTest: show xfailed tests with -rx
    • Pytest: skipping tests
    • Pytest: show skipped tests woth -rs
    • Pytest: show extra test summmary info with -r
    • Pytest: skipping tests output in verbose mode
    • Pytest verbose mode
    • Pytest quiet mode
    • PyTest print STDOUT and STDERR using -s
    • PyTest failure reports
    • PyTest compare numbers
    • PyTest compare numbers relatively
    • PyTest compare strings
    • PyTest compare long strings
    • PyTest is one string in another strings
    • PyTest test any expression
    • PyTest element in list
    • PyTest compare lists
    • PyTest compare short lists
    • PyTest compare short lists - verbose output
    • PyTest compare dictionaries
    • PyTest compare dictionaries output
    • PyTest Fixtures
    • PyTest Fixture setup and teardown
    • PyTest Fixture setup and teardown output
    • PyTest: Class setup and teardown
    • PyTest: Class setup and teardown output
    • Pytest Dependency injection
    • Pytest fixture - tmpdir
    • Pytest capture STDOUT and STDERR with capsys
    • Pytest Fixture - home made fixtures
    • More fixtures
    • Pytest: Mocking - why?
    • Pytest: Mocking - what?
    • Pytest: One dimensional spacefight
    • Pytest: Mocking input and output
    • Pytest: Mocking random
    • Pytest: Flask echo
    • Pytest: testing Flask echo
    • PyTest: Run tests in parallel with xdist
    • PyTest: Order of tests
    • PyTest: Randomize Order of tests
    • PyTest: Force default order
    • PyTest: no random order
    • Anagram on the command line
    • PyTest testing CLI
    • PyTest test discovery
    • PyTest test discovery - ignore some tests
    • PyTest select tests by name
    • PyTest select tests by marker
    • PyTest: Test Coverage
    • Exercise: module
    • Exercise: Open Source
    • Pytest resources
    • Pytest and tempdir
    • PyTest compare short lists - output
    • PyTest with parameter
    • PyTest with parameters
    • Pytest reporting in JUnit XML format
    • No test selected
  • Advancted functions
    • Variable scopes
    • Name resolution order (LEGB)
    • Scoping: global seen from fuction
    • Assignment creates local scope
    • Local scope gone wrong
    • Changing global variable from a function
    • Global variables mutable in functions
    • Scoping issues
    • sub in sub
    • Scoping sub in sub (enclosing scope)
    • Function objects
    • Functions are created at run time
    • Mutable default
    • Use None as default parameter
    • Inner function created every time the outer function runs
    • Static variable
    • Static variable in generated function
    • Inspect
  • Variable number of function arguments
    • Python function arguments - a reminder
    • Functions with unknown number of argumerns
    • Variable length argument list with * and **
    • Passing arguments as they were received (but incorrectly)
    • Unpacking args before passing them on
    • Exercise: implement the my_sum function
    • Solution: implement the my_sum function
    • Exercise: implement the reduce function
    • Soluton: implement the reduce function
    • Exercise: sort pairs
    • Solution: sort pairs
  • Python Packages
    • Why Create package
    • Create package
    • Internal usage
    • use module in package - relative path
    • use package (does not work)
    • package importing (and exporting) module
    • use package (module) with import
    • use package with import
    • Creating an installable Python package
    • Create tar.gz file
    • Install Package
    • Dependencies
    • Add README file
    • Add README file (setup.py)
    • Include executables
    • Add tests
    • Add tests calc
    • Add tests all
    • setup.py
    • Run tests and create package
    • Packaging applications (creating executable binaries)
    • Using PyInstaller
    • Other PyInstaller examples
    • Other
    • Py2app for Mac
    • Exercise: package
    • Exercise: create executable
  • Ctypes
    • ctypes - hello
    • concat
    • links
  • Advanced OOP
    • Class count instances
    • Class Attributes
    • Class Attributes in Instances
    • Attributes with method access
    • Instance Attribute
    • Methods are class attributes
    • Monkey patching
    • Classes: instance method
    • Class methods and class attributes
    • Classes: constructor
    • Class methods - alternative constructor
    • Abstract Base Class
    • Abstract Base Class with abc
    • ABC working example
    • ABC - cannot instantiate the base-class
    • ABC - must implement methods
    • Use Python @propery to fix bad interface (the bad interface)
    • Use Python @propery to fix bad interface (first attempt)
    • Use Python @propery to fix bad API
    • Use Python @propery decorator to fix bad API
    • Use Python @propery for value validation
    • class and static methods
    • Destructor: del
    • Destructor delayed
    • Destructor delayed for both
    • Opearator overloading
    • Operator overloading methods
    • Exercise: rectangular
    • Exercise: SNMP numbers
    • Exercise: Implement a Gene inheritance model combining DNA
    • Exercise: imaginary numbers - complex numbers
    • Solution: Rectangular
    • Solution: Implement a Gene inheritance model combining DNA
    • Instance counter
  • 2to3
    • Convertig from Python 2 to Python 3
    • division
    • print in Python 2
    • print in Python 3
    • input and raw_input
    • Code that works on both 2 and 3
    • Compare different types
    • Octal numbers
    • 2to3 Resources
  • Design Patterns
    • What are Design Patterns?
    • Don’t replace built-in objects
    • Facade - simple interface to complex system
    • Monkey Patching
    • Creation DPs “Just One”
    • Singleton
    • Monostate (Borg)
    • Dispatch table
  • Parallel
    • Types of Problems
    • Types of solutions
    • How many parallels to use?
    • Dividing jobs
    • Performance Monitoring
  • Threads
    • Python Threading docs
    • Threaded counters
    • Simple threaded counters
    • Simple threaded counters (parameterized)
    • Pass parameters to threads - Counter with attributes
    • Create a central counter
    • Lock - acquire - release
    • Counter - plain
    • GIL - Global Interpreter Lock
    • Thread load
    • Exercise: thread files
    • Exercise: thread URL requests.
    • Exercise: thread queue
    • Solution: thread queue
    • Solution: thread URL requests.
  • Forking
    • Fork
    • Forking
    • Fork skeleton
    • Fork with load
    • Fork load results
    • Marshalling / Serialization
    • Fork with random
    • Exercise: fork return data
    • Solution: fork return data
  • Asyncronus programming with AsyncIO
    • Sync chores
    • Async chores
    • Explanation
    • Coroutines
    • More about asyncio
    • Async files
  • Asynchronus programming with Twisted
    • About Twisted
    • Echo
    • Echo with log
    • Simple web client
    • Web client
  • Multiprocess
    • Multiprocess CPU count
    • Multiprocess Process
    • Multiprocess N files: Pool
    • Multiprocess load
    • Multiprocess: Pool
    • Multiprocess load async
    • Multiprocess and logging
    • Exercise: Process N files in parallel
    • Exercise: Process N Excel files in parallel
    • Exercise: Fetch URLs in parallel
    • Exercise: Fetch URLs from one site.
    • Solution: Fetch URLs in parallel
  • Multitasking
    • What is Multitasking?
    • Multitasking example
    • Multitasking example with wait
    • Multitaksing - second loop waits for first one
    • Multitasking counter
    • Multitasking counter with thread locking
  • Improving Performance - Optimizing code
    • Problems
    • Optimization strategy
    • Locate the source of the problem
    • Optimizing tactics
    • DSU: Decorate Sort Undecorate
    • Profile code
    • Slow example
    • profile slow code
    • cProfile slow code
    • Benchmarking
    • Benchmarking subs
    • Levenshtein distance
    • Generate words
    • Levenshtein - pylev
    • Levenshtein - editdistance
    • Editdistance benchmark
    • A Tool to Generate text files
    • Count characters
    • Memory leak
    • Garbage collection
    • Weak reference
    • Exercise: benchmark list-comprehension, map, for
    • Exercise: Benchmark Levenshtein
    • Exercise: sort files
    • Exercise: compare split words:
    • Exercise: count words
  • GUI with Python/Tk
    • Sample Tk app
    • GUI Toolkits
    • Installation
    • Python Tk Documentation
    • Python Tk Button
    • Python Tk Button with action
    • Python Tk Label
    • Python Tk Label - font size and color
    • Python Tk Keybinding
    • Python Tk Entry (one-line text entry)
    • Python Tk Entry for passwords and other secrets (hidden text)
    • Python Tk Checkbox
    • Python Tk Radiobutton
    • Python Tk Listbox
    • Python Tk Listbox Multiple
    • Python Tk Menubar
    • Python Tk Text
    • Python Tk Dialogs
    • Python Tk Filedialog
    • Python Tk messagebox
    • Python Tk Combobox
    • Python Tk OptionMenu
    • Python Tk Scale
    • Python Tk Progressbar
    • Python Tk Frame
    • Not so Simple Tk app with class
    • Tk: Hello World
    • Tk: Quit button
    • Tk: File selector
    • Tk: Checkbox
    • Tk: Runner
    • Tk: Runner with threads
    • Getting started with Tk
    • Exercise: Tk - Calculator one line
    • Exercise: Tk Shopping list
    • Exercise: Tk TODO list
    • Exercise: Tk Notepad
    • Exercise: Tk Copy files
    • Exercise: Tk Implement Master Mind board
    • Exercise: Tk
    • Solution: Tk - Calculator one line
    • Solution: Tk Implement Master Mind board
    • Solution: Tk
    • Solution: Tk Notepad
    • Simple file dialog
  • Python Pitfalls
    • Reuse of existing module name
    • Use the same name more than once
    • Compare string and number
    • Compare different types
    • Sort mixed data
  • Linters
    • Static Code Analyzis - Linters
    • PEP8
    • F811 - redefinition of unused
    • Warn when Redefining functions
  • Python .NET
    • IronPython
    • Use .NET libraries from Python
    • Python and .NET console
    • Python and .NET examples
    • Exercise Python and .NET
  • Python and Java
    • Jython
    • Calling Java from Python
  • Jython - Python running on the JVM
    • Jython Installation
    • Jython Installation
    • Jython load Java class
    • Jython load Java class in code
    • Jython test Java class
  • PIL - Pillow
    • Install Pillow
    • Create First Image
    • Write Text on Image
    • Select font for Text on Image
    • Font directories
    • Get size of an Image
    • Get size of text
    • Resize an existing Image
    • Crop an existing Image
    • Combine two images
    • Rotated text
    • Rotated text in top-right corner
    • Embed image (put one image on another one)
    • Draw a triangle
    • Draw a triangle and write text in it
    • Draw a triangle and write rotated text in it
    • Draw a rectangular
    • Draw a rectangle
    • Draw circle
    • Draw heart
    • Rectangle with rounded corners
    • TODO
  • FAQ
    • How not to name example scirpts?
    • Platform independent code
    • How to profile a python code to find causes of slowness?
    • pdb = Python Debugger
    • Avoid Redefining functions
  • Appendix
    • print_function
    • Dividers (no break or continue)
    • Lambdas
    • Abstract Class
    • Remove file
    • Modules: more
    • import hooks
    • Python resources
    • Progress bar
    • from future
    • Variable scope
    • scope
    • type
    • Look deeper in a list
    • Exercise: iterators - count
    • Simple function (before generators)
  • Other slides
    • Other slides
    • Atom for Python
    • IDLE - Integrated DeveLopment Environment
    • sh-bang - executable on Linux/Apple
    • Strings as Comments
    • pydoc
    • How can I check if a string can be converted to a number?
    • Spyder Intro
    • Interactive Debugging
    • Parameter passing
    • Command line arguments and main
    • Infinite loop
    • break
    • continue
    • While with many conditions
    • while loop with many conditions
    • Format with conversion (stringifiation with str or repr)
    • Name of the current function in Python
    • Name of the caller function in Python
    • Stack trace in Python using inspect
    • Module Fibonacci
    • PyTest - assertion
    • PyTest - failure
    • PyTest - list
    • SAX with coroutine
    • Getting the class name of an object
    • Inheritance - super
    • Inheritance - super - other class
    • iterator - pairwise
    • iterator - grouped
    • itertools - groupby
    • Circular references
    • Context managers: with (file) experiments
    • itertools - izip
    • mixing iterators
    • mixing iterators
    • itertools - pairwise
    • itertools - grouped
    • range vs xrange in Python
    • profile (with hotshot) slow code
    • Abstract Base Class without abc
    • Abstract Base Class with abc Python 2 ?
    • Abstract Base Class with metaclass
    • Create class with metaclass
    • Python Descriptors
    • alter iterator
    • Create a counter queue
    • A Queue of tasks
    • Filtered Fibonacci with ifilter
    • Python from .NET

The Leanpub 60 Day 100% Happiness Guarantee

Within 60 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.

Now, this is technically risky for us, since you'll have the book or course files either way. But we're so confident in our products and services, and in our authors and readers, that we're happy to offer a full money back guarantee for everything we sell.

You can only find out how good something is by trying it, and because of our 100% money back guarantee there's literally no risk to do so!

So, there's no reason not to click the Add to Cart button, is there?

See full terms...

Earn $8 on a $10 Purchase, and $16 on a $20 Purchase

We pay 80% royalties on purchases of $7.99 or more, and 80% royalties minus a 50 cent flat fee on purchases between $0.99 and $7.98. You earn $8 on a $10 sale, and $16 on a $20 sale. So, if we sell 5000 non-refunded copies of your book for $20, you'll earn $80,000.

(Yes, some authors have already earned much more than that on Leanpub.)

In fact, authors have earnedover $14 millionwriting, publishing and selling on Leanpub.

Learn more about writing on Leanpub

Free Updates. DRM Free.

If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).

Most Leanpub books are available in PDF (for computers) and EPUB (for phones, tablets and Kindle). The formats that a book includes are shown at the top right corner of this page.

Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.

Learn more about Leanpub's ebook formats and where to read them

Write and Publish on Leanpub

You can use Leanpub to easily write, publish and sell in-progress and completed ebooks and online courses!

Leanpub is a powerful platform for serious authors, combining a simple, elegant writing and publishing workflow with a store focused on selling in-progress ebooks.

Leanpub is a magical typewriter for authors: just write in plain text, and to publish your ebook, just click a button. (Or, if you are producing your ebook your own way, you can even upload your own PDF and/or EPUB files and then publish with one click!) It really is that easy.

Learn more about writing on Leanpub