2014-06-23 1 views
1

신호 코드에서 신호 이름을 가져 오는 더 평범한 방법이 있습니까? 나의 현재의 접근 방식은 : Python 2.x는 signalnum (코드)의 유닉스 신호 이름을 얻습니까?

import signal 
dict((getattr(signal,na),na) for na in dir(signal) if na[:3]=='SIG') 

나는 이러한지도의 성공없이 2.7 signal 문서를 보였다. 그것이 있으면 그것은 나를 피했다. 더 나은 접근 방법이 있습니까?

{getattr(signal, n) : n for n in dir(signal) if n.startswith('SIG')} 

는 또한 원래의 이해가 복잡 오버입니다 :

+0

파이썬이 이러한 int -> name 매핑을 제공한다고 생각하지 않습니다. 개인적으로 나는 목록의 이해력을 사용하지 않을 것이다. 왜냐하면 나는 그 코드를 읽기가 너무 어렵 기 때문이다. 'n [: 3]'은'n.startswith ('SIG')'로 쓰여질 수 있고 두 번째 부분에서 일반적으로'n'을 사용하는 것은 숫자가 아니기 때문에 오해의 소지가 있습니다. –

+0

@FelixSchwarz hm, * n * ame에서'n'을 사용했습니다. 'na'로 편집 – n611x007

답변

0

당신은 내가 조금 더 좋은 보이는 생각 DICT 이해를 사용할 수 있습니다. 필요없는 경우 추가 for n in을 추가했습니다. 다음과 같이 작성할 수 있습니다.

dict((getattr(signal,n),n) for n in dir(signal) if n[:3] == 'SIG') 
+0

지나치다 : 네 말이 맞아, 나는 편집을 했어! dict-comprehension : 확실히 좋네요. 어떤 python을 지원하는 가장 낮은 버전입니까? (나는 불행하게도 몇몇 오래된 버전을 지원할 필요가있다). – n611x007

+1

@naxa Dict 내재는 2.7 이상입니다. 이전에 지원해야하는 경우'dict (...) '접근 방식을 따라야합니다. – dano

관련 문제