데이터 분석 TIL - 파이썬 기본의 익숙함과 응용의 중요성

테리·2025년 11월 10일

1. 학습 키워드

  • 함수 정의 실습 메모
  • 바로 생각 안났던 *args, join

2. 학습 내용

초급 수준의 기능이나 함수도 자주 사용하지 않거나 응용하는 습관을 안 들이면 머리가 굳어버린다.

같은 함수를 다르게 정의해보기

: break와 continue를 사용해 동일한 기능을 하는 함수를 다르게 표현해보려고 한다.

사용자로 부터 숫자를 입력받아 랜덤으로 생성된 숫자를 반복할 때 까지 진행하는 함수를 만들었다.
함수 자체는 어렵진 않지만 이 함수를 continue를 사용해 정의하려면 어떻게 해야할까?

import random

def guess_game1():
    answer = random.randint(1, 10)
    while True:
        guess = int(input('숫자를 입력하시오: '))
        if guess == answer:
            print('맞습니다')
            break
        else:
            print('틀렸습니다')

처음 나의 생각은 else 안에 continue를 사용하는 건 사용 하나 안하나 똑같기에 아무 의미가 없다고 생각했다. 왜냐하면 while문 자체가 break나 조건이 False 상태로 변경되지 않는 경우 계속 해당 코드를 실행하기 때문이다.
문제의 의도가 뭘까? continue 기능에 대해 단순히 for문 안에서 주로 사용한다고 무의식적으로 생각했던 부분이 있었기에 해당 함수를 다르게 정의할 수 있는지에 대해 의문이 생겼었다.
하지만 continue는 아래에 실행할 다른 코드가 있어도 다음 단계로 넘어가지 않고 다시 반복의 최상위로 가는 기능이다.
그렇다면 기존의 if문 내에서 모든 실행 결과를 도출 하는 방식과 달리 틀린 경우를 if문 안에서 continue와 함께 사용하고, 맞췄을 경우를 if문 밖에서 실행하도록 하면 되는 것이다.

결과

가변 매개변수(*args) 사용한 예제

가변 매개변수를 이해하기 위한 예시 문제를 gpt한테 만들어 달라고 했다. 문제들은 아주 쉬웠지만 이 쉬운 문제에서도 내가 확실히 join 사용에 대한 생각이 머리속에 잘 안떠오른 다는 것을 깨달았다.

[문제]
여러 개의 문자열을 인자로 받아, 띄어쓰기 없이 하나의 문자열로 합쳐서 반환하는 concat_words() 함수 만들기.
.
.
.
문자열을 이어 붙인다? 처음에는 'hi!' + 'hello' 와 같이 문자열을 더하는 방식을 생각했는데 그러면 for 문을 사용해야 하고, 그러면 내가 넣어줄 범위나 리스트 값을 넣어줘야 하는데 이 방식은 인자로 몇 개가 들어올지 모르는 상황에서는 적절하지 않은 방식이다.
.
.
.
그래서 검색을 해보니 join()이었다.
알고나니 정말 쉬운데 평소 join()을 디렉토리 경로 붙일때 생각없이 사용했다보니 머리속에 떠오르지가 않았다.

3. 배운점

  1. 아주 쉬운 예제였지만 continue와 break 활용 방식을 명확하게 분류해볼 수 있었다.
  2. join() 함수를 알고는 있다. 생각하며 사용하는 것과 그냥 사용하는 것의 차이를 느꼈다.
  3. 함수를 활용하고 코드를 작성함에 있어 생각하며 사용하지 않으면 머리가 쉽게 굳어버리는 것 같다. 정말 쉬운 코드도 내가 특정 기능이나 구현 방식에 대해 자주 활용하지 않으면 생각의 확장이 잘 안되는 것을 알았고 이게 안됐을 때 똑같은 코드를 더 어렵게 구현할 수도 있다는 생각을 했다.

이보다 훨씬 더 어려운 이상 탐지, LLM을 개인 프로젝트로 진행하다가도 오늘 같이 join 하나가 생각이 안나 막힐때면 "바보인가?" 라는 생각이 든다. 그렇기에 기본기에 대한 익숙함과 응용이 더 중요한 것 같다.

0개의 댓글