2012-06-26 3 views
1

집합의 모든 하위 다중 집합을 생성하는 함수를 웹에서 찾은 다음이를 반환합니다. 그러나 실제로 코드가 무엇인지 이해하기 위해 코드를 살펴 보았을 때, 나는 정말로 붙어있었습니다. ,의 난이 아규먼트 "AB"로 전화를 가정 해 봅시다 이제목록을 반환하는 동안 함수의 이상한 동작

def build_substrings(string): 
    """ Returns all subsets that can be formed with letters in string. """ 
    result = [] 
    if len(string) == 1: 
     result.append(string) 
    else: 
     for substring in build_substrings(string[:-1]): 
      result.append(substring) 
      substring = substring + string[-1] 
      result.append(substring) 
     result.append(string[-1]) 
    return result 

:

여기에 코드입니다. 기본 경우가 무시되므로 else 블록에 도달하여 함수를 다시 호출합니다. 이제 인수는 "a"입니다. 나는 기본 케이스에 도달하고 결과에 "a"를 추가합니다. 이제 결과를 반환합니다. for 루프가 이제 '활성화'됩니다. 하위 문자열에 "a"가 지정되고 결과 목록에 추가됩니다. 이제 "결과"라는 목록에 두 번 "a"를 추가했습니다. 여하튼, 출력에는 한 번만 표시됩니다. 도움 주셔서 대단히 감사합니다.

답변

2

이제 '결과'라는 목록에 두 번 "a"를 추가했습니다.

아니, result는 지역 변수이며, 당신이 추가 처음 "a"는 그것, 그것이 build_substrings("ab")의 로컬 result의 두 번째 반면 build_substrings("a")의 로컬 result입니다. 귀하의 방법에 대한 두 가지 다른 호출이므로 그들은 result을 공유하지 않습니다.

+0

좋아, 그건 결국 나를 위해 물건을 정리. 고맙습니다! – geekkid