example python python-3.x parameter-passing

example - Python desnudo asterisco en el argumento de la función



send args to python (2)

¿Qué hace un asterisco desnudo en los argumentos de una función?

Cuando miré el módulo Pickle, veo esto: (http://docs.python.org/3.3/library/pickle.html#pickle.dump)

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

Sé acerca de un asterisco simple y doble que precede a los argumentos (para el número variable de argumentos), pero esto no precede a nada. Y estoy bastante seguro de que esto no tiene nada que ver con Pickle. Probablemente sea solo un ejemplo de que esto suceda. Solo aprendí su nombre cuando le envié esto al intérprete:

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

Si es importante, estoy en Python 3.3.0.


Bare * se usa para forzar al llamante a usar argumentos con nombre, por lo que no puede definir una función con * como argumento cuando no tiene los siguientes argumentos de palabra clave.

Consulte esta respuesta o la documentación de Python 3 para obtener más detalles.


Si bien la respuesta original responde la pregunta por completo, solo agrega un poco de información relacionada. El comportamiento del asterisco individual se deriva de PEP-3102 . Citando la sección relacionada:

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): ...

En inglés simple, significa que para pasar el valor de la clave, tendrá que pasarlo explícitamente como key="value" .