inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

남박사의 파이썬 기초부터 실전 100% 활용

파일인코딩프로그램 만들기에서 질문있습니다!

247

윤태영

작성한 질문수 22

1

import os

def search_dir(dirname):
    result_list=[]
    filenames=os.listdir(dirname)#인자에 있는 모든 파일, 디렉토리 리스트 가져옴

    for filename in filenames:
        full_path=os.path.join(dirname,filename)#경로를 병합하여 새경로 생성
        if os.path.isdir(full_path): #디렉토리이면 파일이 나올떄까지 재귀
           search_dir(full_path) #result_list.extend(search_dir(full_path))
        else#파일이면 리스트에 합침
            result_list.append(full_path)
    return result_list
path="c:\\python"
print(search_dir(path))
재귀함수 부분에서 어차피 리스트에 합쳐지는 순간은 else문이라고 생각해서
if os.path.isdir(full_path): 에
result.extend안하고 재귀만 돌려놓고
출력해보니 result_list에 아무것도 들어있지 않았습니다
디버깅해보니 재귀함수가 끝날때
else문에서 저장했던 요소가 return result_list할때 사라지는것을 발견했습니다
왜 이런결과가 발생하는지 잘 모르겠습니다

웹-크롤링 python

답변 1

1

남박사

result_list.extend(search_dir(full_path)) 

위 구문은 풀어서 쓰면

new_list = search_dir(full_path)

result_list.extend(new_list)

이렇게 되고 실제 이 부분이 재귀적으로 구동되게 되는 핵심 구간이 됩니다. search_dir 함수에서 구한 값을 new_list 변수에 담고 그걸 다시 현재 result_list에 확장해서 저장해라~ 라는 내용이며 search_dir 내부에서는 다시 search_dir 를 호출하기 때문에 몇번이고 반복해서 호출된 search_dir() 함수의 결과를 누적하기 위해 이렇게 사용했습니다. 이렇게 누적된 result_list 는 최초 호출된 지점으로 리턴 하게 됩니다.

result_list.extend(search_dir(full_path))  ==> search_dir(full_path)

이렇게 변경하셨는데 그렇게 되면 search_dir(full_path) 는 아무런 결과를 내놓지 못합니다. 결과를 리턴하면 받아주는 부분을 삭제하셨으니 결과 또한 사라지는게 맞습니다.

search_dir(full_path)

이 문장에는 그 어디에도 리스트를 받거나 넘겨주는 인자가 없이 되어있습니다. search_dir() 함수 내부에서 result_list는 지역변수 입니다. 지역변수는 함수가 종료되며 사라집니다. 

lists = search_dir(full_path)

search_dir() 함수 내부의 search_list 결과를 위처럼 외부 변수로 받아줘야 데이터가 사라지지 않습니다.

38강 = 연산자 더하고 빼기

0

60

2

주석처리

0

117

1

함수의 파라미터값 msg

0

155

1

강의자료 이미지 안나옴

0

239

3

강의자료 질문 두번째

0

165

3

강의자료 관련 질문

0

116

1

파이썬 예외 처리 try / except 파일 처리 코드가 실행이 안됩니다.

0

235

1

소수 너무 어려워요

0

245

1

imagefont 함수 사용

0

239

1

pylint

0

357

1

add 함수 문의 ㅠㅠ

0

283

1

형식 문의드립니다.

0

209

1

변수 명을 왜 src, tar로 하셨는지 궁금합니다.

0

602

1

숫자야구 코드를 짜 봤는데 뭔가 이상합니다.

0

253

1

zsh: command not found: pylint

0

269

1

텔레그램 봇 만들기 코드 실행이 안됩니다 박사님..ㅠ

0

546

1

질문드립니다.

1

374

2

list.reverse() 출력에 대해서 질문있습니다.

1

433

1

데코레이터 함수 및 동작시간 질문입니다.~

1

323

2

opencv 사용하면서 궁금한점 (해상도)

1

781

1

질문드립니다.

1

299

1

아래 오류가 뜨면서 vscode가 컴파일이 되지 않는데.. 혹시 왜이럴까요?

1

445

1

크롤링안되는 현상 문의 드립니다.

1

421

1

파이썬 크롤링 관련 문의

1

277

1