How can I implement "positional-only parameter" for a function that is user defined in python?
def fun(a, b, /):
    print(a**b)
fun(5,2)        # 25
fun(a=5, b=2)   # should show error
                Before Python 3.8, the / syntax was only documentational. Starting from 3.8, you can use it for specifying positional-only parameters in function definitions. Example:
def pow(x, y, z=None, /):
    r = x**y
    if z is not None:
        r %= z
    return r
Now pow(2, 10) and pow(2, 10, 17) are valid calls, but pow(x=2, y=10) and pow(2, 10, z=17) are invalid.
See PEP 570 for more details.
Update: this answer will become increasingly out-dated; please see https://stackoverflow.com/a/56149093/1126841 instead.
The only solution would be to use a *-parameter, like so:
def fun(*args):
    print(args[0] ** args[1])
But this comes with its own problems: you can't guaranteed the caller will provide exactly two arguments; your function has to be prepared to handle 0 or 1 arguments. (It's easy enough to ignore extra arguments, so I won't belabor the point.)
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