我刚刚在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函数?
答案 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