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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4