Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Save more on your purchases now! discount-offer-chevron-icon
Savings automatically calculated. No voucher code required.
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Conferences
Free Learning
Arrow right icon

Do you write Python Code or Pythonic Code?

Save for later
  • 5 min read
  • 08 Aug 2018

article-image

If you’re new to Programming, and Python in particular, you might have heard the term Pythonic being brought up at tech conferences, meetups and even at your own office. You might have also wondered why the term and whether they’re just talking about writing Python code. Here we’re going to understand what the term Pythonic means and why you should be interested in learning how to not just write Python code, rather write Pythonic code.

What does Pythonic mean?


When people talk about pythonic code, they mean that the code uses Python idioms well, that it’s natural or displays fluency in the language. In other words, it means the most widely adopted idioms that are adopted by the Python community. If someone said you are writing un-pythonic code, they might actually mean that you are attempting to write Java/C++ code in Python, disregarding the Python idioms and performing a rough transcription rather than an idiomatic translation from the other language. Okay, now that you have a theoretical idea of what Pythonic (and unpythonic) means, let’s have a look at some Pythonic code in practice.

Writing Pythonic Code


Before we get into some examples, you might be wondering if there’s a defined way/method of writing Pythonic code. Well, there is, and it’s called PEP 8. It’s the official style guide for Python.

Example #1

x=[1, 2, 3, 4, 5, 6]

result = []

for idx in range(len(x));

result.append(x[idx] * 2)

result

Output: [2, 4, 6, 8, 10, 12]


Consider the above code, where you’re trying to multiply some elements, “x” by 2.

So, what we did here was, we created an empty list to store the results. We would then append the solution of the computation into the result. The result now contains a function which is 2 multiplied by each of the elements.

Now, if you were to write the same code in a Pythonic way, you might want to simply use list comprehensions. Here’s how:

x=[1, 2, 3, 4, 5, 6]

[(element * 2) for element in x]

Output: [2, 4, 6, 8, 10]


You might have noticed, we skipped the entire for loop!

Example #2


Let’s make the previous example a bit more complex, and place a condition that the elements should be multiplied by 2 only if they are even.

Unlock access to the largest independent learning library in Tech for FREE!
Get unlimited access to 7500+ expert-authored eBooks and video courses covering every tech area you can think of.
Renews at £16.99/month. Cancel anytime
x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

result = []

for idx in range(len(x));

if x[idx] % 2 == 0;

result.append(x[idx] * 2)

else;

result.append(x[idx])

result

Output: [1, 4, 3, 8, 5, 12, 7, 16, 9, 20]


We’ve actually created an if else statement to solve this problem, but there is a simpler way of doing things the Pythonic way.

[(element * 2 if element % 2 == 0 else element) for element in x]

Output: [1, 4, 3, 8, 5, 12, 7, 16, 9, 20]


If you notice what we’ve done here, apart from skipping multiple lines of code, is that we used the if-else statement in the same sentence. Now, if you wanted to perform filtering, you could do this:

x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

[element * 2 for element in x if element % 2 == 0]

Output: [4, 8, 12, 16, 20]


What we’ve done here is put the if statement after the for declaration, and Voila! We’ve achieved filtering.

If you’re using a nice IDE like Jupyter Notebooks or PyCharm, they will help you format your code as per the PEP 8 suggestions.

Why should you write Pythonic code?


Well firstly, you’re saving loads of time writing humongous piles of cowdung code, so you’re obviously becoming a smarter and more productive programmer. Python is a pretty slow language, and when you’re trying to do something in Python, which is acquired from another language like Java or C++, you’re going to worsen things. With idiomatic, Pythonic code, you’re improving the speed of your programs. Moreover, idiomatic code is far easier to comprehend and understand for other developers who are working on the same code. It helps a great deal when you’re trying to refactor someone else’s code.

Fearing Pythonic idioms


Well, I don’t mean the idioms themselves are scary. Rather, quite a few developers and organisations have begun discriminating on the basis of whether someone can or cannot write Pythonic code. This is wrong, because, at the end of the day, though the PEP 8 exists, the idea of the term Pythonic is different for different people. To some it might mean picking up a new style guide and improving the way you code. To others, it might mean being succinct and not repeating themselves.

It’s time we stopped judging people on whether they can or can’t write Pythonic code and instead, we should appreciate when someone is able to present readable, easily maintainable and succinct code. If you find them writing a bit of clumsy code, you can choose to talk to them about improving their design considerations.

And the world will be a better place!

If you’re interested in learning how to write more succinct and concise Python code, check out these resources:

Learning Python Design Patterns - Second Edition

Python Design Patterns [Video]

Python Tips, Tricks and Techniques [Video]