Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

444
Vistas
¿Qué hacen * (estrella única) y / (barra oblicua) como parámetros independientes?

En la siguiente definición de función, ¿qué representan * y / ?

 def func(self, param1, param2, /, param3, *, param4, param5): print(param1, param2, param3, param4, param5)

NOTA: No confundir con los asteriscos simples|dobles en *args | **kwargs ( resuelto aquí )

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Como se menciona en los documentos , la barra inclinada es solo para argumentos posicionales, como dice la documentación:

Hay una nueva sintaxis de parámetro de función / para indicar que algunos parámetros de función deben especificarse posicionalmente y no pueden usarse como argumentos de palabra clave. Esta es la misma notación que muestra help() para las funciones de C anotadas con la herramienta Argument Clinic de Larry Hastings.

Y para el asterisco, se menciona aquí en los documentos :

Para un parámetro con un valor predeterminado, el argumento correspondiente se puede omitir de una llamada, en cuyo caso se sustituye el valor predeterminado del parámetro. Si un parámetro tiene un valor predeterminado, todos los parámetros siguientes hasta el " * " también deben tener un valor predeterminado; esta es una restricción sintáctica que no está expresada por la gramática.


 def func(self, param1, param2, /, param3, *, param4, param5): print(param1, param2, param3, param4, param5)

Entonces, las formas de llamar a esto serían:

 obj.func(10, 20, 30, param4=50, param5=60)

Y:

 obj.func(10, 20, param3=30, param4=50, param5=60)
over 4 years ago · Santiago Trujillo Denunciar

0

Hay una nueva sintaxis de parámetro de función / para indicar que algunos parámetros de función deben especificarse posicionalmente y no pueden usarse como argumentos de palabras clave. [ Esto es nuevo en Python 3.8 ]

La documentación especifica algunos de los casos de uso/beneficios de los parámetros solo posicionales

  1. Permite que las funciones puras de Python emulen completamente los comportamientos de las funciones codificadas en C existentes. Por ejemplo, la función pow() incorporada no acepta argumentos de palabras clave:

     def pow(x, y, z=None, /): "Emulate the built in pow() function" r = x ** y return r if z is None else r%z
  2. Otro caso de uso es excluir argumentos de palabras clave cuando el nombre del parámetro no es útil. Por ejemplo, la función len() incorporada tiene la firma len(obj, /) . Esto evita llamadas incómodas como:

     len(obj='hello') # The "obj" keyword argument impairs readability
  3. Otro beneficio de marcar un parámetro como solo posicional es que permite cambiar el nombre del parámetro en el futuro sin riesgo de romper el código del cliente. Por ejemplo, en el módulo de estadísticas, el nombre del parámetro dist puede cambiarse en el futuro. Esto fue posible con la siguiente especificación de función:

     def quantiles(dist, /, *, n=4, method='exclusive') ...

Donde como * se usa para obligar a la persona que llama a usar argumentos con nombre . Este es uno de los casos de uso de argumentos con nombre.

Entonces, dado el método,

 def func(self, param1, param2, /, param3, *, param4, param5): print(param1, param2, param3, param4, param5)

Debe llamar con

 obj.func(10, 20, 30, param4=50, param5=60)

o

 obj.func(10, 20, param3=30, param4=50, param5=60)

es decir,

  1. param1 , param2 debe especificarse posicionalmente .
  2. param3 se puede llamar con posicional o palabra clave .
  3. param4 y param5 deben llamarse con un argumento de palabra clave .

MANIFESTACIÓN:

 >>> class MyClass(object): ... def func(self, param1, param2, /, param3, *, param4, param5): ... return param1, param2, param3, param4, param5 ... >>> obj = MyClass() >>> >>> assert obj.func(10, 20, 30, param4=40, param5=50), obj.func( ... 10, 20, param3=30, param4=40, param5=50 ... )
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda