0

我正在尝试学习如何使用 *args 并想出了这个。

alist =[5,2,6,1,2]
blist =[1,5,2,4,1]

def argstest(var1, var2, *args):
    print "var1", var1
    print "var2", var2

    temp = list(args)[0]

    for i in temp:
        if i > 3:
           print i

argstest(5, 8, alist, blist)
>>>>> var1 5
>>>>> var2 8
>>>>> 5
>>>>>>6
>>>>>>5
>>>>>>4

虽然我看到这可能非常有用,但我首先担心的是

temp = list(args)[0]  

是一种非常奇怪的转换*args成列表的方式,第二个是这不是使用*args.

我的问题是转换*args为列表的标准方法是什么?

另外,这甚至是编写以这种方式执行任务的函数的正确方法吗?

4

4 回答 4

2

在前两个参数之后遍历每个参数:

alist =[5,2,6,1,2]
blist =[1,5,2,4,1]

def argstest(*args):
    for i in args[2:]
        for j in i:
            if j > 3:
                print j

argstest(5, 8, alist, blist)

您会看到 *args 允许您传入任意数量的参数。现在它将多个列表扁平化为一个。

于 2013-11-11T21:29:29.933 回答
0

您不会将 args 转换为列表... args 是一个元组,第一个元素是您的列表。Args 已经是一个元组。只需将列表提供给函数。您不需要使用 *.

于 2013-11-11T21:23:43.073 回答
0

'*' 将所有未命名的参数组合成元组,例如 *args。您还应该查看将所有命名参数转换为字典的 **args(编写 args 只是一种约定)。这是在初学者和中级程序员之间跨越的一步。当你做 OOP 和使用继承时,这两件事会被广泛使用。

于 2013-11-11T21:31:40.333 回答
0

您不需要使用 temp 变量,只需遍历 args 并打印出每个列表。

alist =[5,2,6,1,2]
blist =[1,5,2,4,1]

def argstest(var1, var2, *args):
    print "var1", var1
    print "var2", var2

    for i in args:
        if i > 3:
           print i

argstest(5, 8, alist, blist)
于 2013-11-11T21:44:53.207 回答