[Python-ideas] Explicit variable capture list
Steven D'Aprano
steve at pearwood.info
Tue Jan 26 09:40:23 EST 2016
On Tue, Jan 26, 2016 at 10:52:59AM +1100, Chris Angelico wrote:
> On Tue, Jan 26, 2016 at 10:21 AM, Steven D'Aprano <steve at pearwood.info> wrote:
> > - It allows us to avoid the "default argument" idiom, in cases where we
> > really don't want the argument, we just want to capture the value. There
> > are a lot of functions which have their parameter list polluted by
> > extraneous arguments that should never be used by the caller simply
> > because that's the only way to get early binding/value capturing.
> >
>
> Can you actually name a few, please?
The random module is the first example that comes to mind.
Up until 3.3, the last argument was spelled "int" with no underscore:
py> inspect.signature(random.randrange)
<Signature (start, stop=None, step=1, _int=<class 'int'>)>
random.shuffle also used to have an int=int argument, but it seems to be
gone in 3.5.
> I went digging earlier, and
> couldn't find any really good examples in the stdlib - they're mostly
> internal functions (underscore-prefixed) that shouldn't be being
> called from outside their own module anyway. Maybe this isn't as
> common an issue as I'd thought.
Obviously you can get away with more junk in a private function than a
public function, but it's still unpleasant. Even if it only effects the
maintainer of the library, not the users of it, a polluted signature is
still polluted.
--
Steve
More information about the Python-ideas
mailing list