13

Operatory rozpakowania/rozproszone * i ** różnią się znacznie pod względem ich zastosowania w różnych wersjach pythonowych (2.7, 3.x < 3.5 i 3.x> = 3.5).Gdzie są operatory liter Pythona * i ** poprawne?

Na przykład:

        | 2.7 | 3.1-3.4 | 3.5 
---------------------------------------------------------------------- 
function(*args)       ✓   ✓   ✓  

x, *y, z = [1, 2, 3, 4, 5]    x   ✓   ✓  

{**x, **y}        x   x   ✓  

czy są jakieś dalsze rozbieżności między różnymi wersjami że tęskniłam? Przeglądam PEP i Readmes, ale dokumenty nie są w tym szczegółowe.

Odpowiedz

17

Około 1992 r. (Nie jestem pewien wersji Pythona). Jest to z pliku Grammar z Python 1.0.1.

# 06-Apr-92: 
# Use only '*' for varargs list 

# 31-Mar-92: 
# Tighten syntax for try statements 

# 27-Feb-92: 
# Allow NEWLINE* after eval input 

# 16-Jan-92: 
# Added '*' as alternative for '+' in varargs syntax 
# (Not sure which alternative is better yet.) 

# 11-Jan-92: 
# Variable length argument list syntax added: def f(a, b, +rest): ... 

Python 1.4+:

Złożone Argumenty: Funkcje i metody napisany w Pythonie można teraz nazywane przy użyciu słów kluczowych argumentów w postaci keyword = value.

Python 1.6+

Jest teraz specjalnej składni, które można używać zamiast funkcji apply() . f(*args, **kwds) jest odpowiednikiem apply(f, args, kwds). Ty możesz również używać odmian f(a1, a2, *args, **kwds) i możesz zostawić jedno: lub drugie: f(*args), f(**kwds).

Python <= 2.7:

parametr Tuple rozpakowaniu usunięto Pythonie 3.0.

PEP 3113: Tuple parametr rozpakowaniu usunięte. Nie można już pisać def foo(a, (b, c)): .... Zamiast tego użyj def foo(a, b_c): b, c = b_c.

Python 3.0+

PEP 3132: Rozszerzona iterowalny Rozpakowanie. Możesz teraz pisać takie rzeczy, jak a, b, *rest = some_sequence. A nawet *rest, a = stuff. Obiektem pozostałym jest zawsze (ewentualnie pusta) lista; prawa strona może być dowolna.

PEP 3102: Tylko argumenty dotyczące słów kluczowych. Nazwane parametry występujące po *args na liście parametrów muszą być określone przy użyciu składni słów kluczowych w wywołaniu.Można również skorzystać z gołą * na liście parametrów do wskazania że nie przyjmują listę argumentów o zmiennej długości, ale masz tylko słowa kluczowe argumenty

Python 3.5+

PEP 448 , dodatkowe generowanie rozpakowywania.


O ile wiem, nie ma strony, która zawiera wszystkie zmiany składni. Zmiany składni wersji wersji są wymienione w sekcji What's new in Python lub można sprawdzić specyfikację gramatyki każdego wydania, aby zobaczyć różnice.

+0

Niezłe badania; kiedy wprowadzono składnię "varargs" (* name)? To wcześniejsza wersja Pythona 3 (lub prawdopodobnie została przeniesiona) –

+0

@Chris_Rands Czy chodziło Ci o to, które zostało użyte w zadaniu? –

+0

Miałem na myśli 'max (* (1,2,3))' –

Powiązane problemy