Cómo solucionarlo: SyntaxError: el argumento posicional sigue al argumento de palabra clave en Python

En este artículo, discutiremos cómo corregir el error de sintaxis que es el argumento posicional que sigue al argumento de la palabra clave en Python.

Un argumento es un valor proporcionado a una función cuando llamas a esa función. Por ejemplo, mire el siguiente programa:

Python

# function
def calculate_square(num):
    return num * num
  
  
# call the function
result = calculate_square(10)
print(result)
Producción

100

La función de calcular_cuadrado() toma un número de argumento que es una entrada de número entero o decimal, calcula el cuadrado del número y devuelve el valor.

Palabra clave y argumentos posicionales en Python

Hay dos tipos de argumentos, a saber, palabra clave y posicional. Como sugiere el nombre, el argumento de la palabra clave se identifica mediante una función basada en alguna clave, mientras que el argumento posicional se identifica en función de su posición en la definición de la función. Echemos un vistazo a esto con un ejemplo.

Python

# function
def foo(a, b, c=10):
    print('a =', a)
    print('b =', b)
    print('c =', c)
  
  
# call the functions
print("Function Call 1")
foo(2, 3, 8)
print("Function Call 2")
foo(2, 3)
print("Function Call 3")
foo(a=2, c=3, b=10)

Salida :

Function Call 1
a = 2
b = 3
c = 8
Function Call 2
a = 2
b = 3
c = 10
Function Call 3
a = 2
b = 10
c = 3

Explicación :

  1. Durante la primera llamada a la función, proporcionamos 3 argumentos con cualquier palabra clave. Python interpretó en orden de cómo se han definido en la función que está considerando la posición de estas palabras clave.
  2. En la segunda llamada a la función, proporcionamos 2 argumentos, pero aun así se muestra el resultado debido a que proporcionamos 2 argumentos posicionales y la función tiene un valor predeterminado para el argumento final c . Por lo tanto, tiene en cuenta el valor predeterminado para el argumento final.
  3. En la tercera llamada de función, se proporcionan tres argumentos de palabras clave. El beneficio de proporcionar este argumento de palabra clave es que no necesita recordar las posiciones sino solo las palabras clave que se requieren para la llamada a la función. Estas palabras clave se pueden proporcionar en cualquier orden, pero la función las tomará como pares clave-valor y no en el orden en que se transmiten.

SyntaxError: el argumento posicional sigue al argumento de la palabra clave

En los 3 casos anteriores, hemos visto cómo Python puede interpretar los valores de los argumentos que se pasan durante una llamada de función. Ahora, consideremos el siguiente ejemplo que conduce a un SyntaxError .

Python

# function definition
def foo(a, b, c=10):
    print('a =', a)
    print('b =', b)
    print('c =', c)
  
    # call the function
print("Function Call 4")
foo(a=2, c=3, 9)

Salida :

File "<ipython-input-40-982df054f26b>", line 7
    foo(a=2, c=3, 9)
                 ^
SyntaxError: positional argument follows keyword argument

Explicación :

En este ejemplo, el error ocurrió debido a la forma en que pasamos los argumentos durante la llamada a la función. El argumento posicional de error sigue al argumento de palabra clave significa que si se usa algún argumento de palabra clave en la llamada a la función, siempre debe ir seguido de argumentos de palabra clave. Los argumentos posicionales se pueden escribir al principio antes de pasar cualquier argumento de palabra clave. Aquí, a=2 y c=3 son argumentos de palabras clave. El tercer argumento 9 es un argumento posicional. Python no puede interpretar esto en cuanto a qué clave contiene qué valor. La forma en que Python funciona en este sentido es que primero mapeará el argumento posicional y luego cualquier argumento de palabra clave si está presente.

Cómo evitar el error – Conclusión

Publicación traducida automáticamente

Artículo escrito por apathak092 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *