0

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

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

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

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

但现在我很好奇,你能想到任何更紧凑的写作方式吗?(即不删除空格)。

4

3 回答 3

2

关于什么

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

这更紧凑更容易理解。

于 2013-07-24T15:51:46.070 回答
1
def mac_address(i):
    return ':'.join(a+b for a, b in zip(*[iter('{:012x}'.format(i))]*2))

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

于 2013-07-24T15:58:35.280 回答
0

也许:

from struct import pack, unpack
def mac_address(i):
    return ":".join(["%02x"] * 6) % unpack("BBBBBB", pack("!Q", i)[2:])
于 2013-07-24T15:57:45.917 回答