【问题标题】:Is there any more compact way of writing that statement? [closed]有没有更紧凑的方式来编写该语句? [关闭]
【发布时间】:2013-07-24 15:45:58
【问题描述】:

我不得不编写一个脚本来生成一些带有越来越多的假 MAC 地址的夹具文件。

为此,我决定找点乐子,并尽量让它紧凑。我最终得到:

def mac_address(i):
    return ':'.join(['%02x'] * 6) % tuple([(i >> (8 * j)) & 0xFF for j in reversed(range(6))])

实际上效果很好。显然,这样写是被未来必须努力的人打耳光的最佳方式,但我这样做是为了好玩(并在评论中写了一个更易读的版本)。

但是现在我很好奇,你能想出更简洁的写法吗? (即不删除空格)。

【问题讨论】:

  • 这个问题似乎是题外话,因为它是关于改进一个有效的解决方案。你可以试试codegolf.stackexchange.com
  • @Robᵩ 关于改进工作解决方案的问题什么时候离题了?
  • stackoverflow.com/help/dont-ask - "您应该只根据您所面临的实际问题提出实际的、可回答的问题。" 实际问题是什么? “避免在您的答案与问题一起提供的情况下提出主观问题”正如作者在此处所做的那样。 “建设性的主观问题:不仅仅是盲目的社交乐趣”,作者承认这是他的动机。
  • @Robᵩ:我同意。虽然这个问题很有趣,但 SO 是一个不好的地方。我没有关闭它的声誉,但我认为应该如此。
  • @arshajii,你是对的。我的反对措辞很糟糕;我的原始评论通常不适用。我承认与改进工作解决方案有关的问题通常是实用且可以回答的。

标签: python maintainability


【解决方案1】:

怎么样

':'.join('%02x' % (i>>(8*j) & 0xFF) for j in reversed(range(6)))

这样更简洁并且更容易理解。

【讨论】:

    【解决方案2】:
    def mac_address(i):
        return ':'.join(a+b for a, b in zip(*[iter('{:012x}'.format(i))]*2))
    

    第一步是填充一个十六进制字符串零,使其正好是 12 位数字,这就是 '{:012x}'.format(i) 所做的。然后,我们使用zip() 文档中的项目分组方法将该字符串分成两个字符的块,并将结果加入':'

    【讨论】:

      【解决方案3】:

      也许:

      from struct import pack, unpack
      def mac_address(i):
          return ":".join(["%02x"] * 6) % unpack("BBBBBB", pack("!Q", i)[2:])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-29
        • 2021-12-21
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多