xlabel python function parameter-passing iterable-unpacking argument-unpacking

xlabel - title python



¿Dónde están los operadores splat de python*y** válidos? (1)

Los operadores de desembalaje / desempaquetado * y ** difieren ampliamente en su aplicabilidad en las versiones de python (2.7, 3.x <3.5 y 3.x> = 3.5).

Por ejemplo:

| 2.7 | 3.1-3.4 | 3.5 ---------------------------------------------------------------------- function(*args) ✓ ✓ ✓ x, *y, z = [1, 2, 3, 4, 5] x ✓ ✓ {**x, **y} x x ✓

¿Hay más discrepancias entre las distintas versiones que me he perdido? Estoy mirando a través de PEP y Readmes, pero los documentos no están detallados con esto.


Alrededor de 1992 (no estoy seguro acerca de la versión Python). Esto es del archivo de gramática de 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+ :

Argumentos de palabras clave : Las funciones y métodos escritos en Python ahora se pueden llamar usando argumentos de palabras clave de la forma keyword = value .

Python 1.6+

Ahora hay una sintaxis especial que puede usar en lugar de la función apply() . f(*args, **kwds) es equivalente a apply(f, args, kwds) . También puede usar las variaciones f(a1, a2, *args, **kwds) y puede dejar una u otra fuera: f(*args) , f(**kwds) .

Python <= 2.7 :

El desempaquetado de los parámetros de la tupla se eliminó en Python 3.0.

PEP 3113 : Desempaquetado de parámetros de tupla eliminado. Ya no puede escribir def foo(a, (b, c)): ... Utilice def foo(a, b_c): b, c = b_c en def foo(a, b_c): b, c = b_c lugar.

Python 3.0+

PEP 3132 : Desembalaje Iterable Extendido . Ahora puedes escribir cosas como a, b, *rest = some_sequence . E incluso *rest, a = stuff . El resto del objeto es siempre una lista (posiblemente vacía); El lado derecho puede ser cualquier iterable.

PEP 3102 : argumentos de palabra clave solamente. Los parámetros con nombre que aparecen después de *args en la lista de parámetros deben especificarse mediante la sintaxis de palabras clave en la llamada. También puede usar un * simple en la lista de parámetros para indicar que no acepta una lista de argumentos de longitud variable, pero sí tiene argumentos de solo palabras clave

Python 3.5+

PEP 448 , generalizaciones de desempaque adicionales.

Por lo que sé, no hay una sola página que enumere todos los cambios de sintaxis. Los cambios de sintaxis por versión se enumeran en la sección Novedades de Python o puede consultar la especificación de gramática de cada versión para ver las diferencias.