Discuss / Python / "最神奇的是通过一个tuple和dict,你也可以调用上述函数" 实例代码错误

"最神奇的是通过一个tuple和dict,你也可以调用上述函数" 实例代码错误

Topic source
f1(*args, **kw)
其结果不应是:
a = 1 b = 2 c = 3 args = () kw = {'d': 99, 'x': '#'}
而是:
a = 1 b = 2 c = 3 args = (4,) kw = {'d': 99, 'x': '#'}

f2(*args, **kw)
则会出错,因为d是一个关键字参数,Python会判断args是给予a, b, c的,故会报出位置参数数量错误

所以之后的这句:

所以,对于任意函数,都可以通过类似func(args, *kw)的形式调用它,无论它的参数是如何定义的。

也有误导性。

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

f2只有3个位置参数,把args改为:

args = (1, 2, 3)

再调用f2(*args,**kw)就好了

威廉小超

#3 Created at ... [Delete] [Delete and Lock User]

不过原文中 f1(args, *kw) 其结果不应是: a = 1 b = 2 c = 3 args = () kw = {'d': 99, 'x': '#'} 而是: a = 1 b = 2 c = 3 args = (4,) kw = {'d': 99, 'x': '#'}

这里的确写错了。

周文笑

#4 Created at ... [Delete] [Delete and Lock User]

威廉小超指出的问题是对的,文中确实写错了

taogebuaa

#5 Created at ... [Delete] [Delete and Lock User]

这个地方确实有问题

args=(1,2,3,4) f1函数调用参数时,4应该传给可变参数args,所以输出时应该输出 tupil形式即(4,)

args = (1, 2, 3, 4)
kw = {'d': 99, 'x': '#'}
f1(*args, **kw)

结果:

a: 1 b: 2 c: 3 args: (4,) kw: {'d': 99, 'x': '#'}

与非----

#7 Created at ... [Delete] [Delete and Lock User]

所以,对于任意函数,都可以通过类似func(args, *kw)的形式调用它,无论它的参数是如何定义的。

这句话没有问题,只要参数类型和数量符合涵数的要求就可以这样调用。调用形式不是一成不变的,而是要根据情况进行变化。


  • 1

Reply