파이썬은 아주 쓸모있는 내장 함수들을 작은 모듬으로 갖추고 있습니다. 기타 모든 함수들은 모듈 안으로 조각조각 들어가 있습니다. 이런 디자인은 실제로 지혜로운 결정이었고, 이 덕분에 코어가 다른 스크립팅 언어들(예, 비주얼 베이직(Visual Basic))과는 다르게 뚱뚱해지지 않을 수 있었습니다.
4.3.1. type 함수
type 함수는 객체의 데이터유형을 돌려줍니다. 가능한 유형들은 types 모듈에 나열되어 있습니다. 이는 여러 유형의 데이터를 다룰 수 있기 때문에 도움자(helper) 함수에 쓸모가 있습니다.
예제 4.5. type 소개
- >>> type(1) ①
- <type 'int'>
>>> li = []
>>> type(li) ②
<type 'list'>
>>> import odbchelper
>>> type(odbchelper) ③
<type 'module'>
>>> import types ④ >>> type(odbchelper) == types.ModuleType True
① type은 무엇이든 -- 정말로 무엇이든 -- 취해서, 그의 데이터유형을 돌려줍니다. 정수, 문자열, 리스트, 사전, 터플, 함수, 클래스, 모듈, 심지어 자기자신조차도 받아 들일 수 있습니다.
② type은 변수를 취해서 그의 데이터유형을 돌려줍니다.
③ type은 또한 모듈에도 작동합니다.
④ types 모듈에 있는 상수들을 이용하면 객체의 유형을 비교할 수 있습니다. 잠시 후에 보여 드리겠지만, 이것이 바로 info 함수가 하는 일입니다.
4.3.2. str 함수
str은 데이터를 문자열로 강제로 변환합니다. 어떠한 데이터 유형도 문자열로 강제로 변환될 수 있습니다.
예제 4.6. str 소개
- >>> str(1) ①
- '1'
>>> horsemen = ['war', 'pestilence', 'famine']
>>> horsemen
['war', 'pestilence', 'famine']
>>> horsemen.append('Powerbuilder')
>>> str(horsemen) ②
"['war', 'pestilence', 'famine', 'Powerbuilder']"
>>> str(odbchelper) ③
""
>>> str(None) ④
'None'
① 정수같이 간단한 데이터유형에 대해서, str이 작동할 것이라 예상하실텐데, 대부분의 언어가 정수를 문자열로 바꾸는 함수가 있기 때문입니다.
② 그렇지만, str은 어떤 유형의 어떤 객체에도 작동합니다. 여기에서는 여러분이 일일이 손수 구축한 리스트에 작동합니다.
③ str은 또한 모듈에도 작동합니다. 모듈의 문자열 표현은 디스크에서의 모듈 경로를 포함하므로, 여러분의 출력은 다를 것입니다.
④ str에서 작지만 중요한 행위는 파이썬 널(null) 값인, None에도 작동한다는 것입니다. 문자열 'None'을 돌려줍니다. 잠시 후에 보여드리겠지만, 이를 info 함수에 이용할 수 있습니다.
info 함수의 심장은 강력한 dir 함수입니다. dir은 객체의 속성과 메쏘드의 리스트를 돌려줍니다: 모듈, 함수, 문자열, 리스트, 사전... 뭐 아무거라도 됩니다.
예제 4.7. dir 소개
- >>> li = []
- >>> dir(li) ①
['append', 'count', 'extend', 'index', 'insert',
'pop', 'remove', 'reverse', 'sort']
>>> d = {}
>>> dir(d) ② ['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'setdefault', 'update', 'values']
>>> import odbchelper
>>> dir(odbchelper) ③
['__builtins__', '__doc__', '__file__', '__name__', 'buildConnectionString']
① li는 리스트입니다. 그래서 dir(li)는 리스트의 모든 메쏘드를 담은 리스트를 돌려줍니다. 주의할 것은 반환된 리스트에는 메쏘드의 이름이 문자열로 담겨있지, 메쏘드 자체가 들어가 있는 것이 아니라는 것입니다. ② d는 사전입니다. 그래서 dir(d)는 사전 메쏘드의 이름들을 담은 리스트를 돌려줍니다. 이 메쏘드들 중 적어도 keys는 틀림없이 눈에 익을 것입니다.
③ 이곳이 정말 흥미로와지는 곳입니다. odbchelper는 모듈입니다. 그래서 dir(odbchelper)는 그 모듈에 정의된 온갖 것들을 리스트에 모두 담아 돌려줍니다. 내장 속성을 비롯하여, __name__과 __doc__ 그리고 여러분이 정의한 속성과 메쏘드를 모두 담고 있습니다. 이 경우, odbchelper는 제 2 장에서 설명한 단 한 개의 사용자-정의 메쏘드 buildConnectionString 함수가 있습니다.
마지막으로, callable 함수는 객체를 취해서 그 객체가 호출가능하면 True를 돌려주고, 그렇지 않으면 False를 돌려줍니다. 호출가능 객체에는 함수와 클래스 메쏘드 그리고 심지어 클래스도 포함됩니다. (다음 장에서 클래스에 관하여 더 자세히 다룹니다.)
예제 4.8. callable 소개
- >>> import string
- >>> string.punctuation ①
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>> string.join ②
<function join at 00C55A7C>
>>> callable(string.punctuation) ③
False
>>> callable(string.join) ④
True
>>> print string.join.__doc__ ⑤
join(list [,sep]) -> string
Return a string composed of the words in list, with
intervening occurrences of sep. The default separator is a
single space.
(joinfields and join are synonymous)
① (많은 사람들이 여전히 join 함수를 사용하고 있음에도 불구하고) string 모듈에 있는 함수들은 추천되지 않습니다. 그러나 이 모듈에는 쓸모있는 상수가 많이 담겨 있습니다. 예를 들어 이곳의 string.punctuation 상수에는 표준 구두점 문자들이 모두 들어 있습니다.
② string.join은 문자열의 리스트를 연결하는 함수입니다.
③ string.punctuation은 호출이 불가능합니다; 문자열이기 때문입니다. (문자열은 호출가능한 메쏘드들을 가지지만, 문자열 그 자체는 호출이 불가능합니다.)
④ string.join은 호출이 가능합니다; 두 개의 인자를 취하는 함수입니다.
⑤ 호출가능한 객체라면 모두 문서화 문자열(doc string)을 가질 수 있습니다. 한 객체의 속성에다 callable 함수를 사용하면 어느 속성(메쏘드, 함수, 클래스)에 신경을 쓸지 그리고 어느 속성(상수, 등등)을 무시하고 싶은지 결정할 수 있습니다. 미리 그 객체에 관하여 알 필요가 없습니다.
4.3.3. 내장 함수
type, str, dir, 그리고 나머지 파이썬의 내장 함수들은 모두 이른바 __builtin__이라고 부르는 특별한 모듈로 무리지어져 들어가 있습니다 (앞과 뒤에 밑줄문자가 두개입니다.). 파이썬이 시작시에 자동으로 from __builtin__ import *를 실행하는 것이라고 편하게 생각해도 좋습니다. 이렇게 하면 모든 “built-in” 함수들이 이름공간으로 반입되고 그래서 직접 그 함수들을 사용할 수 있습니다.
이런 식으로 생각하면 __builtin__ 모듈에 관한 정보를 얻어서 모든 내장 함수와 속성을 한 그룹으로 접근할 수 있는 이점이 있습니다. 그리고 추측해 보세요. 파이썬에 info라고 부르는 함수가 있습니다. 지금 그 리스트를 손수 둘러보세요. 더 중요한 함수들을 나중에 깊이 다루어 보겠습니다. (AttributeError 같은 내장 에러 클래스는 이미 눈에 익으실 겁니다.)
예제 4.9. 내장 속성과 함수
- >>> from apihelper import info
- >>> import __builtin__
>>> info(__builtin__, 20)
ArithmeticError Base class for arithmetic errors.
AssertionError Assertion failed.
AttributeError Attribute not found.
EOFError Read beyond end of file.
EnvironmentError Base class for I/O related errors.
Exception Common base class for all exceptions.
FloatingPointError Floating point operation failed.
IOError I/O operation failed.
[...snip...]
☞ 파이썬에는 훌륭한 참조 매뉴얼이 따라옵니다. 파이썬이 제공하는 모든 모듈들을 배우려면 이를 철저히 정독하여야 하겠습니다. 그러나 파이썬은 대체로 자체로-문서화되어 있습니다. 파이썬과는 다르게 대부분의 다른 언어에서 이런 모듈의 사용법을 기억해 내려면 맨 페이지나 매뉴얼을 다시 몸소 참조해야 합니다.
'Python' 카테고리의 다른 글
4.6. and와 or의 특이한 본성 (0) | 2012.01.11 |
---|---|
4.4. getattr로 객체 참조점 얻는 방법 (0) | 2012.01.11 |
4. 강력한 내부검사 (0) | 2012.01.11 |
3.7. 문자열을 결합하고 분리하기(join, split) (0) | 2012.01.11 |
3.6. 리스트 짝짓기 (0) | 2012.01.11 |