Blog

  • Globbing and Python’s “subprocess” module

    Python’s “subprocess” module makes it really easy to invoke an external program and grab its output. For example, you can say import subprocess print(subprocess.check_output(‘ls’)) and the output is then $ ./blog.py b’blog.py\nblog.py~\ndictslice.py\ndictslice.py~\nhexnums.txt\nnums.txt\npeanut-butter.jpg\nregexp\nshowfile.py\nsieve.py\ntest.py\ntestintern.py\n’ subprocess.check_output returns a bytestring with the filenames on my desktop. To deal with them in a more serious way, and to have the…

    Read more

  • Five Python function parameters you should know and use

    One of Python’s mantras is “batteries included.” which means that even with a bare-bones installation, you can do quite a bit. You can (and should) install packages from PyPI, but many day-to-day tasks can be accomplished with just the built-in data structures, functions, and methods. What I’ve discovered over the years is that some of…

    Read more

  • One-day birthday sale — on July 14th, get 47% off my courses, books, and subscriptions

    Today is my birthday! To celebrate, I’m offering a one-day 47% sale on many of my products: My upcoming live classes (on functional Python, advanced Python objects, and decorators) are all 47% off Practice Makes Python (developer package), with 50 exercises to help you improve your Python, is 47% off Practice Makes Regexp (consultant package),…

    Read more

  • Announcing: Three live Python courses

    If you’re like many of the Python developers I know, the basics are easy for you: Strings, lists, tuples, dictionaries, functions, and even objects roll off of your fingers and onto your keyboard. Your day-to-day tasks have become significantly easier as a result of Python, and you’re comfortable using it for tasks at work and…

    Read more

  • Raw strings to the rescue!

    Whenever I teach Python courses, most of my students are using Windows. And thus, when it comes time to do an exercise, I inevitably end up with someone who does the following: for one_line in open(‘c:\abc\def\ghi’): print(one_line) The above code looks like it should work. But it almost certainly doesn’t. Why? Because backslashes (\) in…

    Read more

  • Announcing: Weekly Python Exercise

    I have a great job.  Really, I’m quite fortunate: For many years, I’ve spent nearly every day helping engineers at some of the world’s largest and best companies (including Apple, Cisco, Ericsson, HP, PayPal, SanDisk, and VMWare) to become better Python developers. My students are are experienced, intelligent engineers who are using Python in their…

    Read more

  • Boolean indexing in NumPy and Pandas: A free e-mail course for aspiring data scientists

    For nearly two years, I have been teaching my introductory course in data science and machine learning to companies around the world. On the one hand, participants are excited by data science, and all of the potential that it has to change our world. On the other hand, there is a lot to learn in…

    Read more

  • 2+2 might be 4, but what is True+True?

    In Python, we know that we can add two integers together: >> 2 + 2 4 And of course, we can add two strings together: >> ‘a’ + ‘b’ ‘ab’ We can even add two lists together: >> [1,2,3] + [4,5,6] [1, 2, 3, 4, 5, 6] But what happens when you add two booleans…

    Read more

  • Python function brain transplants

    What happens when we define a function in Python? The “def” keyword does two things: It creates a function object, and then assigns a variable (our function name) to that function object.  So when I say: def foo():      return “I’m foo!” Python creates a new function object.  Inside of that object, we can see…

    Read more

  • The five-minute guide to setting up a Jupyter notebook server

    Nearly every day, I teach a course in Python.  And nearly every day, I thus use the Jupyter notebook: I do my live-coding demos in it, answer students’ questions using it, and also send it to my students at the end of the day, so that they can review my code without having to type…

    Read more