All posts by Mike

Python 101 Online Course is FREE for 48 Hours!

My Python 101 online course will be completely FREE for the next 48 hours on Educative’s website. Be sure to go get yourself a copy.

It is based on my Python 101 book. When you get it from Educative, it will be yours to keep for life. Note that this is an interactive online course, not a video course. If you enjoy the Python 101 online course, you can get my second online course, Python 201 for 50% off just by using the following coupon: au-promo-py201.


  • Python 101 Online course (FREE for 48 Hours)
  • Python 201 Online course (50% off with au-promo-py201 coupon

You can also get my eBooks for 50% off the suggested price with the following links:

PyDev of the Week: Paul Moore

This week we welcome Paul Moore as our PyDev of the Week! Paul is a core developer of pip, the defacto method of installing packages in Python as well as a core developer of Python itself. You can get a glimpse of some of the projects that Paul is involved with on his Github profile. Let’s spend some time getting to know Paul better!

Can you tell us a little about yourself (hobbies, education, etc):

I was born in Liverpool, England, and (apart from a few years in Cambridge studying maths at university) I’ve lived in the north west of England all my life. When I was at school, my passion was for maths, which led to an interest in programming and computers. My first computer was a Sinclair ZX-81 and I learned Z80 assembler from a disassembly of the complete OS of that machine – not something I’d ever try these days! I quickly moved onto the BBC micro and then the Acorn Archimedes, until I finally joined the mainstream in about 1995 when I got my first PC. Although I’ve always been interested in Unix, I never really used it at home, so I’ve pretty much always been a Windows user (which has its frustrations, but is also much more fun as you get the chance to port stuff that the Unix people take for granted :-)).

In the past I’ve contributed to a lot of open source projects – vim (I wrote the original OLE and Python interfaces), the Boost C++ libraries, some long-gone Windows utility libraries – and ported a lot of Unix programs to Windows (I had my own ports of many of the GNU utilities). These have mostly died down now, and I focus mainly on Python.

In my working life, I work for a software consultancy doing Oracle support. While there’s not much official use of Python involved, I’ve always used it as much as possible for background scripts and personal utilities. And these days it’s nice to see it appearing more and more as a “mainstream” language – it’s popping up in all sorts of unexpected places these days.

Outside of computing I like to spend time with my family (I’m married and I have a son and daughter, both at university/college), as well as playing music (guitar and piano), playing boardgames and reading/watching videos. I used to practice Ju Jitsu, but haven’t had time in a few years now (advancing age may also have been a factor!)

Continue reading PyDev of the Week: Paul Moore

Python 101 – An Intro to IDLE

Python comes with its own code editor: IDLE (Integreted Development and Learning Environment). There is some lore that the name for IDLE comes from Eric Idle, an actor in Monty Python. An IDE is an editor for programmers that provides color highlighting of key words in the language, auto-complete, an “experimental” debugger and lots of other fun things. You can find an IDE for most popular languages and a number of IDEs will work with multiple languages. IDLE is kind of a lite IDE, but it does have all those items mentioned. It allows the programmer to write Python and debug their code quite easily. The reason I call it “lite” is the debugger is very basic and it’s missing other features that programmers who have a background using products like Visual Studio will miss. You might also like to know that IDLE was created using Tkinter, a Python GUI toolkit that comes with Python.

Continue reading Python 101 – An Intro to IDLE

Python 101: All About Dictionaries

The Python programming language has several built-in types that it supports. One of my favorites is the dictionary. A dictionary is a mapping object maps hashable values to arbitrary objects (source). Other languages call dictionaries “hash tables”. They are mutable objects that you can change whenever you want to, unlike tuples. A dictionary’s keys must be hashable or immutable, which means that you cannot use a list or another dictionary as a key. Note that dictionaries are not ordered. What this means is that when you iterate over a dictionary, you may not extract the values in the same order that you inserted them.

In this article, we will take some time learning about some of the many things you can do with a dictionary.

Creating Dictionaries

A dictionary is a key:value pair. In Python, these key:value pairs are enclosed inside of curly braces with commas between each pair. Creating dictionaries in Python is really easy. Here are the three ways to create a dictionary:

>>> my_dict = {}
>>> my_other_dict = dict()
>>> my_other_other_dict = {1: 'one', 2: 'two', 3: 'three'}

In the first example, we create an empty dictionary by just assigning our variable to a pair of empty curly braces. You can also create a dictionary object by calling Python’s built-in dict() keyword. I have seen some people mention that calling dict() is slightly slower than just doing the assignment operator. The last example shows how to create a dictionary with some predefined key:value pairs. You can have dictionaries that contain mappings of various types, including mapping to functions or objects. You can also nest dictionaries and lists inside your dictionaries!

Continue reading Python 101: All About Dictionaries

How to Run Python Tests “Continuously” While Coding

Last week I was doing some Test Driven Development training and overheard someone mention another programming language that had a test runner that you could set up to watch your project directory and run your tests when the files changed. I thought that was a neat idea. I also thought I could easily write my own Python script to do the same thing. Here’s a pretty rough version:

