Juha-Matti Santala

# I wish Python had Integer.times

An old adage says that we read the code more than we write it. To make code more readable, we pay attention to variable and function naming and the available structures in the language. Sometimes we use the language long enough that we become used to certain mechanisms and how they work.

## Looping `n` times

In Ruby, integers have a method Integer#times that returns an Enumerator with values from 0 to n-1. This means we can do:

``````5.times { | _ | puts "This is printed five times" }
# or even
5.times { puts "This is printed five times" }``````

In Python, to achieve functionally similar result, we use `range`:

``````for _ in range(5):
print('This is printed five times')``````

When I write Python though, I often would like to be clearer that I’m repeating something N times. Both `Integer#times` in Ruby and `range` in Python iterate over a range from 0 to n-1 but they read very differently.

In Python, one could also use itertools.repeat which takes two arguments: object to return and how many times it is repeated:

``````from itertools import repeat

for _ in repeat(None, 5):
print('This is printed five times')``````

I do have a suspicion though that often this would get flagged in code review and asked to switch to `range` which saves one import. And I guess most intermediate Python developers know how `range` work, making it understandable enough.

## A solution? Alias `range` with `times`

Every time I write `for _ in range(n)`, I wish there was an alias to use `for _ in times(n)`. I think it would make it clearer when reading that here we don’t care about values, just how many times the loop should be run.

I feel like this aliasing would be more pythonic than adding `times` method to `int` class. But it could also be that:

``````for _ in (5).times():
print('This is printed five times')``````

The difference between `range` and `times` is not huge but I feel it’s important. It conveys the message of what our code is doing. When we want to iterate over a range, we use `range` and when we want to just repeat something, we use `times`.