📜  如何修复:SyntaxError:位置参数遵循Python中的关键字参数

📅  最后修改于: 2022-05-13 01:54:50.870000             🧑  作者: Mango

如何修复:SyntaxError:位置参数遵循Python中的关键字参数

在本文中,我们将讨论如何修复Python中位置参数跟随关键字参数的语法错误

参数是在调用该函数时提供给该函数的值。例如,看看下面的程序——

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


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)


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)


输出
100

calculate_square()函数接受一个参数num ,它是一个整数或十进制输入,计算该数字的平方并返回该值。

Python中的关键字和位置参数

有两种参数,即关键字和位置。顾名思义,关键字参数由函数根据某个键标识,而位置参数则根据其在函数定义中的位置来标识。让我们用一个例子来看看这个。

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)

输出

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

说明

  1. 在第一次函数调用期间,我们提供了 3 个带有任意关键字的参数。 Python按照它们在考虑这些关键字位置的函数中的定义顺序进行解释。
  2. 在第二个函数调用中,我们提供了 2 个参数,但仍然显示输出,因为我们提供了 2 个位置参数,并且函数具有最后一个参数c的默认值。因此,它会为最终参数考虑默认值。
  3. 在第三个函数调用中,提供了三个关键字参数。提供此关键字参数的好处是您无需记住位置,只需记住函数调用所需的关键字。这些关键字可以按任何顺序提供,但函数会将它们作为键值对而不是按照它们传递的顺序。

SyntaxError:位置参数跟随关键字参数

在上述 3 个案例中,我们看到了Python如何解释函数调用期间传递的参数值。现在,让我们考虑以下导致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)

输出

File "", line 7
    foo(a=2, c=3, 9)
                 ^
SyntaxError: positional argument follows keyword argument

说明

在此示例中,由于我们在函数调用期间传递参数的方式而发生错误。错误位置参数跟随关键字参数意味着如果在函数调用中使用了任何关键字参数,那么它应该始终跟随关键字参数。位置参数可以在传递任何关键字参数之前写在开头。这里, a=2c=3是关键字参数。第三个参数9是一个位置参数。这不能被Python解释为哪个键持有什么值。 Python在这方面的工作方式是,它将首先映射位置参数,然后映射任何关键字参数(如果存在)。

如何避免错误 - 结论