[Python-Dev] Signature of function with default value uncapturable in Python and C (original) (raw)

Terry Reedy tjreedy at udel.edu
Thu Jan 16 04:14:23 CET 2014


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



More information about the Python-Dev mailing list