For instance, I want:
def func(n=5.0,delta=n/10):
If the user has specified a delta, use it. If not, use a value that depends on n. Is this possible?
The language doesn't support such syntax.
The usual workaround for these situations(*) is to use a default value which is not a valid input.
def func(n=5.0, delta=None):
if delta is None:
delta = n/10
(*) Similar problems arise when the default value is mutable.
delta = delta if delta != None else n/10 for a one-linerdelta = delta or n/10 to be more pleasingdelta is not None here (!= None won't always do quite what you expect).These answers will work in some cases, but if your dependent argument (delta) is a list or any iterable data type, the line
if delta is None:
will throw the error
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
If your dependent argument is a dataframe, list, Series, etc, the following lines of code will work better. See this post for the idea / more details.
def f(n, delta = None):
if delta is f.__defaults__[0]:
delta = n/10
None(/np.nan/ np.NINF/np.PINF/etc.) and then have the function body compute the correct default.