【问题标题】:using *args in struct.pack在 struct.pack 中使用 *args
【发布时间】:2011-07-22 13:53:46
【问题描述】:

我刚刚阅读了 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 函数?

【问题讨论】:

    标签: python function variadic-functions


    【解决方案1】:
    >>> 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@'
    

    【讨论】:

      【解决方案2】:
      def pack_floats(*args):
          return struct.pack('%df' % len(args), *args)
      

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-06-17
          • 1970-01-01
          • 1970-01-01
          • 2021-09-02
          • 1970-01-01
          • 1970-01-01
          • 2023-04-01
          • 2013-10-20
          相关资源
          最近更新 更多