【发布时间】:2020-11-17 22:25:34
【问题描述】:
是否可以通过单个变量将未知数量的变量传递给函数调用?
我遇到的问题是我正在迭代一个数据帧,每一行都将使用一个位串 pack 函数调用 - 每个调用可能有不同数量的参数,具体取决于列表的长度
row['Data']
for index, row in log_file.iterrows():
pack_string = 'u1u11u1u1u1u4{}'.format('u8'*len(row['Data']))
packed = bitstruct.pack(pack_string, 0, row['ID'], 0, 0, 0, len(row['Data']),)
pack_string 的示例可能如下所示:
u1u11u1u1u1u4u8u8u8
u1u11u1u1u1u4u8u8u8u8u8u8
u1u11u1u1u1u4u8u8
u1u11u1u1u1u4u8u8u8u8u8u8u8u8
对于每个 u8,我需要将一个新变量传递给 bitstruct.pack() 方法。因此,对于 pack_string u1u11u1u1u1u4u8u8 上的单个循环,解决方案是:
pack_string = 'u1u11u1u1u1u4{}'.format('u8'*len(row['Data']))
packed = bitstruct.pack(pack_string, 0, row['ID'], 0, 0, 0, len(row['Data']), row['Data'][0], row['Data'][1])
改变参数数量的理想解决方案可能如下所示:
for index, row in log_file.iterrows():
pack_string = 'u1u11u1u1u1u4{}'.format('u8'*len(row['Data']))
*args = row['Data']
packed = bitstruct.pack(pack_string, 0, row['ID'], 0, 0, 0, len(row['Data']), *args)
【问题讨论】:
-
你可以传
*row['Data'] -
你已经很接近了 - 它应该是
args = row['Data']你这样做的方式,你不需要这样的临时(你可以在函数调用中直接使用*row['Data'])。 -
如果你们中的任何一个想提交和回答,我很乐意接受。谢谢你们!
-
我已经关闭了问题,但您仍然可以接受答案
标签: python python-3.x