영어가 짧아서, 내가 이해하고자 번역한 페이지
원본페이지
Everything Is an Object
혹시 놓칠까 봐, 파이썬 함수는 속성을 가지고 있고, 그 속성들은 런타임에 사용할 수 있습니다.
파이썬의 다른 모든 것과 마찬가지로 함수는 객체입니다.
좋아하는 Python IDE를 열고 다음을 수행하세요.
>> import odbchelper 1 >> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"} >> print odbchelper.buildConnectionString(params) 2 server=mpilgrim;uid=sa;database=master;pwd=secret >> print odbchelper.buildConnectionString.__doc__ 3 Build a connection string from a dictionary
- 첫 번째 줄은 대화식 또는 더 큰 파이썬 프로그램에서 사용할 수 있는 코드 덩어리인 odbchelper 프로그램을 모듈로 가져옵니다. (다중 모듈 파이썬 프로그램의 예는 4장에서 볼 수 있습니다.) 모듈을 가져오면 공용 함수, 클래스 또는 특성을 참조할 수 있습니다. 모듈은 다른 모듈의 기능에 액세스하기 위해 이 작업을 수행할 수 있으며 IDE에서도 이 작업을 수행할 수 있습니다. 이것은 중요한 개념이고, 나중에 더 자세히 이야기하게 될 것입니다.
- 가져온 모듈에 정의된 함수를 사용하려면 모듈 이름을 포함해야 합니다. buildConnectionString이라고만 할 수 없습니다. odbchelper여야 합니다.buildConnectionString. 자바어로 된 수업들을 사용해본 적이 있다면, 이것은 어렴풋이 친숙하게 느껴질 것입니다.
- 함수를 예상대로 호출하는 대신 함수의 특성 중 하나인 doc을(를) 요청했습니다.
더 나아가기 전에 library 검색경로에 대해 간단히 말씀드리겠습니다. Python은 모듈을 가져오려고 할 때 여러 곳을 봅니다. 특히 sys.path에 정의된 모든 디렉터리를 찾습니다. 이 목록은 목록일 뿐이며 표준 목록 방법을 사용하여 쉽게 보거나 수정할 수 있습니다. (목록에 대한 자세한 내용은 이 장의 뒷부분에 설명되어 있습니다.)
>> import sys 1 >> sys.path 2 ['', '/usr/local/lib/python2.2', '/usr/local/lib/python2.2/plat-linux2', '/usr/local/lib/python2.2/lib-dynload', '/usr/local/lib/python2.2/site-packages', '/usr/local/lib/python2.2/site-packages/PIL', '/usr/local/lib/python2.2/site-packages/piddle'] >> sys 3 <module 'sys' (built-in)> >> sys.path.append('/my/new/path') 4
- sys 모듈을 가져오면 모든 기능과 특성을 사용할 수 있습니다.
- sys.path는 현재 검색 경로를 구성하는 디렉터리 이름의 목록입니다. (운영 체제, 실행 중인 파이썬 버전, 원래 설치된 위치에 따라 다르게 표시됩니다.) Python은 가져오려는 모듈 이름과 일치하는 .py 파일을 찾기 위해 이 디렉터리들을 살펴볼 것입니다.
- 사실, 나는 거짓말을 했다; 진실은 그것보다 더 복잡합니다. 왜냐하면 모든 모듈이 .py 파일로 저장되는 것은 아니기 때문입니다. sys 모듈과 같은 일부는 "내장 모듈"이며, 실제로 파이썬 자체에 구워집니다. 내장 모듈은 일반 모듈처럼 동작하지만 파이썬으로 작성되지 않았기 때문에 파이썬 소스 코드를 사용할 수 없습니다.
- 디렉터리 이름을 sys.path에 추가하여 런타임에 Python의 검색 경로에 새 디렉터리를 추가할 수 있습니다. 그러면 모듈을 가져오려고 할 때마다 Python도 해당 디렉터리를 검색합니다. Python이 실행되는 동안 효과가 지속됩니다. (추가 및 기타 목록 방법은 3장에서 자세히 설명합니다.)
파이썬의 모든 것은 객체이며, 거의 모든 것은 특성과 메소드를 가지고 있습니다. 모든 함수에는 함수의 소스 코드에 정의된 doc 문자열을 반환하는 doc 특성이 내장되어 있습니다. sys 모듈은 경로라는 속성을 가진 객체입니다. 기타 등등.
여전히, 이것은 문제를 제기합니다. What is an object? 각기 다른 프로그래밍 언어는 "객체"를 다른 방식으로 정의합니다. 어떤 것은 모든 객체가 속성과 메소드를 가져야 한다는 의미이고, 어떤 것은 모든 객체가 하위 분류 가능하다는 의미입니다. 파이썬에서, 어떤 객체들은 속성이나 메소드를 가지고 있지 않으며(3장에서 더 자세히), 모든 객체가 하위 분류가 가능한 것은 아닙니다(5장에서 더 자세히). 그러나 모든 것은 변수에 할당되거나 함수에 인수로 전달될 수 있다는 점에서 객체입니다.
이것은 매우 중요해서 여러분이 처음 몇 번 놓치셨을 경우를 대비해서 다시 말씀드리겠습니다: 파이썬의 모든 것은 객체입니다. 문자열은 객체입니다. 목록은 객체입니다. 함수는 객체입니다. 심지어 모듈도 객체입니다.