在struct.pack中使用* args

时间:2011-07-22 13:53:46

标签: python function variadic-functions

我刚刚在python中读到了* args和** kwargs符号,并决定将它与我使用struct.pack的函数一起使用:

def pack_floats(*args):

   return struct.pack('%df' %len(args), args)

但当然,它不起作用,因为args是一个元组。如果我想打包三个号码,我会打电话给这个

struct.pack('3f', 1, 2, 3)

或者我可以通过循环运行它并一次打包一个数字,但我不知道一次一个值与一次所有值之间是否有任何性能差异。

有没有办法在不调用循环内的pack函数的情况下编写pack_floats函数?

3 个答案:

答案 0 :(得分:6)

>>> import struct
>>> def pack_floats(*args):
...     return struct.pack('%df' %len(args), *args)
... 
>>> pack_floats(0.1,1.2,2.3)
'\xcd\xcc\xcc=\x9a\x99\x99?33\x13@'

答案 1 :(得分:1)

def pack_floats(*args):
    return struct.pack('%df' % len(args), *args)

你几乎是对的:你将参数打包到一个带有pack_floats(*args)的元组中,你需要在将它们传递给struct时再次将它们解包,它使用相同的语法。

答案 2 :(得分:1)

您可以使用相同的表示法将可变数量的参数传递给函数:

def pack_floats(*args):
    return struct.pack('%df' % len(args), *args)  # Note the *args