我不得不编写一个脚本,生成一些固定MAC地址的夹具文件。
要做到这一点,我决定玩得开心,尽量让它变得紧凑。我最终得到了:
def mac_address(i):
return ':'.join(['%02x'] * 6) % tuple([(i >> (8 * j)) & 0xFF for j in reversed(range(6))])
实际上效果很好。显然,以这种方式写这个是被未来必须工作的人打耳光的最佳方式,但我是为了好玩而做的(并在评论中写了一个更易阅读的版本)。
但是现在我很好奇,你能想到更紧凑的写作方式吗? (这不是删除空格)。
答案 0 :(得分:2)
怎么样?
':'.join('%02x' % (i>>(8*j) & 0xFF) for j in reversed(range(6)))
更紧凑的和更容易理解。
答案 1 :(得分:1)
def mac_address(i):
return ':'.join(a+b for a, b in zip(*[iter('{:012x}'.format(i))]*2))
第一步是将十六进制字符串填充为0,这样正好是12位数,这是'{:012x}'.format(i)
所做的。然后,我们使用zip()
文档中的项目分组方法将该字符串分成两个字符的块,然后将结果加到':'
上。
答案 2 :(得分:0)
也许:
from struct import pack, unpack
def mac_address(i):
return ":".join(["%02x"] * 6) % unpack("BBBBBB", pack("!Q", i)[2:])