카테고리 없음
[python]함수에서 변수 수정 후 반환 안되는 오류 해결
YUM
2021. 5. 17. 23:06
처음에 작성했던 코드는 대략 아래와 같았다.
def A(num_list, dir) :
if not dir:
dir = {num:[] for num in num_list}
for num in num_list :
dir[num] = [n for n in range(num)]
if __name__ == "__main__":
res = {}
A([1, 2, 3], res)
print(res)
위 코드는 예시이고, 재귀를 사용해서 좀 더 복잡한 형태였다.
그런데 여기서 res를 출력했더니 빈 dictionary를 출력한다.
내 생각대로라면 dir에 새로운 내용이 추가되었으니 변경된 dictionary가 출력되어야 했다.
그리고 하나하나 찬찬히 보다가, 함수 내에서 dictionary를 새로 생성해 준 것이 문제인가 하고 아래처럼 바꿨다.
def A(num_list, dir) :
if not dir:
# 바꾼부분 ====
for num in num_list :
dir[num] = []
# =============
for num in num_list :
dir[num] = [n for n in range(num)]
if __name__ == "__main__":
res = {}
A([1, 2, 3], res)
print(res)
그랬더니 예상한 변경된 dictionary가 반환 되었다!
아마 첫번째 코드에서 함수를 실행하면서 함수의 parameter로 받은 dictionary를 변형하는 것이 아니라 새로 선언을 했기 때문에, 함수 내 dir 변수가 로컬 변수(함수 내에서만 사용되는 변수)로 지정되었고, 함수가 끝난 이후 그 값이 변수 res에는 반영이 되지 않은 것 같다.