On 1/15/2014 9:25 PM, Vajrasky Kok wrote:
Dear friends,

from itertools import repeat
list(repeat('a', 3))
['a', 'a', 'a']
list(repeat('a', 0))
[]
repeat.__doc__
'repeat(object [,times]) -> create an iterator which returns the
object\nfor the specified number of times.  If not specified, returns
the object\nendlessly.'

I think that the doc should say that a negative value is treated as 0 and that this is enough for a tracker issue after you get more feedback or gather more info. There is at least one other builtin/stdlib function that does this.

If you omit the times argument:

list(repeat('a'))
... unlimited of a .... sometimes it can hang your machine ....

In the C code it self, the default value of variable handling times
argument is -1.

Is is necessary to give times a pseudo-default? What is done in other places (which are many) where a parameter is optional, with no default?

It checks how many arguments you give to the function.
So if you give -1 directly:

list(repeat('a', -1))
[]

Negative value of times argument means 0.

So what is the correct signature of this function? The value is not
really capturable in Python and C.

The signature in the doc is correct: times is optional, with no default value. Instead, the function has a default behavior that does not need the value. There are other examples. The (nearly) 'equivalent' Python code in the doc fakes this with times=None, but passing None fails. I think the same issue occurs in the random module.

repeat(object [,times = unlimited]) ????

Can we do this in Clinic? If not, should we?

I should hope that Clinic (and signature objects) can handle no-default optional args, as there are several.

--
Terry Jan Reedy

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to