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.

``````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]

I'm a technology enthusiast who designs and creates learning content for IT professionals, in my role as a Category Manager at Packt. I also blog about what's trending in technology and IT. I'm a foodie, an adventure freak, a beard grower and a doggie lover.

1. Thank you, Aaron. I understand your point about *why* be pythonic: “You’re saving loads of time writing humongous piles of cowdung code, so you’re obviously becoming a smarter and more productive programmer.” I also sense that an employer would want to see Pythonic code as often as possible during the programming interview. Eye-opening article.

2. Having been sorta conscripted into being a Python developer, I find the “Pythonic” code much harder to read and understand. Especially the example where you double if even.

The single line I find is now doing too much and makes it hard to follow the flow if the code. Having it split across more lines vastly reduces the mental load of trying to parse out the line by clearly defining three units of work, and in a more natural way: ‘For each item in the list, if even, double it”
Vs. “Double each item in the list if [the item] is even”