Python

3.4. 변수 선언

federe 2012. 1. 11. 10:16
이제 사전과 터플 그리고 리스트에 관하여 좀 배웠습니다. 다시 제 2 장 odbchelper.py 샘플 프로그램으로 돌아 갑시다. 
 
파이썬은 다른 언어와 마찬가지로 지역 변수와 전역 변수가 있습니다. 그러나 명시적으로 변수를 선언하지 않습니다. 변수는 값을 할당하면 튀어나와 존재하다가 영역을 벗어나면 자동으로 파괴되어 소멸합니다. 
 
 
예제 3.17. myParams 변수 정의하기 

 

  1. if __name__ == "__main__":
  2.     myParams = {"server":"mpilgrim", \
                    "database":"master", \
                    "uid":"sa", \
                    "pwd":"secret" \
                    }
 

들여쓰기에 주목하세요. if 서술문은 코드 블록이며 함수처럼 들여쓰기 되어야 합니다. 

 
또 주목할 것은 줄-계속 표식으로 기여하는 역사선 문자(“\”)로 여러 줄에 걸쳐서 한 명령어에 변수 할당이 이루어지고 있다는 것입니다. 
 
☞ 한 명령어가 줄-계속 표식(“\”)으로 줄이 여러 개로 분리되면 계속되는 줄들도 같은 방식으로 들여쓰기 될 수 있습니다; 파이썬의 엄격한 들여쓰기 규칙은 적용되지 않습니다. 파이썬 IDE가 계속된 줄을 자동으로 들여쓰기 하면 아마도 그의 기본 값을 받아들여야 할 것입니다. 그렇게 하지 말아야 할 심각한 이유가 없는 한 말입니다.  
 
엄격히 말해 (반괄호)나 [각괄호] 또는 {활괄호} 안에 든 표현식은 (예를 들어 사전을 정의할 때) 줄 연속 문자(“\”)가 있든 없든 여러 줄로 분리가 가능합니다. 본인은 요구하지 않을 경우에도 역사전을 포함시키기를 좋아합니다. 왜냐하면 그래야 코드가 더 읽기 쉽다고 생각하기 때문입니다. 그러나 그것은 스타일의 문제입니다. 
 
셋째, myParams 변수를 선언하지 않았습니다. 그냥 값을 거기에 할당했을 뿐입니다. 이는 VBScript에서 option explicit 옵션이 없는 것과 비슷합니다. 다행스럽게도 VBScript와는 다르게 파이썬은 값이 할당되지 않은 변수를 참조하는 것을 허용하지 않습니다; 그렇게 하면 예외가 일어납니다. 
 
 
3.4.1. 변수 참조 
예제 3.18. 묶이지 않은 변수 참조하기

 

  1. >>> x
  2. Traceback (innermost last):
      File "", line 1, in ?
    NameError: There is no variable named 'x'
    >>> x = 1
    >>> x

 

1파이썬이 이를 대신 처리해 주는 것에 대하여 언젠가는 감사할 날이 있을 겁니다. 
 
 
3.4.2. 여러 값을 한 번에 할당하기 
파이썬의 멋진 지름길중 하나는 연속열을 사용하여 여러 값을 한 번에 할당하는 것입니다. 
 
 
예제 3.19. 여러 값을 한 번에 할당하기

 

  1. >>> v = ('a', 'b', 'e')
  2. >>> (x, y, z) = v     ①
    >>> x
    'a'
    >>> y
    'b'
    >>> z
    'e'
 
①  v는 원소가 세 개인 터플이며 (x, y, z)는 변수가 세 개인 터플입니다. 한 터플을 다른 터플에 할당하면 v의 값이 각 변수에 순서대로 할당됩니다.  
 
이 방법은 온갖 일에 사용됩니다. 종종 이름을 일정 범위의 값에 할당하고 싶은 경우가 있습니다. C라면 enum을 사용하여 손수 각 상수와 그의 연관 값을 나열하는데 이렇게 하면 값이 연속적일 경우 특히 지루해 보입니다. 파이썬에서는 여러-변수 할당과 함께 내장 range 함수를 사용하면 연속적 값을 즉시 할당할 수 있습니다. 
 
 
예제 3.20. 연속적 값을 할당하기

 

  1. >>> range(7)                                                                    ①
  2. [0, 1, 2, 3, 4, 5, 6]
    >>> (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7) ②
    >>> MONDAY                                                                      ③
    0
    >>> TUESDAY
    1
    >>> SUNDAY
    6
 
①  내장 range 함수는 정수 리스트를 돌려줍니다. 가장 간단한 형태로 상한값을 취해 0-기반 리스트를 상한값 미만까지 세어 돌려줍니다. (다른 매개변수를 건네어 시작지표에 0말고 다른 값을 지정하고 뜀값에 1 말고 다른 값을 지정할 수 있습니다. 자세한 것은 range.__doc__을 인쇄해 보세요.)  
②  MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, 그리고 SUNDAY는 정의하려는 변수입니다. (이 예제는 calendar 모듈에서 빌려왔습니다. 이 모듈은 달력을 인쇄하는 재미있는 모듈입니다. UNIX에서 cal 프로그램과 비슷합니다. calendar 모듈은 요일에 대하여 정수 상수를 정의합니다.)  
③  이제 각 변수는 값이 있습니다: MONDAY는 0이고, TUESDAY는 1이며, 등등.  
 
다중-변수 할당을 사용하여 여러 값을 돌려주는 함수를 만들 수도 있습니다. 그냥 모든 값을 터플로 돌려주면 됩니다. 호출자는 그것을 터플로 취급할 수 있으며 그 값들을 변수에 따로따로 할당할 수 있습니다. 많은 표준 파이썬 라이브러리에서 이렇게 합니다. 여기에는 os 모듈이 포함되는데 이 모듈은 제 6 장에서 다루겠습니다.