0

我正在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 个参数?

4

2 回答 2

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)
于 2012-10-13T09:30:07.933 回答
2

有几件事:

您的 add8 中没有使用 16 个参数。如果你想这样做,你可以拿两个列表,每个列表有 8 个元素。

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

ps你知道你可以简单int(num, 2)地转换为base 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
于 2012-10-13T09:31:39.067 回答