2013-01-13 13 views
85

Co robi pusta gwiazdka w argumentach funkcji?Python bare asterisk w argumencie funkcji

Kiedy spojrzałem na module marynowane, widzę to: (http://docs.python.org/3.3/library/pickle.html#pickle.dump)

pickle.dump(obj, file, protocol=None, *, fix_imports=True) 

Znam około pojedyncza i podwójna gwiazdka poprzedzająca argumenty (dla zmiennej liczby argumentów), ale to nic poprzedza. I jestem pewien, że to nie ma nic wspólnego z marynatą. To prawdopodobnie tylko przykład tego wydarzenia. I tylko dowiedział się jego imię, kiedy wysłałem to do tłumacza:

>>> def func(*): 
...  pass 
... 
    File "<stdin>", line 1 
SyntaxError: named arguments must follow bare * 

Jeśli ma to znaczenie, jestem na Python 3.3.0.

Odpowiedz

85

Bare * służy zmusić rozmówcę używać nazwanych argumentów - nie można więc zdefiniować funkcję z * jako argument gdy nie masz następujące argumenty kluczowe.

Aby uzyskać więcej informacji, zobacz this answer lub Python 3 documentation.

+0

Należy zauważyć, że wszystkie argumenty pozycyjne (bez nazwy), w tym '* argumenty', muszą wystąpić przed pustym' * '. – BallpointBen

17

Podczas gdy oryginalna odpowiedź całkowicie odpowiada na pytanie, wystarczy dodać trochę powiązanych informacji. Zachowanie pojedynczej gwiazdki pochodzi od PEP-3102. Cytowanie dana sekcja:

The second syntactical change is to allow the argument name to 
be omitted for a varargs argument. The meaning of this is to 
allow for keyword-only arguments for functions that would not 
otherwise take a varargs argument: 

    def compare(a, b, *, key=None): 
     ... 

prostym językiem, oznacza to, że aby przekazać wartość dla klucza, trzeba będzie jawnie przekazać go jako key="value".

Powiązane problemy