[Tutor] What's the logic behind parameters and arguments?

Steven D'Aprano steve at pearwood.info
Tue Mar 29 11:55:56 CEST 2011

David wrote:
> Dear list readers,
> the command find() takes two parameters, start and end, e.g.:
> find(substring[, start[, end]]).
> Here, a substring is located UP TO BUT NOT INCLUDING the optional
> parameter 'end'.
> Compare this to replace(). replace() comes with the count argument, e.g.:
> replace(old, new[, count])
> But here the substring is replaced UP TO AND INCLUDING to the optional
> argument count.
> My question is how I am best to make sense of this discrepancy. Is there
> any logic behind this that might make my life easier once I become aware
> of it? I know of the indexing rules, but this here is obviously not the
> same. I am curious...

The two functions do different things, they work differently, they take 
different arguments.

replace takes an inclusive `count` parameter because that's the most 
sensible and obvious way to implement a count parameter. "I want to 
replace the first five words" suggests a count parameter of 5, not 6. A 
count of 1 should replace 1 time, not 0 times.

The start and end parameters of find work like slices, where the 
arguments act to slice *between* items:

So, completely different, and there's no discrepancy.

As for the question why replace doesn't take a start and end argument 
like find, *shrug* perhaps it should. But it already has three 
parameters, another two will start overloading it.


More information about the Tutor mailing list