¿Cómo agrego parámetros predeterminados a las funciones cuando uso sugerencias de tipo?

Resuelto josh asked hace 8 años • 3 respuestas

Si tengo una función como esta:

def foo(name, opts={}):
  pass

Y quiero agregar sugerencias de tipo a los parámetros, ¿cómo lo hago? La forma que supuse me da un error de sintaxis:

def foo(name: str, opts={}: dict) -> str:
  pass

Lo siguiente no arroja un error de sintaxis, pero no parece la forma intuitiva de manejar este caso:

def foo(name: str, opts: dict={}) -> str:
  pass

No puedo encontrar nada en la typingdocumentación. ni en una búsqueda en Google.

Editar: no sabía cómo funcionaban los argumentos predeterminados en Python, pero por el bien de esta pregunta, mantendré los ejemplos anteriores. En general es mucho mejor hacer lo siguiente:

def foo(name: str, opts: dict=None) -> str:
  if not opts:
    opts={}
  pass
josh avatar Aug 03 '16 01:08 josh
Aceptado

Tu segunda forma es correcta.

def foo(opts: dict = {}):
    pass

print(foo.__annotations__)

esto produce

{'opts': <class 'dict'>}

Es cierto que no figura en PEP 484 , pero las sugerencias de tipo son una aplicación de anotaciones de funciones, que están documentadas en PEP 3107. La sección de sintaxis deja claro que los argumentos de palabras clave funcionan con anotaciones de funciones de esta manera.

Recomiendo encarecidamente no utilizar argumentos de palabras clave mutables. Más información aquí .

noɥʇʎԀʎzɐɹƆ avatar Aug 02 '2016 18:08 noɥʇʎԀʎzɐɹƆ

Si estás usando la escritura (introducida en Python 3.5), puedes usar typing.Optional, donde Optional[X]equivale a Union[X, None]. Se utiliza para señalar que Nonese permite el valor explícito de . De escribir. Opcional :

def foo(arg: Optional[int] = None) -> None:
    ...
Tomasz Bartkowiak avatar Jun 19 '2019 14:06 Tomasz Bartkowiak

Recientemente vi esta frase:

def foo(name: str, opts: dict=None) -> str:
    if opts is None:
        opts = {}
    pass  # ...
Kirkalicious avatar Jun 05 '2019 20:06 Kirkalicious