2014-02-25 1 views
-1

모듈은 간단하지만 약간 시간 소모적 인 초기화를해야하는 상황이 있습니다. 최종 조건 중 하나는 초기화에 의해 채워지는 한 쌍의 목록입니다. 저를 괴롭히는 것은 기본적으로 상수로 의도 된 목록의 역할과 실제로 그것을 초기화해야하는 필요성간에 충돌이 있다는 것입니다. 캐주얼 독자가 일반적으로 상수가 차지하는 위치에 그 목록을 볼 수 그들을 비어있을 것으로 예상 할 수 있기 때문에파이썬에서 모듈 수준의리스트를 초기화하는 가장 확실한 방법

CONSTANT_LIST = [] 
DIFFERENT_LIST = [] 

for item in get_some_data_slowly(): 
     if meets_criteria_one(item): 
     CONSTANT_LIST.append(item) 
     continue 
     if meets_criteria_two(item): 
     DIFFERENT_LIST.append(item) 

:

는이 같은 불안 코드를 작성을 느낍니다. 그래서

CONSTANT_LIST = [i for i in some_data() if criterion(i)] 

내가 그려 두 개의리스트를 필요로하는 것을 제외하고 ... : 나는 지능형리스트로이 쓸 수있는 경우

OTOH, 나는 같은 후드 아래 사실로 확인 될 것 동일한 (약간 시간이 많이 소요되는) 소스에서 두 개의 목록 내장으로 코드를 눈에 띄게 느리게 만듭니다.

__private_const_list = None 
__other_private_list = None 

def public_constant_list(): 
    if __private_const_list: return __private_const_list 
    # or do the slow thing now and fill out both lists... 
    # etc 

def public_other_const_list(): 
    # same thing 

을 기본적으로 세션 당 1 종류의 바보 가능성이 사용 빈도 이후입니다 :

이 악화하려면, 응용 프로그램이 방법 뒤에 정수를 숨기는 것은 그런 것이다.

로켓 과학 문제는 아니지만 파이썬 감각은 전혀 어지럽지 않습니다. 여기에 적절한 비단뱀 무늬가 뭐지?

답변

1

루프가 매우 명확합니다. 너무 똑똑해서 그것을 모호하게하지 마십시오. 그냥 어쩌면 대신 continue/if

+0

세트 over_think = 0의 elif를 사용

CONSTANT_LIST = [] # Put a comment here to tell the reader that these DIFFERENT_LIST = [] # are constants that are filled in elsewhere """ Here is an example of what CONSTANT_LIST looks like ... Here is an example of what DIFFERENT_LIST looks like ... """ for item in get_some_data_slowly(): if meets_criteria_one(item): CONSTANT_LIST.append(item) elif meets_criteria_two(item): DIFFERENT_LIST.append(item) 

을 설명하는 주석을 사용 – theodox

관련 문제