为什么我不能定义像fun一样的函数(**kwargs,*args)?

zhe*_*hua 2 python

当许多蟒蛇书介绍它们时,args总是在kwargs之前.我只是交换它们的位置,但解释器告诉我这是一个无效的语法.有人能解释一下吗?

Sha*_*ank 10

在关键字参数之后定义位置参数是违反Python的语法的.那么你应该如何定义一个首先接受关键字参数字典然后是位置参数元组的函数呢?

有关规则背后的基本原理的解释,想象一下,如果您正在编写Python的编译器,该编译器应该将给定的脚本转换为字节码.

假设你有一个功能:

def func(a, b=2, c=3):
    print a,b,c
Run Code Online (Sandbox Code Playgroud)

然后有人用以下方法调用该函数

func(c=1,b=2,3)
Run Code Online (Sandbox Code Playgroud)

你看到了歧义吗?你是如何应该告诉我们,如果程序员意味着分配,去年"3"到最后剩下的参数"a"或如果他的意思将其分配到"C",而只是做一个错字c=1,实际上的意思a=1.如果你正在写语法规则的任何语言,也不会要明确定义一组规则,这样你可以绝对肯定什么程序员想做的事,而不是猜测什么程序员想要做什么?

当然我猜有Interlisp和其他神秘的语言试图"猜测"程序员正在尝试做什么,但Python不是其中之一.