*参数vs列表作为Python中的参数

*参数vs列表作为Python中的参数,python,python-3.x,args,Python,Python 3.x,Args,我只是想了解,当我们将它作为参数传递时,当列表可以完成相同的工作时,为什么我们使用*args。在哪些情况下我们真的需要*args,其中list作为参数将无法执行该操作 list =[1,2,3,4,5,6,7] def method1(args): for i in args: print(i*2) method1(list) 我没有发现任何差异。如果我错了,请纠正我。区别在于,在第二种情况下,您可以传递任意数量的参数,而在第一种情况下,它将抛出错误 案例1: lst

我只是想了解,当我们将它作为参数传递时,当
列表可以完成相同的工作时,为什么我们使用
*args
。在哪些情况下我们真的需要
*args
,其中
list
作为参数将无法执行该操作

list =[1,2,3,4,5,6,7]
def method1(args):
    for i in args:
        print(i*2)
method1(list)

我没有发现任何差异。如果我错了,请纠正我。

区别在于,在第二种情况下,您可以传递任意数量的参数,而在第一种情况下,它将抛出错误

案例1

lst = [1,2,3,4,5,6,7]
a = 1
b = 2

def method1(args):
    for i in args:
        print(i*2)

method1(lst, a, b)
lst = [1,2,3,4,5,6,7]
a = 1

def method1(*args):
    for i in args:
        print(i*2)

method1(lst, a)
lst = [1,2,3,4,5,6,7]
a = 1
b = 2

def method1(*args):
    for i in args:
        print(i*2)

method1(lst, a, b)
…失败,类型错误为:method1()接受1个位置参数,但提供了3个位置参数“

案例2(i)

lst = [1,2,3,4,5,6,7]
a = 1
b = 2

def method1(args):
    for i in args:
        print(i*2)

method1(lst, a, b)
lst = [1,2,3,4,5,6,7]
a = 1

def method1(*args):
    for i in args:
        print(i*2)

method1(lst, a)
lst = [1,2,3,4,5,6,7]
a = 1
b = 2

def method1(*args):
    for i in args:
        print(i*2)

method1(lst, a, b)
…有效

案例2(ii)

lst = [1,2,3,4,5,6,7]
a = 1
b = 2

def method1(args):
    for i in args:
        print(i*2)

method1(lst, a, b)
lst = [1,2,3,4,5,6,7]
a = 1

def method1(*args):
    for i in args:
        print(i*2)

method1(lst, a)
lst = [1,2,3,4,5,6,7]
a = 1
b = 2

def method1(*args):
    for i in args:
        print(i*2)

method1(lst, a, b)

…起作用,依此类推,您可以传递任意数量的参数。

区别在于,在第二种情况下,您可以传递任意数量的参数,而在第一种情况下,它将抛出错误

def method1(args):
    print(args)
method1(5) it will print 5
method1() method1() missing 1 required positional argument: 'args'
method1(2,6) TypeError: method1() takes 1 positional argument but 2 were given
案例1

lst = [1,2,3,4,5,6,7]
a = 1
b = 2

def method1(args):
    for i in args:
        print(i*2)

method1(lst, a, b)
lst = [1,2,3,4,5,6,7]
a = 1

def method1(*args):
    for i in args:
        print(i*2)

method1(lst, a)
lst = [1,2,3,4,5,6,7]
a = 1
b = 2

def method1(*args):
    for i in args:
        print(i*2)

method1(lst, a, b)
…失败,类型错误为:method1()接受1个位置参数,但提供了3个位置参数“

案例2(i)

lst = [1,2,3,4,5,6,7]
a = 1
b = 2

def method1(args):
    for i in args:
        print(i*2)

method1(lst, a, b)
lst = [1,2,3,4,5,6,7]
a = 1

def method1(*args):
    for i in args:
        print(i*2)

method1(lst, a)
lst = [1,2,3,4,5,6,7]
a = 1
b = 2

def method1(*args):
    for i in args:
        print(i*2)

method1(lst, a, b)
…有效

案例2(ii)

lst = [1,2,3,4,5,6,7]
a = 1
b = 2

def method1(args):
    for i in args:
        print(i*2)

method1(lst, a, b)
lst = [1,2,3,4,5,6,7]
a = 1

def method1(*args):
    for i in args:
        print(i*2)

method1(lst, a)
lst = [1,2,3,4,5,6,7]
a = 1
b = 2

def method1(*args):
    for i in args:
        print(i*2)

method1(lst, a, b)
…有效等等,您可以传递任意数量的参数

def method1(args):
    print(args)
method1(5) it will print 5
method1() method1() missing 1 required positional argument: 'args'
method1(2,6) TypeError: method1() takes 1 positional argument but 2 were given
为了避免这种情况,我们使用

def method1(*args):
    print(args)
method1(1, 2, '3')
(1, 2, '3') print this
因此,当我们事先不知道需要传入多少个参数时,*args很有用

为了避免这种情况,我们使用

def method1(*args):
    print(args)
method1(1, 2, '3')
(1, 2, '3') print this

因此,当我们事先不知道需要传入多少个参数时,*args很有用。

是的,您的示例存在缺陷,并且没有充分展示如何在
*args
中传入数量可变的参数。(您的第一个示例仅传递1项。这是一个列表。)@Paritossingh在本例中,OP知道它们是什么(以及参数列表解包),只是不知道它们什么时候有用。我认为这是一个主题,比如问一个feature.yes的用法,我认为dupe目标上的答案充分说明了这一点。但是如果OP不同意,他们可以这么说。是的,你的例子是有缺陷的,并且没有充分展示如何在
*args
中传递数量可变的参数。(您的第一个示例仅传递1项。这是一个列表。)@Paritossingh在本例中,OP知道它们是什么(以及参数列表解包),只是不知道它们什么时候有用。我认为这是一个主题,比如问一个feature.yes的用法,我认为dupe目标上的答案充分说明了这一点。但如果OP不同意,他们可以这么说。