如何在python中传递多个参数?

时间:2012-10-13 09:25:53

标签: python function parameters

我在python中实现8位加法器。 以下是加法器函数定义:

def add8(a0,a1,a2,a3,a4,a5,a6,a7,b0,b1,b2,b3,b4,b5,b6,b7,c0):

所有函数参数都是布尔值。 我已经实现了将int转换为二进制的函数:

def intTObin8(num):
    bits = [False]*8
    i = 7
    while num >= 1:
        if num % 2 == 1:
            bits[i] = True
        else:
            bits[i] = False
        i = i - 1
        num /= 2
    print bits
    return [bits[x] for x in range(0,8)]

我希望此函数返回8位。并使用以下两个函数:

add8(intTObin8(1),intTObin8(1),0)

所以问题是:如何使用一个函数传递8个参数?

2 个答案:

答案 0 :(得分:2)

一种方法:

add8(*(intTObin8(1) + intTObin8(1) + [0]))

将列表连接起来,然后将其作为参数传递给add8

如果您这样做了几次,可以将它放在另一个功能中:

def add8_from_bin8(a,b,c0):
    add8(*(a + b + [c0]))

add8_from_bin8(intTObin8(1), intTObin8(1), 0)

答案 1 :(得分:2)

有几件事:

你的add8中没有16个参数。如果你想这样做的话,你需要两个列表,每个列表有8个元素。

另外,在你的intToBin中你应该使用0和1而不是False和True;你还应该检查数字是否可以用8位表示(如果我用1000调用该函数,它会发生什么?)你应该在PEP8之后命名你的函数:http://www.python.org/dev/peps/pep-0008/

ps你知道你可以简单地做int(num, 2)转换为基数2吗?

话虽如此,有时您可以使用元组解包来简化代码:

def f(a, b, c):
   bla bla

l = [arg1, arg2, arg3]
f(l[0], l[1], l[2]) #well it's awful
f(*l) #nice