I want to define a resize(h, w)
method, and I want to be able to call it in one of two ways:
resize(x,y)
resize(x)
Where, in the second call, I want y
to be equal to x
. Can I do this in the method definition or should I do something like resize(x,y=None)
and check inside:
if y is None:
y = x
Can I do this in the method definition
No. During the method definition there's no way to know what value x
might have at run-time. Default arguments are evaluated once at definition time, there's no way to save a dynamic value for y
.
or should I do something like
resize(x,y=None)
and check inside
exactly. This is a common idiom in Python.
To complete Jim's answer, in the case that None
is valid as a parameter value, you could use variable length arguments feature (positional, and/or keyword). Example of use for positional:
def resize(x,*args):
if args:
if len(args)>1:
raise Exception("Too many arguments")
y = args[0]
else:
y = x
in that example, you have to pass x
, but you can pass 0 or more extra positional arguments. Of course you have to do the checking manually, and you lose the y
keyword.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With