function argument dependent on another function argument?

Aaron Brady castironpi at
Sun Jan 18 16:49:29 CET 2009

On Jan 18, 9:36 am, Paul Rubin <http://phr...@NOSPAM.invalid> wrote:
> Steven D'Aprano <st... at> writes:
> > def foo(self, x, y=None):
> >     if y is None:
> >         y = self.a
> > I don't find that clumsy in the least. I find it perfectly readable and a
> > standard idiom.
> That has the same problem as the earlier version.  If the person
> passes None, they get self.a.  I prefer:
>     sentinel = object()
>     ...
>     def foo(x, y=sentinel):
>       if y is sentinel:
>           y = self.a

It is too bad that it is so much work to detect whether 'y' was passed
in the function call directly.  However, sentinel is just as good (or
nearly); at worst, you need one sentinel per argument per function,
which is possible to create, which has a specific meaning.  If you are
making systematic function calls, e.g. with a dictionary or list, you
can just use the sentinel in the dictionary.

More information about the Python-list mailing list