Search code examples
pythonoptional-arguments

Non-Standard Optional Argument Defaults


I have two functions:

def f(a,b,c=g(b)):
    blabla

def g(n):
    blabla

c is an optional argument in function f. If the user does not specify its value, the program should compute g(b) and that would be the value of c. But the code does not compile - it says name 'b' is not defined. How to fix that?

Someone suggested:

def g(b):
    blabla

def f(a,b,c=None):
    if c is None:
        c = g(b)
    blabla

But this doesn't work. Maybe the user intended c to be None and then c will have another value.


Solution

  • def f(a,b,c=None):
        if c is None:
            c = g(b)
    

    If None can be a valid value for c then you do this:

    sentinel = object()
    def f(a,b,c=sentinel):
        if c is sentinel:
            c = g(b)