리스트 없이 src1, src2, src3 값 for문으로 출력하기

조회수 61회

하기에서 리스트를 만들지 않은 상태에서, src가 [src1, src2, src3]으로 출력되지 않고, [A,B,C]로 출력되게 할수 없나요?

src1 = "A"
src2 = "B"
src3 = "C"

for i in [1,2,3]: 
    src = (f'src{i}')
    print(src)

그리고 이런걸 뭐라고 명칭하나요?

  • 리스트로 만들면 안되는 이유가 있나요? 초보 2022.1.7 17:24

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    이런 걸 동적 변수(dynamic variables) 또는 가변 변수(variable variables)라고 합니다. PHP 같은 일부 언어를 보면, 이런 게 불가능하지는 않다는 것을 알 수 있으며, 심지어 경우에 따라서는 매우 쉽고 간단하며 합리적인 일인 것처럼 보이기까지 합니다.

    $src1 = "A"
    $var = 'src1';
    echo $$var; // --> $src1 --> "A"
    

    그런데 대부분의 언어에서 이걸 아주 좋지 않은 습관으로 봅니다. Javascript는 이게 가능하긴 하지만 전혀 권장하지 않고, 사실은 PHP에서도 이걸 금기시하며, 찾고 계시는 파이썬의 경우에도 마찬가지입니다. ← 찾고 계시는 for 순회 예제가 바로 이 링크에 있습니다. 누군가 질문자님 같은 사람이 물어보긴 물어봤나 봐요.


    근데 이게 왜 나쁜 습관이라는 걸까요?
    마지막으로 붙인 링크에 이런 말이 있습니다.

    파이썬에서 동적 변수 이름 생성이 가능하긴 하지만 그렇다고 해서 이렇게 해야만 한다거나 이렇게 해야 되는 경우가 있다는 것은 아닙니다. 왜냐하면 파이썬에서는 데이터가 동적으로 생성되기 때문입니다. Python이 참조하는 것은 코드의 객체입니다. 객체의 참조가 존재한다면, 객체도 당연히 존재하거든요.

    파이썬이 참조하는 것은 객체이지, 그 객체를 생성할 때 우연히 사용한 문자의 집합이 아닙니다. 그리고 그건 사실 기계어가 아닌 모든 프로그래밍 언어가 그렇습니다. 우리가 변수를 선언하고 사용할 때 하필 문자를 사용한다고 해서, 어떤 일련의 자의적 문자들의 집합을 가지고 기가 막힌 우연의 일치를 일으켜 프로그램의 참조 체계에 직접 접근하려고 시도해서는 안 된다는 것입니다. 그건 첫째로 오류를 유발하며, 둘째 프로그램의 논리적 정합성을 망가뜨리고, 셋째 궁극적으로는 원숭이에게 셰익스피어를 쓰게 하는 짓입니다.

    일단 오류 유발의 문제. 이건 예제 한 방으로 설명이 됩니다. 아래 코드를 읽으세요. 과연 무엇이 출력될까요? 뭔가 기대를 해보신 다음 여기서 Run을 해보세요.

    var foo = "A";
    var bar = "B";
    var variables = ["foo", "bar‎"];
    
    for (var i = 0; i < variables.length; i++) {
        console.log(window[variables[i]]);
    }
    

    다음으로, 논리적 정합성의 문제. src1, src2, src3은 모두 src의 일종인데, 그냥 순서만 다를 뿐인 것들입니다. 그렇죠? 이름부터가 그렇잖아요. 만약 그렇지 않다면 그건 심각한 문제입니다. 그럴 거면 애초부터 이름을 다르게 했어야죠 jack, KTX, compliance 하는 식으로요. 원래대로라면, 이것들은 모두 src라는 목록 안에서 순서만 다르고 형식이 똑같은, 규칙성과 일관성이 존재하여 좀더 체계적으로 통제 가능한 자료로 구성될 것이라고 기대됩니다. 그 기대를 저버릴 필요는 없어요. 괜히 파이썬에 리스트 형이라는 게 있는 게 아니거든요. 아직도 굉장히 많은 사람들이 실무 현장에서마저 이런 아마추어 같은 짓(DB 테이블에 info1, info2, info3 컬럼이 존재하는 등)들을 합니다만, 그렇다고 해서 그게 좋은 아이디어인 것은 아닙니다. 질문자님마저 그런 아마추어가 되실 필요는 없습니다.

    마지막으로 무한 원숭이 정리. 질문자님이 지은 이름 src1은, 죄송하지만, 굉장히 우연한 작명입니다. 원숭이도 시간만 많으면 언젠가는 이런 코드를 짤 수 있어요. 근데 말이에요 과연 그게 프로그래밍일까요? 정의와 공리로부터 도출되는 당연하고 자연스러운 결과를 얻는 필연과 연역의 작업이냐고요. 본질적으로 아니란 말이지요. 무슨 말이냐면 이대로 가다간 질문자님의 코드는 "src1", "src2", "src3"이 아주 희박한 확률로 정확한 위치에 딱딱 존재해야만 작동하는 논리 없고 불우한 무언가로 전락하고 만다는 겁니다. 물론 세상에는 그런 딱한 물건을 가엾은 그 상태 그대로 내버려둔 채 자기가 짤 코드만 짜고 퇴근하는 사람들도 있긴 합니다. 그들을 코드 원숭이라고 부르는 건 우연이 아닐 테고, 질문자님이 코드 치는 원숭이가 되고 싶은 것도 아닐 터입니다.

    한마디로... 여기서는 제발 리스트를 써주세요!!!
    추가 질문이 있으시다면 받겠습니다.

    • 감사합니다. 처음에는 변수 한개였다가, 2개가 되었다가.... 하나씩 추가가 되어버리더라구요. 결국 리스트로 만드는게 또다시 추가될 상황을 위해서 좋겠습니다. 파린이 2022.1.11 11:14
    • 잘 생각하셨습니다 엽토군 2022.1.11 14:02

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.