Python将* args转换为列表

时间:2013-11-11 21:20:21

标签: python list args

我正在尝试学习如何使用* 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 个答案:

答案 0 :(得分:1)

在前两个参数之后迭代每个参数:

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允许你传入任意数量的参数。现在它将多个列表展平为一个。

答案 1 :(得分:0)

你不将args转换为列表... args是一个tupl,第一个元素是你的列表。阿格斯已经是个傻瓜了。只需将列表提供给函数即可。你不需要使用*。

答案 2 :(得分:0)

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

答案 3 :(得分: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)