首先,我了解到,在定义函数时,您必须首先放置位置参数,然后放置默认参数,以避免解释程序出现歧义。这就是为什么当我们尝试这样做时会引发错误。
例如在以下代码中,a和b在运行时无法评估,因为它会引发错误
def func(a=1,b):
return a+b
func(2)
({Error:non-default argument follows default argument
)
这是可以理解的。
但是,为什么以下导致错误。它不是在定义函数时发生的,而是在调用函数时发生的。
def student(firstname, standard,lastname):
print(firstname, lastname, 'studies in', standard, 'Standard')
student(firstname ='John','Gates','Seventh')
Error:positional argument follows keyword argument
我们不能同时传递带有关键字和不带有关键字的参数吗? [编辑]:问题不是可能的重复项,因为重复项讨论了定义默认参数的情况。我还没有定义它们。我只是问为什么我们不能混合使用关键字值参数和直接值参数。
答案 0 :(得分:0)
与错误完全相同:
Error:positional argument follows keyword argument
关键字参数后不能有位置参数。
您的示例就是一个很好的例子。
您将第一个参数指定为关键字参数。因此,现在解释器如何解释参数顺序是不明确的。第二个参数是否成为第一个参数?第二个参数?但是您已经指定了第一个参数(firstname='John'
),那么位置参数会发生什么?
def学生(名字,标准,姓氏): 打印(名字,姓氏,“学习地”,标准,“标准”)
student(firstname ='John','Gates','Seventh')
解释器将其解释为:
student(firstname ='John',standard='Gates',lastname='Seventh')
或
student(firstname ='John',standard='Gates',lastname='Seventh')
或
student(firstname ='John',firstname='Gates',lastname='Seventh')
那又怎么样:
student(lastname ='John','Gates','Seventh')
这吗?
student(lastname ='John',firstname='Gates',standard='Seventh')
还是这个?
student(lastname ='John',standard='Gates',firstname='Seventh')
祝您调试调试参数与调试参数相符。
答案 1 :(得分:0)
也许您应该尝试:
student('John', 'Gates', 'Stevehn')
我不知道您是否可以在调用函数的同时定义变量。
悉尼