Наскоро изучавах *args
и **kwargs
в python и се натъкнах, че в python 3 може да се използва голо *
, както в примера от заглавието, за да се посочи, че след него не са разрешени позиционни аргументи.
Проблемът е, че не виждам как съответства на формалната дефиниция или „списък с аргументи“ в справка. Има следната дефиниция на списък с аргументи:
argument_list ::= positional_arguments ["," keyword_arguments]
["," "*" expression] ["," keyword_arguments]
["," "**" expression]
| keyword_arguments ["," "*" expression]
["," keyword_arguments] ["," "**" expression]
| "*" expression ["," keyword_arguments] ["," "**" expression]
| "**" expression
Единственият начин, по който виждам, че е валидно, е expression
да е празно, но не можах да разбера как може да се случи.
В случай, че приемем, че expression
може да е празно, тогава следните дефиниции трябва да са валидни:
def foo(*)
def bar(*,**kwargs)
Тези дефиниции нямат смисъл, тъй като *
изисква ключови аргументи след него.
Така че ще се радвам на всякакви пояснения по темата. какво ми липсва Или горното БНФ не е съвсем правилно?