2013-07-24 6 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)) 

첫 번째 단계는 '{:012x}'.format(i)가 무엇 인, 정확히 12 자리 숫자 있도록 16 진수 문자열 제로가 작성 얻는 것입니다. 그런 다음 zip() 설명서의 항목을 그룹화하는 방법을 사용하여 두 자릿수 청크에서 문자열을 분리 한 다음 결과를 ':'에 가입시킵니다.