ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 for 문에서, 언패킹에서 underscore
    Python/이것저것 파이썬 2021. 11. 29. 21:34
    반응형

    파이썬 커뮤니티에서 아래 코드에서
    roll_num의 의미에 대해 질문이 올라왔더군요.

    from random import randint
    
    
    def roll():
        return randint(1, 6)
    
    
    def main():
        results = []
        for roll_num in range(10):
            result = roll()
            results.append(result)
        print(results)
    
    
    main()

    위 코드에서 roll_num 은 의미 없는 변수입니다.
    언더스코어('_', under score, 언더바)로 바꿔주는 게 더 좋습니다.

    뒤에 사용되지 않지만
    비워둘 수 없는 변수에는
    관례적으로 '_'를 사용합니다. 

    from random import randint
    
    
    def roll():
        return randint(1, 6)
    
    
    def main():
        results = []
        for _ in range(10):
            result = roll()
            results.append(result)
        print(results)
    
    
    main()

    파이썬의 for문은
    다른 언어의 (기본적인) for문과 비교했을 때
    구조가 좀 다릅니다.

    다른 언어들의 for each 문과 비슷하고,
    range 제너레이터를 사용합니다.

    제너레이터라는 말이 어려우실 수도 있을 텐데요,
    일단 range(10)은 0에서 9까지의 숫자가 튀어나오는
    '함수'라는 정도만 이해하셔도 됩니다. 

    다른 언어에서는
    이런 형식의 for문을 사용하는 경우가 많습니다.

    for (var i=0; i < 100; i++)

    반복문의 횟수를 체크하기 때문에
    변수 i가 필요합니다.

    파이썬에서는 뒤에 달린 range 제너레이터가
    반복문의 횟수를 결정하기 때문에,

    (기본적으로) 변수를 (명시적으로) 사용할 필요가 없습니다.
    인덱스가 필요할 때만 쓰시면 됩니다.

    개인적으론 파이썬의 힙한 부분 중 하나라고 생각합니다. 
    20번 반복하는데 크고 작고를 따져가면서 코딩하는 건 좀 ...
    그냥 20번 반복해 라고 쓰는 게 쿨하지 않나요?

    사용하지 않는 변수를 만들어 두면,
    (복잡한 코드에서는)
    다른 사람에게 혼란을 줄 수 있고,
    사소한 에러를 만들 수도 있습니다. 

    다른 언어에 익숙한 분들이,
    별생각 없이 습관적으로 쓰는 경우를 종종 봅니다만
    좋지 않은 습관입니다. 

     

    파이썬에서 언더스코어를 자주 쓸 때가 또 있는데... 

    unpacking을 할 때입니다. 

    약속 = ('오전 10시', '모모백화점 정문', '쇼핑과 식사', '영희')
    시간, 장소, _, _ = 약속
    print(시간, 장소)

    시간, 장소를 제외한 나머지가 필요 없다면, 
    필요 없는 것들은 언더스코어로 받으면 됩니다. 

    여러 개를 *를 이용해 한번에 받을 수도 있습니다. 

    약속 = ('오전 10시', '모모백화점 정문', '쇼핑과 식사', '영희')
    시간, 장소, *_ = 약속
    print(시간, 장소)
    반응형
Designed by Tistory.