2013-07-24 3 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(), и присоединяем результат к ':'.

Смежные вопросы