0

偽の MAC アドレスを増やしてフィクスチャ ファイルを生成するスクリプトを作成する必要がありました。

そのために、少し楽しんで、できるだけコンパクトにしようと決めました。私は結局:

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

これは実際にはかなりうまく機能します。明らかに、これをそのように書くことは、それに取り組まなければならない将来の人に平手打ちされる最良の方法ですが、私は楽しみのためにそれを行いました (そして、コメントでより読みやすいバージョンを書きました)。

しかし、今、私は興味があります.それをもっとコンパクトに書く方法を考えてもらえますか? (つまり、スペースを削除せずに)。

4

3 に答える 3

1
def mac_address(i):
    return ':'.join(a+b for a, b in zip(*[iter('{:012x}'.format(i))]*2))

最初のステップは、正確に 12 桁になるように 16 進文字列をゼロで埋めることです'{:012x}'.format(i)。次に、ドキュメントのアイテムをグループ化する方法を使用して、その文字列を 2 文字のチャンクに分割し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 に答える