2013-07-24 77 views
0

我不得不編寫一個腳本,用於生成一些夾具文件,僞造的MAC地址越來越多。有沒有更緊湊的方式來撰寫該聲明?

要做到這一點,我決定嘗試一下,儘量讓它儘可能緊湊。我結束了:

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

這實際上工作得很好。很顯然,這樣寫是最好的方式,讓未來的人必須掌握它,但我爲了樂趣而做了(並且在評論中寫了更可讀的版本)。

但現在我很好奇,你能想到更緊湊的書寫方式嗎? (這是沒有刪除空格)。

+6

這個問題似乎是題外話題,因爲它是關於改進工作解決方案。您可以嘗試http://codegolf.stackexchange.com/。 –

+0

@Robᵩ自從何時有關於改進離題的工作解決方案的問題? – arshajii

+0

http://stackoverflow.com/help/dont-ask - 「*您應該只根據您面臨的實際問題提出實際的,可回答的問題。」實際問題是什麼? 「*避免提出主觀問題,並將問題的答案與問題一起提供*」正如作者在此做的那樣。 「*建設性的主觀問題: 不僅僅是無心的社交樂趣*」作者承認是他的動機。 –

回答

2

什麼

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

更緊湊更容易理解。

0

可能:

from struct import pack, unpack 
def mac_address(i): 
    return ":".join(["%02x"] * 6) % unpack("BBBBBB", pack("!Q", i)[2:]) 
1
def mac_address(i): 
    return ':'.join(a+b for a, b in zip(*[iter('{:012x}'.format(i))]*2)) 

的第一步是獲取一個十六進制字符串填零,這樣它到底是12位,這是什麼呢'{:012x}'.format(i)。然後我們使用zip()文檔中的項目分組方法將這個字符串分成兩個字符塊,然後將結果加入':'

相關問題