在Python方法中传递变量列表或字典会比传递*args更简洁吗?你知道吗
例如
def function(a, *argv):
print('First variable:', a)
for k in argv:
print('Additional variable:',k)
与相同
def function(a, list):
print('First variable:', a)
for k in list:
print('Additional variable:',k)
但在第二个参数中传递了一个列表。我认为使用*args通常会在程序中造成额外的错误,因为参数长度只需要比强制参数长度长。请解释一下*args在哪些情况下真的有用?谢谢
当一个
list
(或dict
)可以做同样的任务时,为什么*args
(或**kwargs
)本质上是必需的,这是一个公平的问题。关键原因是函数的**调用方事先不知道参数的数目**。我将试着结合您所分享的特定场景来解释这一点。你知道吗假设我们有下面的函数,它查找传入的所有整数的和。(为了演示,我放弃了
sum
内置函数,请耐心听我说:)对于未知数量的参数,调用它的次数未知。你知道吗
如果需要发送
list
参数,do_add
函数可能如下所示:首先,您正在加载内存和一个额外的列表对象,这个列表对象仅仅是为了函数调用而创建的。其次,如果您必须向列表中添加更多的项,我们可能需要调用另一个列表方法,例如append或extend。你知道吗
但是如果遵循
*args
方法,就可以避免创建额外的列表,而只关注函数调用。如果需要添加更多的参数,只需添加另一个用逗号分隔的参数,而不需要调用append或extend方法。你知道吗假设您想用
1000
参数调用这个函数n
次。它将导致每次创建n * 1000
个新的列表对象。但是使用可变参数方法,您可以直接调用它。你知道吗第一个函数接受:
第二个不会。第二个你需要:
原则上,第一个参数是在函数可以有任意数量的参数时使用的(想想:
print
),而第二个参数指定总是有第二个参数,它是一个iterable(不一定是一个列表,不管名称如何)当您必须在第一级函数中只提取一些(或没有)参数,然后在不知道细节的情况下将其他参数传递给其他内部函数时,传递*args非常有用。e、 g
相关问题 更多 >
编程相关推荐