Python中不可理解的语法-将变量作为参数传递

Python中不可理解的语法-将变量作为参数传递,python,function,Python,Function,我找不到为什么要使用这两个调用,以及这两个调用之间是否存在任何差异: someFunction(10) 及 函数的初始调用使用位置参数-即,它将“10”与参数的第一个参数匹配 但是,如果使用关键字参数显式调用该函数,它将使用指定的关键字匹配该值 def kwarg_func(x = 5, y = 10, z = 2): return x * y * z # will return 200 (10 * 10 * 2) print(kwarg_func(10)) # will retur

我找不到为什么要使用这两个调用,以及这两个调用之间是否存在任何差异:

someFunction(10)


函数的初始调用使用位置参数-即,它将“10”与参数的第一个参数匹配

但是,如果使用关键字参数显式调用该函数,它将使用指定的关键字匹配该值

def kwarg_func(x = 5, y = 10, z = 2):
    return x * y * z

# will return 200 (10 * 10 * 2)
print(kwarg_func(10))
# will return 10 (5 * 1 * 2)
print(kwarg_func(y = 1))
# will throw an error since keyword 'a' is undefined
print(kwarg_func(a = 1))

所以,之所以要传递x=10,是因为它是a,或者x是在变量中设置的

def somefunction(x=5):
    print(x*x)

somefunction(x=10)
这将导致10*10,因此为100

这背后的原因是Python接受有效的位置参数:

def somefunction(x)
    #dosomestuff
其中,对于可以传递给它的参数,somefunction中的x位于位置0

其中:

def somefunction(x=10)
    #dosomestuff
是关键字参数(但也可以使用它的位置)

位置参数必须在关键字参数之前


python教程对此有很好的理解:

您的问题有点模糊,这取决于您的函数构造。
假设您有一个函数:

def someFunction(x):
    return x

然后您可以通过
someFunction(10)
someFunction(x=10)
调用它,后者更详细,但第一个就足够了。查找
args
**kwargs
以更好地理解,例如,

args和
kwargs
具有重要意义。首先,
10
arg
(参数),
x=10
(关键字参数)被称为
kwarg

这两者之间最基本的区别是arg按顺序排列,而kwarg不按顺序排列。 kwargs可以按任何顺序提供

在阅读此答案之前,我希望您对python默认参数有一些了解

def func(a=25, b, c, d=3, e, f=2, g, h=1, i):
    return a * b * c * d * e * f * g * h * i
在这个函数中,可以传递所有参数,也可以只传递基本参数 基本参数有
b
c
e
g
i

默认参数是
a
d
f
h
。 因此,问题变成了如何只为基本参数传递值


答案是夸尔斯。因为对于kwargs来说,顺序并不重要,我们可以将参数作为
func(b=3,c=4,e=2,g=10)
func(c=4,g=10,b=3,e=2)
来传递。

如果您有一个名为
x
的参数,那么何时使用它?关键字参数可以按任何顺序传递,但位置参数不能。参见args vs kwargs。
def func(a=25, b, c, d=3, e, f=2, g, h=1, i):
    return a * b * c * d * e * f * g * h * i