Как реализовать «позиционный параметр только» в пользовательской функции в Python? - PullRequest
0 голосов
/ 16 октября 2018

Как я могу реализовать «позиционный параметр только» для функции, определенной пользователем в python?

def fun(a, b, /):
    print(a**b)

fun(5,2)        # 25
fun(a=5, b=2)   # should show error

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

До Python 3.8 синтаксис / был только документальным.Начиная с 3.8 , вы можете использовать его для указания только позиционных параметров в определениях функций.Пример:

def pow(x, y, z=None, /):
    r = x**y
    if z is not None:
        r %= z
    return r

Теперь pow(2, 10) и pow(2, 10, 17) являются действительными вызовами, но pow(x=2, y=10) и pow(2, 10, z=17) являются недействительными.

См. PEP 570 дляболее подробная информация.

0 голосов
/ 16 октября 2018

Единственным решением было бы использование * -параметра, например, так:

def fun(*args):
    print(args[0] ** args[1])

Но это имеет свои собственные проблемы: вы не можете гарантировать, что вызывающая сторона предоставит ровно два аргумента;Ваша функция должна быть готова обработать 0 или 1 аргумент.(Достаточно легко проигнорировать дополнительные аргументы, поэтому я не буду вдаваться в подробности.)

...