import argparse
import os
import subprocess
import time
def get_args():
    parser = argparse.ArgumentParser(
        description="A File Watcher that executes the specified tests"
    parser.add_argument('--tests', action='store', required=True,
                        help='The path to the test file to run')
    parser.add_argument('--project', action='store', required=False,
                        help='The folder where the project files are')
    return parser.parse_args()
def watcher(test_path, project_path=None):
    if not project_path:
        project_path = os.path.dirname(test_path)
    f_dict = {}
    while True:
        files = os.listdir(project_path)
        for f in files:
            full_path = os.path.join(project_path, f)
            mod_time = os.stat(full_path).st_mtime
            if full_path not in f_dict:
                f_dict[full_path] = mod_time
            elif mod_time != f_dict[full_path]:
                # Run the tests
                cmd = ['python', test_path]
                print('-' * 70)
                f_dict[full_path] = mod_time
def main():
    args = get_args()
    w = watcher(args.tests, args.project)
if __name__ == '__main__':

To run this script, you would need to do something like this:

python --test ~/path/to/ --project ~/project/path

Continue reading How to Run Python Tests “Continuously” While Coding

PyDev of the Week: Luke Plant

This week we welcome Luke Plant as our PyDev of the Week. Luke is one of the core developers of Django, a very popular Python web framework. Luke writes a blog with many articles about Django. If you’d like to see some of Luke’s contributions, then you will want to wander over to his Github profile soon. Let’s take a few minutes to get to know Luke better!

Can you tell us a little about yourself (hobbies, education, etc):

I grew up in England, and currently live in Turkey with my wife and son, and a second on the way! [He means a second child, not a second wife – The Wife]. At the moment my dominating ‘hobby’ is learning Turkish, which is pretty tough work, but very rewarding too. I also enjoy playing the guitar (though not to any high standard!).

Regarding learning to program, I’ve been mainly self-taught: as a kid it was the 8-bit, 64K Oric Atmos that my dad bought (which was brilliant – there was an invaluable Advanced Users Manual that told you pretty much everything about it, including a complete ROM disassembly listing), then later messing around with VBA and Microsoft Office. My dad’s interest in messing around with computers meant that we were one of the first families I knew to be regularly using email and the web.

I went to university to study Physics/Natural Sciences, but in my first week there, my career in science was derailed when a friend decided to install Linux on my Windows machine before I even knew what he was doing. Thankfully he left Windows on there too, rather than just wiping my hard drive! But that introduced me to the Open Source world, which re-kindled my previous interest in programming, and both the fun and the philosophy behind Open Source programming have been a major influence on me since. Thankfully, although I was studying science not programming, I was able to do a fair number of programming related projects – one of which I recently had fun re-implementing using IPython Notebook.

Continue reading PyDev of the Week: Luke Plant

Python – How to tell if a Function Has Been Called

Last year I ran into a situation where I needed to know if a function had been called. Basically we were trying to prevent shutting down a Twisted event loop twice or starting two of them. Anyway, in my research I stumbled across a fun post on StackOverflow that showed a couple of ways to do this.

The first made use of the fact that everything in Python is an object, including the function itself. Let’s take a look at a simple example:

def self_aware_function(a, b):
    self_aware_function.has_been_called = True
    return a + b
if __name__ == '__main__':
    self_aware_function.has_been_called = False
    for i in range(2):
        if self_aware_function.has_been_called:
            print('function already called')
            print('function not called')
        self_aware_function(1, 2)

In this example, we create an attribute on the function that we named has_been_called. We set it to True when the function is called. When you start your program, you will want to initialize that attribute to False, which we do above. Then we use a for loop to loop twice. The first time through it will check if the function has been called. Since it hasn’t, you will see it fall to the else statement. Now that we called the function, the second time through the loop the first part of the if statement executes.

Continue reading Python – How to tell if a Function Has Been Called

Python 201 is Now an Online Course

My second book, Python 201: Intermediate Python, was just released as an online course over at Educative. I also have Python 101 on there as well. Educative is a pretty new educational website. It’s kind of like Code Academy except that they usually charge for access to all their courses.

Note: This is NOT a video course!

Anyway, they were kind enough to provide me with a 50% off coupon to share with anyone on Reddit. Here it is: au-py201-50. Note: This coupon code is only good for 1 week.

If you haven’t heard of my second book, then you’ll find a really good table of contents and some free content on Educative. You can also see the book’s table of contents on Leanpub here:

PyDev of the Week: Dan Bader

This week we welcome Dan Bader (@dbader_org) as our PyDev of the Week. Dan does a weekly Python Tricks newsletter / blog that’s a fun read. He has also authored a Python Tricks book. I always like checking out my interviewee’s Github page to see what they enjoy coding or writing about, so I encourage you to check that out as well. Let’s take a few moments to learn more about Dan!

Can you tell us a little about yourself (hobbies, education, etc):

Hey everyone :wave: My name is Dan Bader and I’m a complete Python nut. I’ve been obsessed with programming ever since I managed to convince my parents to buy me a dusty old Commodore 64 from the classifieds in a local newspaper. And my love for writing code hasn’t diminished since then.

Eventually I got a bachelor’s and a master’s degree in Computer Science. I worked in full-time positions for a few years and today I’m an independent software developer and consultant.

I was born and grew up in Germany but then later moved to Canada. I love both countries—and fortunately I mostly work remotely these days so I get to visit each one a fair bit. I’m glad I found a partner who’s willing to put up with these antics :slightly_smiling_face:

In terms of hobbies I like working out at the gym, cooking vegetarian food (buying my first proper cast-iron wok in Vancouver’s chinatown changed my life, haha), and going on hikes. I also read a lot. In general I found what makes me the happiest is building stuff. So I try and optimize for that. Every now and then I play some guitar to relax.

Continue reading PyDev of the Week: Dan Bader