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