[TIL #4] 팀원 코드 리뷰

안떽왕·2023년 3월 22일
1

Today I Learned

목록 보기
4/76

문제

팀원분께서 이해하기 힘들다며 코드를 들고 오셨다.

string = "홀짝홀짝홀짝"

def find_holl(string):
    return string[0] == "홀"

for holl in filter(find_holl, string):
    print(holl)

이 코드를 실행시키면 "홀" 이 총 3번 출력되는데 어째서 그렇게 출력이 되는 건지 여쭤보셨다. 맨 처음 이 코드를 보면서 "무엇을 만들고 싶었기에 저런 코드가 나왔을까"라는 생각을 하게 되었는데, filter함수를 쓰신걸 보면 아마 '홀'만 걸러서 '홀홀홀' 과같이 출력되길 원하셨던 것 같다.

이해

일단 이 함수가 어떻게 도출되는지 알기 위해 filter 함수에 대해 다시 검색을 해보았다. filter함수는 파이썬의 내장함수 중 하나로 filter(function, iterator) 파라미터로 함수(function)반복 가능한 데이터(iterator)를 받는다. 파라미터를 받으면 iterator를 함수에 하나씩 넣어서 필터링해준다.

함수로 정의된 find_hollstr타입의 문자열을 가지고 있는 변수 string을 파라미터로 받고 string[0] == "홀"을 리턴하는데 string0번 인덱스가 문자열 과 같다. 즉 저 조건이 만족될 때가 True 이고 그 외에는 False가 된다.

결과

이제 총평을 해보면 for문을 돌려서 변수 string의 데이터를 하나씩 반복해 find_holl이라는 함수에 대입한다.

string이 가진 데이터는 홀짝홀짝홀짝으로 한 글자씩 대입하게 된다.

첫 글자 을 함수에 대입해 보면 [0]번 인덱스는 인가?를 충족하기 때문에 첫 번째 대입은 True로 함수를 통과하고 holl이라는 변수에 저장되어 print문에 도달하게 된다. 여기서 holl에 들어간 이 첫 번째로 출력된다.

두 번째 글자 을 함수에 대입하고 [0]번 인덱스는 인가?를 충족하지 못해 False가 되어 함수를 통과하지 못하고 다음 글자로 넘어가게 된다.

나머지 글자들은 위의 두 과정이 반복되기 때문에 생략한다.

한 글자씩 불러오는 것이기 때문에 인덱스는 [0]번 밖에 존재하지 않는다, 함수에서 요구하는 인덱스가 [1]번 이었다면 어떠한 글자도 통과하지 못했을 것이다.

느낀 점

저 간단한 코드를 보며 이해하는데 20여 분이 걸렸는데 그 이유는 다음과 같다.

첫 번째
그냥 찍어보며 하지 않은 것, 말 그대로 중간중간마다 print해가며 나온 결과물들의 타입을 파악해 나갔다면 더 빨리 끝났을 것인데 그런 생각을 하지 못했다.

두 번째
사실 filter함수보다 그 위에 선언된 함수 find_holl를 해석하는 데 시간이 걸렸다. return string[0] == "홀"이라는 코드가 무엇을 리턴한다는 건지 감이 오질 않았는데 뒤늦게나마 저게 불 자료형이 되겠다는 생각을 가질 수 있었다.

항상 남에게 도움만 받는 팀원 생활을 하다가 누군가에게 처음으로 질문을 받아보고 답변을 도출해 말해보았다. 안 그래도 저번 프로젝트에서의 낮은 기여와 알고리즘 문제에 벽을 느끼며 자신감이 떨어져가던 나에게 어느 정도 자신감을 찾게 해준 뜻깊은 이벤트였다고 생각한다. 알고리즘 문제는 같은 팀원들도 어려움을 느끼며 자신감을 잃어가고 있었고 이번 질문이 굉장히 재밌었고 자신감을 얻게 해줬다고 말씀해 주셨는데 그 말을 들으며 나도 사소한 코드일지라도 이해가 되지 않는 것을 팀원들과 함께 나누며 함께 성장해나가면 좋을 것 같다는 생각을 하게 되었다.

profile
이제 막 개발 배우는 코린이

0개의 댓글