在struct.pack中使用*args
我刚刚了解到Python中的*args和**kwargs这种写法,决定在我的函数中使用它,特别是那些用到struct.pack的函数,代码如下:
def pack_floats(*args): return struct.pack('%df' %len(args), args)
不过,这样是行不通的,因为args是一个元组。如果我想打包三个数字,我会这样调用pack:
struct.pack('3f', 1, 2, 3)
另外,我也可以通过循环来处理,每次打包一个数字,但我不太清楚一次打包一个值和一次打包所有值之间有没有性能上的差别。
有没有办法写一个pack_floats函数,而不需要在循环里调用pack函数呢?
3 个回答
1
def pack_floats(*args):
return struct.pack('%df' % len(args), *args)
你几乎说对了:你把参数打包成了一个元组,使用的是 pack_floats(*args)
,但是在把它们传给 struct 的时候,你需要把它们拆开,这个过程用的语法是一样的。
1
你可以用相同的方式来给一个函数传递可变数量的参数:
def pack_floats(*args):
return struct.pack('%df' % len(args), *args) # Note the *args
6
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们写的代码有bug,或者是因为我们没有正确使用某些工具或库。
当你在网上寻找解决方案时,可能会看到很多人讨论这些问题,分享他们的经验和解决方法。StackOverflow就是一个这样的地方,程序员们可以在这里提问和回答问题,互相帮助。
在提问时,记得描述清楚你遇到的问题,提供相关的代码和错误信息,这样别人才能更好地理解你的情况,并给出有效的建议。
总之,遇到问题不要慌,先查找资料,看看别人是怎么解决的,或者在社区里寻求帮助。编程的路上,大家都是从小白一步步成长起来的。
>>> 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@'