Notes for Session 03

A collection of notes to go over in class, to keep things organized.

Lightning Talks

Up today:

Amitkumar Chudasma

Daniel Wojciechowski

Eric V Adams

Tian Chuan Yen

Are you ready? We’ll do them in the middle of the session.

Issues that came up during the week.

Separation of concerns

From print_grid: if you are going to have separate functions, better for them to return a string, and then put all the printing in the calling function, on one place. That would make it more re-usable – say you want to write to a file?

This is a tiny example of what’s known as “separation of concerns”

Make use of symmetry

nice trick:

def gene_line(char_a, char_b, n):
    line = char_a + ' ' + ((n - 1) // 2) * (char_b + ' ')
    line = line + char_a + line[::-1]

is vs ==

In FizzBuzz, someone had code something like this:

` if n % 3 is 0: `

That works, but it’s a “Bad Idea™”

“is” tests whether the objects are actually the same object – not whether they have the same value. As you can easily have multiple objects that happen to have the same value, “is” will fail in the general case.

This works because cpython has an optimization called “interning” – since small integers are used so often, the interpreter keeps a pool of them around to re-use, rather than creating multiple integer objects with the same value.

So “is” will work as a test for small integers, but not large ones:

In [65]: x = 5

In [66]: y = 5

In [67]: x is y
Out[67]: True

In [68]: x = 345678

In [69]: y = 345678

In [70]: x is y
Out[70]: False

NOTE: This is also the case for small strings.

Important: This is an implementation detail. Do not count on it!

The Zen of Python

Have you ever tried: import this ?