- Leave a Reply.
- Transforming Code into Beautiful, Idiomatic Python
- Much more than documents.
- Code Like a Pythonista: Idiomatic Python
- Uploaded by
- Code like a pythonista idiomatic python by david goodger pdf
- Code Like a Pythonista Idiomatic Python
- Code Like a Pythonista: Idiomatic Python (Crunchy Remix)
But many of the attendees were unaware of these tools that experienced Python programmers use without thinking. Many of you will have seen some of these techniques and idioms before. Hopefully you'll learn a few techniques that you haven't seen before and maybe something new about the ones you have already seen. These are the guiding principles of Python, but are open to interpretation.
Leave a Reply.
A sense of humor is required for their proper interpretation. If you're using a programming language named after a sketch comedy troupe, you had better have a sense of humor. This particular "poem" began as a kind of a joke, but it really embeds a lot of truth about the philosophy behind Python.
Long time Pythoneer Tim Peters succinctly channels the BDFL's guiding principles for Python's design into 20 aphorisms, only 19 of which have been written down. You can decide for yourself if you're a "Pythoneer" or a "Pythonista".
The terms have somewhat different connotations. A PEP is a design document providing information to the Python community, or describing a new feature for Python or its processes or environment. The Python community has its own standards for what source code should look like, codified in PEP 8. Because indentation and whitespace are so important in Python, the Style Guide for Python Code approaches a standard.
Transforming Code into Beautiful, Idiomatic Python
It would be wise to adhere to the guide! Most open-source projects and hopefully in-house projects follow the style guide quite closely. Other editors may also provide this support.
Much more than documents.
I never use it. Trust me. If you use it, you WILL regret it later.
The spaces between literals are not required, but help with readability. Any type of quoting can be used:. The string prefixed with an "r" is a "raw" string. Backslashes are not evaluated as escapes in raw strings. They're useful for regular expressions and Windows filesystem paths. The indentation of the second "Good" line above shows the reader that something's going on, whereas the lack of indentation in "Bad" hides the "if" statement.
Docstrings explain how to use code, and are for the users of your code. Uses of docstrings:. Comments explain why , and are for the maintainers of your code. Examples include notes to yourself, like:.
Docstrings are useful in interactive use help and for auto-documentation systems. So keep them up to date!
But most importantly: know when to be inconsistent -- sometimes the style guide just doesn't apply. When in doubt, use your best judgment. Look at other examples and decide what looks best. And don't hesitate to ask! The right-hand side is unpacked into the names in the tuple on the left-hand side.
So people is a list containing two items, each a 3-item list. Each item in people is being unpacked into the name, title, phone tuple. That's convenient!
It is especially useful when you're working out a problem interactively, and you want to store the result for a later step:. It has terrible memory usage and performance patterns. The "summation" will compute, store, and then throw away each intermediate step. The join string method does all the copying in one pass.
When you're only dealing with a few dozen or hundred strings, it won't make much difference. But get in the habit of building strings efficiently, because with thousands or with loops, it will make a difference.
To make a nicely grammatical sentence, we want commas between all but the last pair of values, where we want the word "or". The slice syntax does the job.
The "slice until -1"  gives all but the last value, which we join with comma-space. If you need to compute the substrings incrementally, accumulate them in a list first:. For consistency, use key in dict , not dict. Or "set if necessary, then get". It's especially efficient if your dictionary key is expensive to compute or long to type.
The only problem with dict. That only matters if the default value is expensive to compute.
If the default value is expensive to compute, you may want to use the defaultdict class, which we'll cover shortly. There are two ways to get defaultdict :. There's no fumbling around at all now. In this case, the default factory function is list , which returns an empty list. This is how to get a dictionary with default values of 0: use int as a default factory function:.
Examples: execute truth. In Python 3.
Code Like a Pythonista: Idiomatic Python
For compatibility, add this to the class definition:. Say we want to iterate over the items, and we need both the item's index and the item itself:. The enumerate function takes a list and returns index, item pairs:. The enumerate version is much shorter and simpler than the version on the left, and much easier to read and understand than either.
An example showing how the enumerate function actually returns an iterator a generator is a kind of iterator :. The original integer 1 object no longer has a tag "a".
It may live on, but we can't get to it through the name "a". When an object has no more references or tags, it is removed from memory. Although we commonly refer to "variables" even in Python because it's common terminology , we really mean "names" or "identifiers".
In Python, "variables" are nametags for values, not labelled boxes. If you get nothing else out of this tutorial, I hope you understand how Python names work. A good understanding is certain to pay dividends, helping you to avoid cases like this:. Although if you don't know C, that's not very helpful. Basically, you provide a template or format and interpolation values.
Code like a pythonista idiomatic python by david goodger pdf
Here we specify the names of interpolation values, which are looked up in the supplied dictionary. Notice any redundancy? The names "name" and "messages" are already defined in the local namespace. We can take advantage of this. The locals function returns a dictionary of all locally-available names. This is very powerful. With this, you can do all the string formatting you want without having to worry about matching the interpolation values to the template.
But power can be dangerous. This is just something to keep in mind. The traditional way, with for and if statements:.
Generator expressions "genexps" are just like list comprehensions, except that where listcomps are greedy, generator expressions are lazy.
Code Like a Pythonista Idiomatic Python
Listcomps compute the entire result list all at once, as a list. Generator expressions compute one value at a time, when needed, as individual values. This is especially useful for long sequences where the computed list is just an intermediate step and not the final result. In this case, we're only interested in the sum; we don't need the intermediate list of squares.
We use xrange for the same reason: it lazily produces values, one at a time. Note that the list is sorted in-place: the original list is sorted, and the sort method does not return the list or a copy. But what if you have a list of data that you need to sort, but it doesn't sort naturally i. You may need to sort on the second column first, then the fourth column.
We can use list's built-in sort method with a custom function:.
Code Like a Pythonista: Idiomatic Python (Crunchy Remix)
The first line creates a list containing tuples: copies of the sort terms in priority order, followed by the complete data record. The third line retrieves the last value from the sorted list. Remember, this last value is the complete data record.
We're throwing away the sort terms, which have done their job and are no longer needed.