Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

446
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!