import
방법\n",
"***"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1-1 모듈 import
하기\n",
"#### 1) import
모듈명\n",
"- 가장 기본적인 형태\n",
" - 현재의 이름 공간에 mymath
이름이 유지되므로 mymath.area()
형태로 자격 이름 사용"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"78.5\n"
]
}
],
"source": [
"import mymath\n",
"print(mymath.area(5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 2) from 모듈명 import 이름들
\n",
"- 해당 모듈에 존재하는 지정 이름들을 현재 이름 공간으로 불러들인다.\n",
"- 불러들인 각 이름들은 모듈 이름 없이 직접 사용 가능하다.\n",
"- import
하는 이름들이 기존에 미리 존재하고 있었다면 그 이름들에 의해 참조되던 기존 객체들은 상실된다."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"78.5\n"
]
}
],
"source": [
"from mymath import area, mypi\n",
"print(area(5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 3) from 모듈명 import *
\n",
"- 해당 모듈에 존재하는 '\\_\\_'로 시작되는 이름들을 제외한 모든 이름들을 현재 이름 공간으로 불러들인다. "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"78.5\n"
]
}
],
"source": [
"from mymath import *\n",
"print(area(5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 4) import 모듈명 as 새로운 모듈 이름
\n",
"- 해당 모듈을 새로운 다른 이름으로 사용하고자 할 때 사용\n",
"- 기존 모듈 이름이 너무 길거나 현재 사용중인 다름 이름들과 충돌이 일어날 때 유용"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"from 모듈명 import 이름 as 새로운 이름[, 이름 as 새로운 이름]
\n",
"- 해당 모듈 내에 정의된 이름을 다른 새로운 이름으로 사용하고자 할 때 사용"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\n",
"!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\n"
]
}
],
"source": [
"from string import punctuation\n",
"print(punctuation)\n",
"from string import punctuation as punc\n",
"print(punc)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"import
문은 보통의 문(statement)이 작성될 수 있는 곳이면 어디에서나 사용 가능\n",
" - 예를 들면 함수 정의 def
문 안이나 if
문 안에서 사용할 수 있음"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def str_test(s):\n",
" import string\n",
" t = string.split(s)\n",
" return(t)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1-2 import에 의한 모듈 코드 수행\n",
"- import는 코드를 가져오기만 하는 것이 아니라 가져온 코드를 수행한다."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"50.24\n"
]
}
],
"source": [
"#FILE : mymath.py\n",
"mypi = 3.14\n",
"\n",
"def add(a, b):\n",
" return a + b\n",
"\n",
"def area(r):\n",
" return mypi * r * r\n",
"\n",
"print(area(4.0))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import mymath\n",
"\n",
"#기존:\n",
"#50.24"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1-3 컴파일과 적재시간\n",
"- import mymath
를 수행할 때 발생하는 일\n",
" - 1) 우선 mymath.pyc
를 찾는다.\n",
" - 2) mymath.pyc
가 없다면 mymath.py
를 찾아서 mymath.pyc
를 생성한다.\n",
" - 3) 생성된 mymath.pyc
를 메모리로 읽어들여 수행한다.\n",
"- .pyc
파일\n",
" - 바이트 코드 파일\n",
" - 기계나 플랫폼(OS)에 의존하지 않도록 만들어진 일종의 목적 코드 (Object Code)\n",
" - 파이썬은 컴파일 언어이면서 동시에 인터프리터 언어의 수행 방식을 취하고 있다.\n",
"- 새로운 .pyc
생성에 대한 판단\n",
" - .py
수정 시간이 .pyc
수정 시간보다 더 최근일 때\n",
"- .py
가 없이도 .pyc
파일만 있어도 import
가능\n",
" - 코드를 숨기는 간단한 기법으로 활용 가능"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1-4 모듈 이름과 이미 사용하고 있던 이름이 같다면?\n",
"- 이전의 이름이 참조하던 객체는 상실됨"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"string = \"My first string\"\n",
"import string\n",
"print(string)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"My first string\n"
]
}
],
"source": [
"import string\n",
"string = \"My first string\" #여기서 string이란 이름은 문자열을 참조하게 된다.\n",
"print(string)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 한번 import
되었던 모듈은 메모리에 적재되어지고, 나중에 다시 동일한 모듈을 import
하면 메모리에 적재되어 있던 모듈이 즉시 사용된다."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"My first string\n",
"1\n"
]
}
],
"source": [
"import string\n",
"string.a = 1\n",
"string = \"My first string\"\n",
"print(string)\n",
"\n",
"import string\n",
"print(string.a) # 여기서 string 모듈이 기존에 이미 등록되었던 것임을 알 수 있다."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"***\n",
"## 2 모듈의 실행과 테스트 코드\n",
"***\n",
"- \\_\\_name\\_\\_\n",
" - 모듈의 이름이 자동으로 저장되는 변수\n",
" - 현재의 모듈이 최상위 모듈로서 수행되는지, 아니면 다른 모듈에 의해 import되어 수행되는지를 구별하기 위해 주로 활용\n",
" - 최상위 모듈: 파이썬 인터프리터가 기본적으로 가장 먼저 인식하여 처리하는 모듈\n",
" - 모듈의 이름이 항상 \"\\_\\_main\\_\\_\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- prname.py
를 직접 수행할 때의 출력 내용: \\_\\_main\\_\\_\n",
" - \\>\\>\\> ipython prname.py
\n",
" - \\_\\_main\\_\\_\n",
" - prname.py
가 최상위 모듈로서 수행됨을 의미"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"__main__\n"
]
}
],
"source": [
"#FILE : prname.py\n",
"print(__name__)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- prname.py
가 모듈로서 다른 이름 공간으로 import
되어질 때의 출력 내용: prname
"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"prname\n"
]
}
],
"source": [
"import prname\n",
"print(prname.__name__)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"string\n",
"re\n",
"os\n"
]
}
],
"source": [
"import string\n",
"print(string.__name__)\n",
"\n",
"import re\n",
"print(re.__name__)\n",
"\n",
"import os\n",
"print(os.__name__)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 아래 코드는 최상위 모듈로서 수행될 때 add()
함수 호출이 일어난다. \n",
"- 보통 파이썬 모듈을 개발할 때에는 마지막 부분에 if \\_\\_name\\_\\_ == \"\\_\\_main\\_\\_\": 과 같은 코드를 추가하여 테스트 코드를 삽입한다."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"11\n",
"Python is becoming popular.\n"
]
}
],
"source": [
"#file: module_test.py\n",
"def add(a, b):\n",
" return a + b\n",
"\n",
"def f():\n",
" print(\"Python is becoming popular.\")\n",
"\n",
"if __name__ == \"__main__\":\n",
" print(add(1, 10))\n",
" f()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 정의된 모듈이 다른 모듈로 import
되어질 때에는 \\_\\_name\\_\\_은 모듈 이름 자체이므로 위 코드에서 if
문이 수행되지 않는다. \n",
" - 즉, test()
함수 호출이 곧바로 되지 않는다."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"import module_test"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"***\n",
"## 3 패키지\n",
"***"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3-1 패키지의 이해"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 패키지 (Package)\n",
" - 여러 모듈들을 한데 묶어서 정리해 놓은 구조\n",
" - 물리적으로 여러 모듈 파일을 모아 놓은 디렉토리에 해당\n",
" - 최상위 디렉토리 이름이 패키지 이름이 된다.\n",
" - 최상위 디렉토리 하위에 여러 서브 디렉토리는 해당 최상위 패키지의 하위 패키지가 된다. \n",
"- 예제: Speech 패키지\n",
" - 각 폴더마다 \\_\\_init\\_\\_.py 파일 존재에 유의\n",
" - 패키지가 임포트 되면 \\_\\_init\\_\\_.py 파일에 존재하는 내용은 자동으로 실행됨"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![inheritance](../images/package.png)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import Speech"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Speech 디렉토리의 위치\n",
" - sys.path
(또는 PYTHONPATH
환경 변수)에 열거된 폴더 중 하나에 위치해야 한다."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Speech/Recognition/HMM.py
코드 내용"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def train():\n",
" print(\"Train\")\n",
" pass\n",
"\n",
"def loadModel():\n",
" print(\"LoadModel\")\n",
" pass\n",
"\n",
"def saveModel():\n",
" print(\"SaveModel\")\n",
" pass"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3-2 \\_\\_init\\_\\_.py의 역할\n",
"- \\_\\_init\\_\\_.py 파일이 존재해야지만 파이썬 패키지로서 인식됨"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3-3 import
하기"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import Speech"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train\n"
]
}
],
"source": [
"Speech.Recognition.HMM.train()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train\n"
]
}
],
"source": [
"import Speech.Recognition.HMM\n",
"Speech.Recognition.HMM.train()"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train\n"
]
}
],
"source": [
"from Speech.Recognition import HMM\n",
"HMM.train()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train\n"
]
}
],
"source": [
"from Speech.Recognition.HMM import train\n",
"train()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3-4 import *
하기"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train\n",
"LoadModel\n",
"SaveModel\n"
]
}
],
"source": [
"from Speech.Recognition.HMM import *\n",
"train()\n",
"loadModel()\n",
"saveModel()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"참고 문헌: 파이썬(열혈강의)(개정판 VER.2), 이강성, FreeLec, 2005년 8월 29일
"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 1
}