"Python"의 두 판 사이의 차이

오픈소스 비즈니스 컨설팅
둘러보기로 가기 검색하러 가기
 
 
(같은 사용자의 중간 판 79개는 보이지 않습니다)
1번째 줄: 1번째 줄:
오브젝트 지향 프로그래밍, 구조화 프로그래밍, 관점 중심 프로그래밍 및 함수 프로그래밍을 지원하는 프로그램 언어인 Python을 정리 한다.  
+
오브젝트 지향 프로그래밍, 구조화 프로그래밍, 관점 중심 프로그래밍 및 함수 프로그래밍을 지원하는 프로그램 언어인 Python을 정리 한다.
*홈페이지 : http://www.python.org/
+
 
*다운로드 : http://www.python.org/download/, [http://httpd.apache.org/modules/python-download.cgi Apache Python Module]
+
*홈페이지 : http://www.python.org/
 +
**Library : https://docs.python.org/3/library/
 +
*다운로드 : http://www.python.org/download/, [http://httpd.apache.org/modules/python-download.cgi Apache Python Module]
 +
 
 
:*[http://pypi.python.org/pypi/ Python Packages]
 
:*[http://pypi.python.org/pypi/ Python Packages]
*라이선스 : [http://www.python.org/psf/license/ Python 2.6.2 license]
 
*플랫폼  :
 
<br>
 
  
==설치 가이드==
+
*라이선스&nbsp;: [http://www.python.org/psf/license/ Python 2.6.2 license]
===Python 설치===
+
*플랫폼 &nbsp;:
 +
 
 +
 
 +
 
 +
== 설치 가이드 ==
 +
 
 +
=== Python 배포판 ===
 +
 
 +
* Anaconda : https://www.anaconda.com/
 +
* Python(x, y) : http://python-xy.github.com/
 +
* Enthought Canopy : https://enthought.com/products/epd
 +
* WinPython : http://winpython.github.io/
 +
 
 +
=== Python 설치 ===
 +
 
 
Python 최신 버전은 3.0.1이나 Apache HTTP Server 2.2와 연동을 위해 Python 2.5 버전을 설치 한다.
 
Python 최신 버전은 3.0.1이나 Apache HTTP Server 2.2와 연동을 위해 Python 2.5 버전을 설치 한다.
<br>
 
  
 
*[http://www.python.org/download/ 다운로드 사이트]에서 Python 2.5.4 ("python-2.5.4.msi") 파일을 다운로드 한다.
 
*[http://www.python.org/download/ 다운로드 사이트]에서 Python 2.5.4 ("python-2.5.4.msi") 파일을 다운로드 한다.
<br>
+
 
 +
 
  
 
*다운로드 받은 파일을 실행한 후 "Install for all users"를 선택 한다.
 
*다운로드 받은 파일을 실행한 후 "Install for all users"를 선택 한다.
[[그림:Python_install_01.png|설치 시작]]
+
 
<br>
+
[[File:Python install 01.png|설치 시작]]
  
 
*Python 설치 디렉토리를 설정 한다.
 
*Python 설치 디렉토리를 설정 한다.
[[그림:Python_install_02.png|폴더 설정]]
+
 
<br>
+
[[File:Python install 02.png|폴더 설정]]
  
 
*설치할 모듈을 선택 하는 화면으로 그냥 "Next" 버튼을 선택 하여 설치를 완료 한다.
 
*설치할 모듈을 선택 하는 화면으로 그냥 "Next" 버튼을 선택 하여 설치를 완료 한다.
[[그림:Python_install_03.png|모듈 선택]]
+
 
<br>
+
[[File:Python install 03.png|모듈 선택]]
  
 
*Python 설치 후 사용하기 위해서 필요한 환경을 설정한다.
 
*Python 설치 후 사용하기 위해서 필요한 환경을 설정한다.
:*PYTHON_HOME=c:/app/Python<br>
+
 
 +
:*PYTHON_HOME=c:/app/Python
 
:*PATH=c:/app/Python (기존 PATH에 추가)
 
:*PATH=c:/app/Python (기존 PATH에 추가)
[[그림:JDK600_environment.png|환경 설정]]
+
 
 +
[[File:JDK600 environment.png|환경 설정]]
 +
 
 
#바탕화면의 "내 컴퓨터"에서 오른 마우스를 클릭한 후 "속성"을 선택한다.
 
#바탕화면의 "내 컴퓨터"에서 오른 마우스를 클릭한 후 "속성"을 선택한다.
#"고급" 탭에서 하단에 있는 "환경 변수" 버튼을 누른다.  
+
#"고급" 탭에서 하단에 있는 "환경 변수" 버튼을 누른다.
 
#위에 명시한 환경 변수를 추가 또는 수정한다.
 
#위에 명시한 환경 변수를 추가 또는 수정한다.
<br>
+
 
 +
 
  
 
*환경 설정이 정상적으로 되었는지 확인하기 위해 도스창에서 다음 명령을 사용하여 Python의 버전을 확인한다.
 
*환경 설정이 정상적으로 되었는지 확인하기 위해 도스창에서 다음 명령을 사용하여 Python의 버전을 확인한다.
 +
 
  python -V
 
  python -V
<br>
 
  
===Setuptools 설치===
+
=== Setuptools 설치 ===
 +
 
 
파이선용 패키지 설치 자동화 툴인 [http://pypi.python.org/pypi/setuptools setuptools]를 설치 한다.
 
파이선용 패키지 설치 자동화 툴인 [http://pypi.python.org/pypi/setuptools setuptools]를 설치 한다.
  
 
*[http://pypi.python.org/pypi/setuptools 다운로드 사이트]에서 MS Windows Installer인 "setuptools-0.6c9.win32-py2.5.exe" 파일을 다운로드 한다.
 
*[http://pypi.python.org/pypi/setuptools 다운로드 사이트]에서 MS Windows Installer인 "setuptools-0.6c9.win32-py2.5.exe" 파일을 다운로드 한다.
<br>
+
 
 +
 
  
 
*다운로드 받은 프로그램을 관리자 권한으로 실행한 후 "다음(N)" 버튼을 선택 한다.
 
*다운로드 받은 프로그램을 관리자 권한으로 실행한 후 "다음(N)" 버튼을 선택 한다.
[[그림:Python_install_04.png|설치 시작]]
+
 
<br>
+
[[File:Python install 04.png|설치 시작]]
  
 
*Python이 설치된 디렉토리와 설치할 디렉토리를 확인 한다.
 
*Python이 설치된 디렉토리와 설치할 디렉토리를 확인 한다.
[[그림:Python_install_05.png|설치 폴더]]
+
 
<br>
+
[[File:Python install 05.png|설치 폴더]]
  
 
*"다음(N)" 버튼을 선택하여 설치를 완료 한다.
 
*"다음(N)" 버튼을 선택하여 설치를 완료 한다.
[[그림:Python_install_06.png|설치 완료]]
+
 
<br>
+
[[File:Python install 06.png|설치 완료]]
  
 
*setuptools는 아래 디렉토리에 설치가 된다.
 
*setuptools는 아래 디렉토리에 설치가 된다.
 +
 
  $PYTHON_HOME/Lib/site-packages/'''setuptools'''
 
  $PYTHON_HOME/Lib/site-packages/'''setuptools'''
 
  $PYTHON_HOME/Scripts/    #--- 실행 프로그램은 여기에 설치가 된다.
 
  $PYTHON_HOME/Scripts/    #--- 실행 프로그램은 여기에 설치가 된다.
<br>
+
 
 +
 
  
 
*Python용 setuptools 설치 후 사용하기 위해서 필요한 환경을 설정한다.
 
*Python용 setuptools 설치 후 사용하기 위해서 필요한 환경을 설정한다.
 +
 
:*PYTHONPATH=c:/app/Python/Lib;c:/app/Python/DLLs;c:/app/Python/Lib/lib-tk;c:/app/Python/Lib/site-packages
 
:*PYTHONPATH=c:/app/Python/Lib;c:/app/Python/DLLs;c:/app/Python/Lib/lib-tk;c:/app/Python/Lib/site-packages
 
:*PATH=c:/app/Python/Scripts (기존 PATH에 추가)
 
:*PATH=c:/app/Python/Scripts (기존 PATH에 추가)
[[그림:JDK600_environment.png|환경 설정]]
+
 
 +
[[File:JDK600 environment.png|환경 설정]]
 +
 
 
#바탕화면의 "내 컴퓨터"에서 오른 마우스를 클릭한 후 "속성"을 선택한다.
 
#바탕화면의 "내 컴퓨터"에서 오른 마우스를 클릭한 후 "속성"을 선택한다.
#"고급" 탭에서 하단에 있는 "환경 변수" 버튼을 누른다.  
+
#"고급" 탭에서 하단에 있는 "환경 변수" 버튼을 누른다.
 
#위에 명시한 환경 변수를 추가 또는 수정한다.
 
#위에 명시한 환경 변수를 추가 또는 수정한다.
<br>
+
 
 +
 
  
 
*Setuptools을 사용한 python용 추가 모듈 설치 방법
 
*Setuptools을 사용한 python용 추가 모듈 설치 방법
 +
 
:*추가 모듈은 도스창에서 다음 명령으로 쉽게 설치할 수 있다.
 
:*추가 모듈은 도스창에서 다음 명령으로 쉽게 설치할 수 있다.
 
:*설치된 python 버전에 맞는 추가 모듈이 자동으로 설치 된다.
 
:*설치된 python 버전에 맞는 추가 모듈이 자동으로 설치 된다.
 +
 
  easy_install 모듈명
 
  easy_install 모듈명
<br>
 
  
==Python 추가 모듈 설치==
+
 
===Apache Python Module 설치===
+
 
*[[Apache HTTP Server]]와 연동할 필요가 있을 경우에만 설치 한다.
+
== Python 추가 모듈 설치 ==
 +
 
 +
=== Apache Python Module 설치 ===
 +
 
 +
*[[Apache HTTP Server|Apache HTTP Server]]와 연동할 필요가 있을 경우에만 설치 한다.
  
 
*Apache Python Module 설치
 
*Apache Python Module 설치
 +
 
:*[http://www.modpython.org/ mod_python] 또는 [http://httpd.apache.org/modules/python-download.cgi Mod_python 다운로드 사이트]에서 mod_python-3.3.1.win32-py2.5-Apache2.2.exe 파일을 다운로드 한다.
 
:*[http://www.modpython.org/ mod_python] 또는 [http://httpd.apache.org/modules/python-download.cgi Mod_python 다운로드 사이트]에서 mod_python-3.3.1.win32-py2.5-Apache2.2.exe 파일을 다운로드 한다.
<br>
+
 
 +
 
  
 
*다운로드 받은 파일을 관리자 권한으로 실행하여 "다음(N)" 버튼만 눌러 주면 설치가 된다.
 
*다운로드 받은 파일을 관리자 권한으로 실행하여 "다음(N)" 버튼만 눌러 주면 설치가 된다.
:*설치된 [[Apache HTTP Server]]의 홈 디렉토리를 물어보면 해당 디렉토리를 선택하면 된다.
+
 
 +
:*설치된 [[Apache HTTP Server|Apache HTTP Server]]의 홈 디렉토리를 물어보면 해당 디렉토리를 선택하면 된다.
 +
 
 
  $PYTHON_HOME/Lib/site-packages/'''mod_python'''  #--- 폴더가 생성 된다.
 
  $PYTHON_HOME/Lib/site-packages/'''mod_python'''  #--- 폴더가 생성 된다.
 
  $APACHE_HOME/modules/mod_python.so                #--- 파일이 생성 된다.
 
  $APACHE_HOME/modules/mod_python.so                #--- 파일이 생성 된다.
<br>
+
 
 +
 
  
 
*Python sys.path에는 다음과 같은 값이 설정 된다.
 
*Python sys.path에는 다음과 같은 값이 설정 된다.
 +
 
  C:/WINDOWS/system32/python25.zip
 
  C:/WINDOWS/system32/python25.zip
 
  C:/app/Python/Lib
 
  C:/app/Python/Lib
101번째 줄: 138번째 줄:
 
  C:/app/Python
 
  C:/app/Python
 
  C:/app/Python/lib/site-packages
 
  C:/app/Python/lib/site-packages
<br>
+
 
 +
 
  
 
*$APACHE_HOME/conf/httpd.conf에서 Python 사용을 위한 환경 설정
 
*$APACHE_HOME/conf/httpd.conf에서 Python 사용을 위한 환경 설정
 +
 
:*mode_python은 기본적으로 세가지 handler를 제공 한다.
 
:*mode_python은 기본적으로 세가지 handler를 제공 한다.
:*testhandler : 테스트용으로 Python으로 전달된 값을 웹페이지에 표시 한다.
+
:*testhandler&nbsp;: 테스트용으로 Python으로 전달된 값을 웹페이지에 표시 한다.
:*publisher : CGI 방식으로 Python을 실행 한다. (~.py)
+
:*publisher&nbsp;: CGI 방식으로 Python을 실행 한다. (~.py)
:*psp : PSP (Python Server Page) 방식으로 Python을 실행 한다. (~.psp)
+
:*psp&nbsp;: PSP (Python Server Page) 방식으로 Python을 실행 한다. (~.psp)
 +
 
 
  LoadModule cgi_module modules/mod_python.so #--- 추가
 
  LoadModule cgi_module modules/mod_python.so #--- 추가
 
   
 
   
 
  <Directory "C:/www">                         
 
  <Directory "C:/www">                         
    #--- 폴더별로 아래 설정을 다르게 가질 수 있다.
+
    #--- 폴더별로 아래 설정을 다르게 가질 수 있다.
    Options Indexes FollowSymLinks ExecCGI  #--- CGI를 위해 ExecCGI 추가  
+
    Options Indexes FollowSymLinks ExecCGI  #--- CGI를 위해 ExecCGI 추가  
 
   
 
   
    ###--- Test Hanldler를 사용하여 Python 정보와 요청 정보 등을 확인
+
  ###--- Test Hanldler를 사용하여 Python 정보와 요청 정보 등을 확인
    ###--- http://localhost/pythoninfo.py
+
  ###--- http://localhost/pythoninfo.py
 
  #    PythonHandler mod_python.testhandler
 
  #    PythonHandler mod_python.testhandler
 
  #    PythonDebug On
 
  #    PythonDebug On
 
   
 
   
    ###--- CGI 방식으로 Python 파일(~.py) 실행
+
  ###--- CGI 방식으로 Python 파일(~.py) 실행
    ###--- http://localhost/pythoninfo.py/handler
+
  ###--- http://localhost/pythoninfo.py/handler
 
  #    PythonHandler mod_python.publisher
 
  #    PythonHandler mod_python.publisher
 
  #    PythonDebug On
 
  #    PythonDebug On
 
   
 
   
    ###--- PSP (Python Server Page) 방식으로 Python 파일(~.psp) 실행
+
  ###--- PSP (Python Server Page) 방식으로 Python 파일(~.psp) 실행
    ###--- http://localhost/pythoninfo.psp
+
  ###--- http://localhost/pythoninfo.psp
    PythonHandler mod_python.psp
+
  PythonHandler mod_python.psp
    PythonDebug On
+
  PythonDebug On
 
  </Directory>
 
  </Directory>
 
   
 
   
 
  <IfModule dir_module>                      #--- index.cgi index.psp index.py 추가
 
  <IfModule dir_module>                      #--- index.cgi index.psp index.py 추가
    DirectoryIndex index.html index.cgi index.psp index.py
+
    DirectoryIndex index.html index.cgi index.psp index.py
 
  </IfModule>  
 
  </IfModule>  
 
   
 
   
 
  <IfModule mime_module>
 
  <IfModule mime_module>
    AddHandler mod_python .py .psp          #--- 추가
+
    AddHandler mod_python .py .psp          #--- 추가
 
  </IfModule>
 
  </IfModule>
<br>
+
 
 +
 
  
 
*Python에서 한글 설정
 
*Python에서 한글 설정
 +
 
:*[[문자셋과 인코딩#Python|문자셋과 인코딩 - Python]]
 
:*[[문자셋과 인코딩#Python|문자셋과 인코딩 - Python]]
  
 
----
 
----
 +
 
*CGI 방식으로 python 동작 확인 방법
 
*CGI 방식으로 python 동작 확인 방법
 +
 
:*httpd.conf에서 mod_python.publisher를 사용하도록 설정하고 Apache를 재기동 한다.
 
:*httpd.conf에서 mod_python.publisher를 사용하도록 설정하고 Apache를 재기동 한다.
 
:*c:/www/pythoninfo.py (UTF-8 형태로 저장)를 아래와 같이 생성한다.
 
:*c:/www/pythoninfo.py (UTF-8 형태로 저장)를 아래와 같이 생성한다.
 
:*http://localhost/pythoninfo.py 를 호출 한다.
 
:*http://localhost/pythoninfo.py 를 호출 한다.
 +
 
  # -*- coding: utf-8 -*-
 
  # -*- coding: utf-8 -*-
 
  from mod_python import apache
 
  from mod_python import apache
 
   
 
   
 
  def handler(req):
 
  def handler(req):
    req.content_type = 'text/html'
+
    req.content_type = 'text/html'
   
+
   
    req.write("&lt;html&gt;\n")
+
    req.write("<html>\n")
    req.write("&lt;head&gt;\n")
+
      req.write("<head>\n")
    req.write("    &lt;meta http-equiv='Content-Type' content='text/html; charset=UTF-8' /&gt;\n")
+
      req.write("    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />\n")
    req.write("    &lt;title&gt;Python 정보&lt;/title&gt;\n")
+
      req.write("    <title>Python 정보</title>\n")
    req.write("&lt;/head&gt;\n")
+
      req.write("</head>\n")
    req.write("\n")
+
      req.write("\n")
    req.write("&lt;body&gt;\n")
+
      req.write("<body>\n")
    req.write("Python Info (파이썬 정보)!\n")
+
      req.write("Python Info (파이썬 정보)!\n")
    req.write("&lt;body&gt;\n")
+
      req.write("<body>\n")
    req.write("&lt;/html&gt;\n")
+
      req.write("</html>\n")
<br>
+
 
 +
 
  
 
----
 
----
 +
 
*PSP (Python Server Page) 방식으로 python 동작 확인
 
*PSP (Python Server Page) 방식으로 python 동작 확인
 +
 
:*httpd.conf에서 mod_python.psp를 사용하도록 설정하고 Apache를 재기동 한다.
 
:*httpd.conf에서 mod_python.psp를 사용하도록 설정하고 Apache를 재기동 한다.
 
:*c:/www/pythoninfo.psp (UTF-8 형태로 저장)를 아래와 같이 생성한다.
 
:*c:/www/pythoninfo.psp (UTF-8 형태로 저장)를 아래와 같이 생성한다.
 
:*http://localhost/pythoninfo.psp 를 호출 한다.
 
:*http://localhost/pythoninfo.psp 를 호출 한다.
&lt;html&gt;
 
&lt;head&gt;
 
    &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
 
    &lt;title&gt;Python 정보&lt;/title&gt;
 
&lt;/head&gt;
 
 
&lt;body&gt;
 
Python Info (파이썬 정보)!&lt;br&gt;
 
&lt;body&gt;
 
&lt;/html&gt;
 
<br>
 
  
===MySQL for Python 설치===
+
<html>
*[[MySQL]]과 연동할 필요가 있을 경우에만 설치 한다.
+
  <head>
<br>
+
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 +
      <title>Python 정보</title>
 +
  </head>
 +
 
 +
  <body>
 +
  Python Info (파이썬 정보)!<br>
 +
  <body>
 +
  </html>
 +
 
 +
 
 +
 
 +
=== MySQL for Python 설치 ===
 +
 
 +
*[[MySQL|MySQL]]과 연동할 필요가 있을 경우에만 설치 한다.
 +
 
 +
 
 +
 
 +
*사이트&nbsp;: http://sourceforge.net/projects/mysql-python
 +
*다운로드&nbsp;: http://sourceforge.net/project/showfiles.php?group_id=22307
 +
*라이선스&nbsp;: GNU General Public License (GPL), Python License (CNRI Python License), Zope Public License
 +
 
  
*사이트 : http://sourceforge.net/projects/mysql-python
 
*다운로드 : http://sourceforge.net/project/showfiles.php?group_id=22307
 
*라이선스 : GNU General Public License (GPL), Python License (CNRI Python License), Zope Public License
 
<br>
 
  
 
*[http://sourceforge.net/project/showfiles.php?group_id=22307 다운로드 사이트]에서 "MySQL-python-1.2.2.win32-py2.5.exe" 파일을 다운로드 한다.
 
*[http://sourceforge.net/project/showfiles.php?group_id=22307 다운로드 사이트]에서 "MySQL-python-1.2.2.win32-py2.5.exe" 파일을 다운로드 한다.
<br>
+
 
 +
 
  
 
*다운로드 받은 파일을 실행하여 "다음(N)" 버튼만 눌러 주면 아래 폴더에 설치가 된다.
 
*다운로드 받은 파일을 실행하여 "다음(N)" 버튼만 눌러 주면 아래 폴더에 설치가 된다.
 +
 
  $PYTHON_HOME/Lib/site-packages/'''MySQLdb'''
 
  $PYTHON_HOME/Lib/site-packages/'''MySQLdb'''
  
==Python 설치==
+
== Python 설치 ==
===CentOS에서 Python 설치===
+
 
 +
=== CentOS에서 Python 설치 ===
 +
 
 
  yum install python python-*
 
  yum install python python-*
 
  python -V
 
  python -V
  
===Windows에서 Python 설치===
+
=== Windows에서 Python 설치 ===
 +
 
 
*http://www.python.org/download/ 사이트에서 Python을 다운로드 받아 설치 합니다.
 
*http://www.python.org/download/ 사이트에서 Python을 다운로드 받아 설치 합니다.
  
==Python 문법==
+
== Python 문법 ==
===Python 기초===
+
 
 +
=== Python 기초 ===
 +
 
 +
* 파일의 문자셋 설정
 +
# -*- coding: utf-8 -*-
 +
 
 
*코드 블록
 
*코드 블록
:* :와 들여쓰기로 표시
+
:*&nbsp;:와 들여쓰기로 표시
 +
 
 
  ~:
 
  ~:
    ~
+
    ~
 +
 
 
*주석
 
*주석
 +
 
  #!/user/bin/python
 
  #!/user/bin/python
 
  # _*_ coding: cp949 _*_
 
  # _*_ coding: cp949 _*_
217번째 줄: 283번째 줄:
  
 
*한 라인에서 여러 문장을 실행
 
*한 라인에서 여러 문장을 실행
 +
 
  ~; ~; ~
 
  ~; ~; ~
  
*_ : 인터프리터 모드에서 최종 실행된 결과가 저장되는 변수명
+
*_&nbsp;: 인터프리터 모드에서 최종 실행된 결과가 저장되는 변수명
  
===자료형===
+
=== 자료형 ===
*type(~) : 자료형의 이름을 표시
+
 
 +
*str(type(~))&nbsp;: 자료형의 이름을 표시
 
*Python에서 변수는 Call by Reference 값을 가짐, 즉 값을 저장하는 것이 아니라 값이 저장된 곳의 주소를 가짐
 
*Python에서 변수는 Call by Reference 값을 가짐, 즉 값을 저장하는 것이 아니라 값이 저장된 곳의 주소를 가짐
  b = a[:]   : a의 값이 복제되어 다른 주소에 저장된 후 b에 할당됨
+
 
 +
import copy
 +
  b = a[:]   &nbsp;: a의 값이 복제되어 다른 주소에 저장된 후 b에 할당됨
 
  b = copy.deepcopy(a)
 
  b = copy.deepcopy(a)
 +
 +
b = a
 +
b = copy.copy(a)
  
{|cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center"
+
{| cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center"
 
|-
 
|-
|width="20%" align="center" valign="middle" style="background-color:#eee;"|숫자
+
| width="20%" align="center" valign="middle" style="background-color:#eee;" | 숫자
|width="80%" align="left" valign="middle"|
+
| width="80%" align="left" valign="middle" |  
 
*int, float, complex (복소수)
 
*int, float, complex (복소수)
*int 상수 : 0b~. 2진수, 0o~. 8진수, 0x~. 16진수
+
*int 상수&nbsp;: 0b~. 2진수, 0o~. 8진수, 0x~. 16진수
*int를 진수로 표시된 숫자로 변환 : bin(78), oct(78), hex(78)
+
*int를 진수로 표시된 숫자로 변환&nbsp;: bin(78), oct(78), hex(78)
 
*x = 3 - 5i
 
*x = 3 - 5i
:*x.real : 실수부
+
 
:*x.imag : 허수부
+
:*x.real&nbsp;: 실수부
 +
:*x.imag&nbsp;: 허수부
 
:*x.conjugate()
 
:*x.conjugate()
 +
format(숫자, ",.2f")
 +
format(숫자, "6,.2f")
 +
 
|-
 
|-
|align="center" valign="middle" style="background-color:#eee;"|문자
+
| align="center" valign="middle" style="background-color:#eee;" | 문자
|align="left" valign="middle"|
+
| align="left" valign="middle" |  
*string : "~", '~'
+
*string&nbsp;: "~", '~'
:*str[0] : 0. str 문자열의 첫번째 문자, 단 수정시에는 사용할 수 없음
+
 
:*str[-1] : -1. str 문자열에서 마직막 문자
+
:*str[0]&nbsp;: 0. str 문자열의 첫번째 문자, 단 수정시에는 사용할 수 없음
:*str[1:4] : str 문자열에서 인덱스가 1에서 4까지의 문자
+
:*str[-1]&nbsp;: -1. str 문자열에서 마지막 문자
 +
:*str[1:4]&nbsp;: str 문자열에서 인덱스가 1에서 4까지의 문자
 +
:*len(str) : 문자열의 길이
 
:*~.encode('utf-8')
 
:*~.encode('utf-8')
:*ord('s') : 문자의 유니코드 값, chr(115) : 유니코드에 해당하는 문자
+
:*ord('s')&nbsp;: 문자의 유니코드 값, chr(115)&nbsp;: 유니코드에 해당하는 문자
 +
 
 
  """
 
  """
 
  Hear Text
 
  Hear Text
 
  """
 
  """
:*str(~) : 숫자를 string 형으로 변환
+
 
:*~.rjust(3) : 주어진 인수의 길이로 오른쪽 정렬 합니다.
+
:*str1 + str2 : 문자열 합치기
:*~.zfill(3) : 주어진 인수의 길이로 왼쪽에 0을 채워 표시 합니다.
+
:*str.split['x'] : 문자열을 쪼개어 List에 저장 한다.
 +
:*str(~)&nbsp;: 숫자를 string 형으로 변환
 +
:*~.rjust(3)&nbsp;: 주어진 인수의 길이로 오른쪽 정렬 합니다.
 +
:*~.zfill(3)&nbsp;: 주어진 인수의 길이로 왼쪽에 0을 채워 표시 합니다.
 
:*format
 
:*format
::*{~:~n} : n. 크기, >. 오른쪽 정렬, < 왼쪽 정렬, ^. 가운데 정렬
+
::*{~:~n}&nbsp;: n. 크기, >. 오른쪽 정렬, < 왼쪽 정렬, ^. 가운데 정렬
:::*= 부호 표시, +. Plus 부호, -. 마이너스 분호,  
+
:::*= 부호 표시, +. Plus 부호, -. 마이너스 분호,
 
:::*b. 이진수, d. 십진수, o. 8진수, x. 16진수, c. 문자열
 
:::*b. 이진수, d. 십진수, o. 8진수, x. 16진수, c. 문자열
:::*e. 지수, f. 실수, %. 퍼센트 ({~:.3f} : 소숫점 세자리까지 표시)
+
:::*e. 지수, f. 실수,&nbsp;%. 퍼센트 ({~:.3f}&nbsp;: 소숫점 세자리까지 표시)
 +
 
 
  "{0}~{1}".format(~, ~)
 
  "{0}~{1}".format(~, ~)
 
  "{aaa}~{bbb}".format(aaa=~, bbb=~)
 
  "{aaa}~{bbb}".format(aaa=~, bbb=~)
264번째 줄: 348번째 줄:
 
  "{0[item]}" ~ {0[color]}".format(dic)
 
  "{0[item]}" ~ {0[color]}".format(dic)
 
  "{item}" ~ {color]}".format(**dic)
 
  "{item}" ~ {color]}".format(**dic)
 +
 +
"{~.~}.format(**vars())
 +
"{0:$>5}".format(~) : 전체 길이 5, 빈공간을 채우는 문자는 $
 +
 
|-
 
|-
|align="center" valign="middle" style="background-color:#eee;"|논리
+
| align="center" valign="middle" style="background-color:#eee;" | 논리
|align="left" valign="middle"|
+
| align="left" valign="middle" |  
*bool : True, False
+
*bool&nbsp;: True, False
 +
 
 
|-
 
|-
|align="center" valign="middle" style="background-color:#eee;"|Array
+
| align="center" valign="middle" style="background-color:#eee;" | Array
|align="left" valign="middle"|
+
| align="left" valign="middle" |  
 
*Array, 배열
 
*Array, 배열
:*~[n] : 0, 1, 2, ...
+
from array import array
 +
tmpArray = array('i')  #--- https://docs.python.org/3/library/array.html
 +
 
 +
:*~[n]&nbsp;: 0, 1, 2, ...
 
:*-1. 맨 마지막 항목
 
:*-1. 맨 마지막 항목
:*0:2 : 0, 1, 2 항목 배열
+
:*0:2&nbsp;: 0, 1, 2 항목 배열
 +
 
 
|-
 
|-
|align="center" valign="middle" style="background-color:#eee;"|List
+
| align="center" valign="middle" style="background-color:#eee;" | List
|align="left" valign="middle"|
+
| align="left" valign="middle" |  
*List : [~, ~, ~], 0. 첫번째 항목
+
* 생성자 : list(), []
:*len(~) : List의 크기
+
*List&nbsp;: [~, ~, ~], 0. 첫번째 항목
:*~.append(val) : 항목 추가
+
 
:*~.extend(valList) : List 추가
+
:*len(~)&nbsp;: List의 크기
:*~.insert(pos, val) : pos 번째 위치에 x 추가
+
:*~.append(val)&nbsp;: 항목 추가
:*~.remove(val) : val 값을 갖는 항목 삭제
+
:*~.extend(valList)&nbsp;: List 추가
:*~pop([pos]) : pos 위치에 있는 항목 삭제, 위치 생략시 맨 마지막 항목 삭제
+
:*~.insert(pos, val)&nbsp;: pos 번째 위치에 x 추가
:*del ~[pos] : pos 위치에 있는 항목 삭제
+
:*~.remove(val)&nbsp;: val 값을 갖는 항목 삭제
:*~.index(val) : val 값을 갖는 항목의 위치 반환
+
:*~pop([pos])&nbsp;: pos 위치에 있는 항목 삭제, 위치 생략시 맨 마지막 항목 삭제
:*~.count(val) : val 값이 나타나는 횟수 반환
+
:*del ~[pos]&nbsp;: pos 위치에 있는 항목 삭제
:*~.sort() : 정렬
+
:*~.index(val)&nbsp;: val 값을 갖는 항목의 위치 반환
:*~.reverse() : 전체 항목의 순서를 거꾸로 조정
+
:*~.count(val)&nbsp;: val 값이 나타나는 횟수 반환
  for idx, value in enumerate([~]):
+
:*~.sort()&nbsp;: 정렬
    ~
+
:*~.reverse()&nbsp;: 전체 항목의 순서를 거꾸로 조정
 +
 
 +
  zip(~, ~, ~) : 여러개의 배열을 같은 인덱스 순으로 합침
 +
 
 
|-
 
|-
|align="center" valign="middle" style="background-color:#eee;"|Set
+
| align="center" valign="middle" style="background-color:#eee;" | Set
|align="left" valign="middle"|
+
| align="left" valign="middle" |  
 
*Set, 집합, { }
 
*Set, 집합, { }
 +
 
:*len(~)
 
:*len(~)
 
:*add(~), remove(~), discard(~), pop(~), clear()
 
:*add(~), remove(~), discard(~), pop(~), clear()
:*a.union(b) : 합집합
+
:*a.union(b)&nbsp;: 합집합
:*a.intersection(b) : 교집합
+
:*a.intersection(b)&nbsp;: 교집합
 +
 
 
  ~ = {~, ~, ~}
 
  ~ = {~, ~, ~}
 
  ~ = set('문자열')
 
  ~ = set('문자열')
 
   
 
   
 
  for name, value in ~.items():
 
  for name, value in ~.items():
    ~
+
  ~
 
  x in s
 
  x in s
 
  x not in s
 
  x not in s
 +
 
|-
 
|-
|align="center" valign="middle" style="background-color:#eee;"|Dictionary
+
| align="center" valign="middle" style="background-color:#eee;" | Dictionary
|align="left" valign="middle"|
+
| align="left" valign="middle" |  
 +
* 생성자 : dict(), {}
 
*Dictionary
 
*Dictionary
:*~.items(), ~.keys(), ~.values() : Tuple로 반환
+
 
 +
:*~.items(), ~.keys(), ~.values()&nbsp;: Tuple로 반환
 
:*~['~'] = ~
 
:*~['~'] = ~
 
:*del ~['~']
 
:*del ~['~']
 +
 
  ~ = dict(a=1, b=3, c=5)
 
  ~ = dict(a=1, b=3, c=5)
 
  ~ = {'a': 1, 'b':3, 'c': 5}
 
  ~ = {'a': 1, 'b':3, 'c': 5}
 +
 
|-
 
|-
|align="center" valign="middle" style="background-color:#eee;"|Tuple
+
| align="center" valign="middle" style="background-color:#eee;" | Tuple
|align="left" valign="middle"|
+
| align="left" valign="middle" |  
*Tuple : 변수들의 모임, ( ), 읽기 전용
+
* 생성자 : tuple(), (~, ~, ~)
 +
*Tuple&nbsp;: 변수들의 모임, ( ), 읽기 전용
 +
 
 
  ~ = ~, ~, ~
 
  ~ = ~, ~, ~
 
  ~ = (~, ~, ~)
 
  ~ = (~, ~, ~)
  ~[pos] : Tuple에서 pos 위치의 변수, 0, 1, 2, ...
+
  ~[pos]&nbsp;: Tuple에서 pos 위치의 변수, 0, 1, 2, ...
 +
 
 
|-
 
|-
|align="center" valign="middle" style="background-color:#eee;"|특수
+
| align="center" valign="middle" style="background-color:#eee;" | 특수
|align="left" valign="middle"|
+
| align="left" valign="middle" |  
*None : 값이 없음
+
*None&nbsp;: 값이 없음
 +
 
 
  if ~ is None:
 
  if ~ is None:
 +
 
|}
 
|}
  
===함수===
+
=== 조건문/반복문 ===
*함수도 변수처럼 다른 변수에 할당 가능
+
 
 +
*블럭의 시작은&nbsp;:로 표시하고 블럭의 내용은 Identation (들여쓰기)로 구분 합니다.
 +
 
 +
*아무것도 실행하지 않는 코드
 +
 
 +
pass
 +
 
 +
*if 문
 +
 
 +
if ~:
 +
    ~
 +
elif ~:
 +
    ~
 +
else:
 +
    ~
 +
 
 +
*while 문
 +
 
 +
while ~:
 +
    ~
 +
 
 +
*for 문
 +
 
 +
for ~ in ~:
 +
    ~
 +
    break
 +
    continue
 +
else:                    #--- while 또는 for 문이 정상적으로 종료 되었을 경우 실행됨
 +
    ~
 +
 
 +
* 표현식
 +
[표현식 for ~ in ~ if ~]
 +
표현식 for ~ in ~ if ~
 +
 
 +
:*range(3)&nbsp;: 0, 1, 2
 +
:*range(5, 8)&nbsp;: 5, 6, 7, 8
 +
:*range(0, 10, 3)&nbsp;: 0, 3, 6, 9
 +
:*리스트 내장&nbsp;: [~ for ~ in ~ if ~]
 +
:*map 함수&nbsp;: map(맵_함수, ~)
 +
 
 +
def 맵_함수(val):
 +
    return ~                      #--- val을 가공한 값을 반환
 +
 
 +
:*필터 함수&nbsp;: filter(필터_함수, ~)
 +
 
 +
def 필터_함수(val):
 +
    return ~                      #--- True, False
 +
 
 +
*zip(~, ~)&nbsp;: 변수들의 값을 Tuple 형태로 묶어서 이터레이터 형태로 반환
 +
 
 +
==== For for List ====
 +
 
 +
msgs = [1, 2, 3, 4, 5]
 +
for value in msgs:
 +
    print(value)
 +
 
 +
msgs = [1, 2, 3, 4, 5]
 +
for idx in range(len(msgs)):
 +
    print(msgs[idx])
 +
 
 +
msgs = [1, 2, 3, 4, 5]
 +
for idx in range(len(msgs)):
 +
    print(msgs[len(msgs) - idx - 1])
  
*dir(__builtins__) : 내장 함수의 목록
+
msgs = [1, 2, 3, 4, 5]
 +
for idx, val in enumerate(msgs):
 +
    print(idx, val)
  
*함수 설명
+
==== For for Set ====
:*help(함수명) : 함수 설명 보기
+
  msgs = {1, 2, 3, 4, 5}
  함수명.__doc__ = "~"
+
  for value in list(msgs):
   
+
     print(value)
def ~(~):
 
     """
 
    여기에 함수 설명 기술
 
    """
 
  
*함수의 정의
+
==== For for Dictionary ====
:*locals()
+
msgs = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
:*vars()
+
  for key, value in msgs.items():
:*globals() : 생성된 함수의 객체를 표시
+
     print(key, value)
  def ~(~, ~ = ~):
 
     global ~                #--- global 변수를 함수내에서 사용하도록 설정
 
    ~
 
    yield ~                  #--- 함수를 끝내지 않고 값을 전달
 
                              #--- 다시 함수가 호출되면 이후에 실행된 yield에서 전달한 값을 전달
 
    return ~
 
 
def ~(~, ~):
 
    pass                    #--- 아무런 동작도 하지 않는 코드
 
 
   
 
   
  def ~(*args):               #--- Tuple 형으로 값을 전달
+
  for key in msgs.keys():
+
    print(key, msgs[key])
def ~(**args):              #--- Dictionary 형으로 값을 전달, ~(~ = ~, ~ = ~) 방식으로 호출
 
 
~ = lambda ~, ~: ~          #--- 변수에 직접 함수를 정의하여 저장
 
  
*함수 호출
+
=== Class ===
~(~, ~)
 
~(~ = ~, ~ = ~)
 
  
===객체 선언===
 
 
*Class 선언과 사용
 
*Class 선언과 사용
 +
 
  class ~:
 
  class ~:
    """
+
    """
    클래스 설명
+
    클래스 설명
    """
+
    """
 
   
 
   
    __var = 0                        #--- Private 변수
+
    __var = 0                        #--- Private 변수
 
   
 
   
    def __init__(self, value):        #--- 생성자
+
    def __init__(self, value):        #--- 생성자
        pass
+
        pass
 
   
 
   
    def __del__(self):                #--- 소멸자
+
    def __del__(self):                #--- 소멸자
        pass
+
        pass
 
   
 
   
    def funcStatic():                #--- Static Method, ClassName.funcStatic()
+
    @staticmethod
        pass
+
    def funcStatic():                #--- Static Method, ClassName.funcStatic()
 +
        pass
 
   
 
   
    def funcName(self):              #--- Class Method, instance.funcName()
+
    def funcName(self):              #--- Class Method, instance.funcName()
        self.~
+
        self.~
 
   
 
   
 
  ~ = className()
 
  ~ = className()
 
  ~.funcName()                          #--- Instance를 암묵적으로 parameter로 전달됨
 
  ~.funcName()                          #--- Instance를 암묵적으로 parameter로 전달됨
 
  ~.__class__.~                        #--- Class의 변수나 함수를 참조 합니다.
 
  ~.__class__.~                        #--- Class의 변수나 함수를 참조 합니다.
 +
 
:*isinstance(인스턴스, 클래스)
 
:*isinstance(인스턴스, 클래스)
 +
:*issubclass(하위클래스, 상위클래스)
  
 
*연산자 중복 (a를 기준으로)
 
*연산자 중복 (a를 기준으로)
:*__add__(self, ~) : a + b
+
 
:*__sub__(self, ~) : -
+
:*__add__(self, ~)&nbsp;: a + b
:*__mul__(self, ~) : *
+
:*__sub__(self, ~)&nbsp;: -
:*__truediv__(self, ~) : /
+
:*__mul__(self, ~)&nbsp;: *
:*__floordiv__(self, ~) : //
+
:*__truediv__(self, ~)&nbsp;: /
:*__mod__(self, ~) : %
+
:*__floordiv__(self, ~)&nbsp;: //
:*__divmod__(self, ~) : divmod(a, b)
+
:*__mod__(self, ~)&nbsp;:&nbsp;%
:*__pow__(self, ~) : a ** b
+
:*__divmod__(self, ~)&nbsp;: divmod(a, b)
:*__lshift__(self, ~) : <<
+
:*__pow__(self, ~)&nbsp;: a ** b
:*__rshift__(self, ~) : >>
+
:*__lshift__(self, ~)&nbsp;: <<
:*__and__(self, ~) : &
+
:*__rshift__(self, ~)&nbsp;: >>
:*__xor__(self, ~) : ^
+
:*__and__(self, ~)&nbsp;: &
:*__or__(self, ~) : |
+
:*__xor__(self, ~)&nbsp;: ^
:*__abs__(self) : abs(a)
+
:*__or__(self, ~)&nbsp;: |
:*__pos__(self) : +a
+
:*__abs__(self)&nbsp;: abs(a)
:*__neg__(self) : -a
+
:*__pos__(self)&nbsp;: +a
:*__invert__(self) : ~a
+
:*__neg__(self)&nbsp;: -a
 +
:*__invert__(self)&nbsp;: ~a
 
:*__lt__, __le__, __eq__, __ne__, __ge__, __gt__
 
:*__lt__, __le__, __eq__, __ne__, __ge__, __gt__
:*연산자 위치 변경, r 추가 : __radd__(self, ~) : b + a
+
:*연산자 위치 변경, r 추가&nbsp;: __radd__(self, ~)&nbsp;: b + a
:*확장된 연산자 중복, i 추가 : __iadd__(self, other) : a += b
+
:*확장된 연산자 중복, i 추가&nbsp;: __iadd__(self, other)&nbsp;: a += b
:*__len__(self) : len(a)
+
:*__len__(self)&nbsp;: len(a)
:*__contain__(self, item) : item in a
+
:*__contain__(self, item)&nbsp;: item in a
:*__getitem__(self, key) : a[key]
+
:*__getitem__(self, key)&nbsp;: a[key]
:*__setitem__(self, key, value) : a[key] = value
+
:*__setitem__(self, key, value)&nbsp;: a[key] = value
:*__delitem__(self, key) : del a[key]
+
:*__delitem__(self, key)&nbsp;: del a[key]
  
 
*Class 상속.
 
*Class 상속.
 +
 
  class ~(parentClass):
 
  class ~(parentClass):
    super().__init__()                        #--- parent class의 함수 호출
+
    super().__init__()                        #--- parent class의 함수 호출
    super(parentClass, self).__init__()        #--- parent class의 함수 호출
+
    super(parentClass, self).__init__()        #--- parent class의 함수 호출
    parentClass.__init__(self, ~)              #--- child class에서 parent class의 함수 호출
+
    parentClass.__init__(self, ~)              #--- child class에서 parent class의 함수 호출
 
   
 
   
  class ~ (parentA, parentB):                   #--- 다중 상속, parentA가 먼저 적용됨
+
  class ~ (parentA, parentB):                   #--- 다중 상속
 +
    #--- 생성자 호출 순서 : parentB.__init__() > parentA.__init__() > self.__init__()
 +
 
 
:*issubclass(childClass, parentClass)
 
:*issubclass(childClass, parentClass)
:*object : 모든 class의 최상위 parent class
+
:*object&nbsp;: 모든 class의 최상위 parent class
 +
 
 +
=== 함수 ===
 +
 
 +
*함수도 변수처럼 다른 변수에 할당 가능
 +
 
 +
*dir(__builtins__)&nbsp;: 내장 함수의 목록
 +
 
 +
*함수 설명
  
===조건문/반복문===
+
:*help(함수명)&nbsp;: 함수 설명 보기
*블럭의 시작은 :로 표시하고 블럭의 내용은 Identation (들여쓰기)로 구분 합니다.
 
  
*아무것도 실행하지 않는 코드
+
함수명.__doc__ = "~"
pass
+
 +
def ~(~):
 +
    """
 +
    여기에 함수 설명 기술
 +
    """
 +
 
 +
*함수의 정의
 +
 
 +
:*locals()
 +
:*vars()
 +
:*globals()&nbsp;: 생성된 함수의 객체를 표시
  
*if 문
+
  def ~(~, ~ = ~):
  if ~:
+
    global ~                #--- global 변수를 함수내에서 사용하도록 설정
    ~
+
    ~
  elif ~:
+
    yield ~                  #--- 함수를 끝내지 않고 값을 전달
    ~
+
                            #--- 다시 함수가 호출되면 이후에 실행된 yield에서 전달한 값을 전달
  else:
+
    return ~
    ~
+
   
 +
def ~(~, ~):
 +
    pass                    #--- 아무런 동작도 하지 않는 코드
 +
 +
def ~(*args):                #--- Tuple 형으로 값을 전달
 +
 +
  def ~(**args):               #--- Dictionary 형으로 값을 전달, ~(~ = ~, ~ = ~) 방식으로 호출
  
*while 문
+
* Generators: Iterator를 만들때 사용
  while ~:
+
  def ~():
     ~
+
     yield ~                 #--- 함수를 끝내지 않고 값을 전달
 +
 +
def generator_a():
 +
    yield ~
 +
    raise StopIteration()
  
*for 문
+
* Iterator
  for ~ in ~:
+
  class iterrator_a:  
    ~
+
    def __init__(self, n):
    break
+
        self.n = n
    continue
+
       
else:                     #--- while 또는 for 문이 정상적으로 종료 되었을 경우 실행됨
+
    def __iter__(self):
    ~
+
        self.idx = -1
 +
        return self
 +
   
 +
    def __next__(self):
 +
        self.idx += 1
 +
        if self.idx >= self.n:
 +
            raise StopIteration()
 +
       
 +
        return self.idx
 +
:* iter(~) 함수
 +
x = iter(~)
 +
~ = next(~)
 
   
 
   
  for idx, val in enumerate(~):
+
  iter1 = filter(함수, 리스트)
    ~
+
iter2 = map(함수, 리스트)
:*range(3) : 0, 1, 2
+
 
:*range(5, 8) : 5, 6, 7, 8
+
*함수 호출
:*range(0, 10, 3) : 0, 3, 6, 9
+
 
:*리스트 내장 : [~ for ~ in ~ if ~]
+
~(~, ~)
:*map 함수 : map(맵_함수, ~)
+
~(~ = ~, ~ = ~)
  def 맵_함수(val):
+
 
    return ~                       #--- val을 가공한 값을 반환
+
=== Lambda ===
:*필터 함수 : filter(필터_함수, ~)
+
 
def 필터_함수(val):
+
  lambda 인자: 구문
    return ~                      #--- True, False
+
~ = lambda ~, ~: ~          #--- 변수에 직접 함수를 정의하여 저장
 +
 
 +
=== 패키지 ===
 +
*폴더에 __init__.py 파일을 생성할 것
 +
 
 +
=== 모듈 ===
 +
 
 +
모듈의 위치
 +
 
 +
- &nbsp;&nbsp;$PATHON_HOME/lib/<br />&nbsp;&nbsp; &nbsp;$PATHON_HOME/lib/python2.7/site-packages/
 +
 
 +
- &nbsp; $PYTHONPATH
 +
 
 +
- &nbsp; sys.path.append('~')<br />&nbsp; &nbsp; imp.reload(~)
 +
 
  
*zip(~, ~) : 변수들의 값을 Tuple 형태로 묶어서 이터레이터 형태로 반환
 
  
===모듈과 패키지===
 
 
*파일 확장자
 
*파일 확장자
:*~.py : Python 파일
+
 
:*~.pyc : 컴파일된 byte cod
+
:*~.py&nbsp;: Python 파일
 +
:*~.pyc&nbsp;: 컴파일된 byte cod
  
 
*모듈 추가
 
*모듈 추가
 +
 
:*$PATHON_HOME/lLib/ 폴더에서 import할 파일을 찾습니다.
 
:*$PATHON_HOME/lLib/ 폴더에서 import할 파일을 찾습니다.
 
:*PYTHONPATH 환경 변수에 등록된 path에 import할 파일을 찾습니다.
 
:*PYTHONPATH 환경 변수에 등록된 path에 import할 파일을 찾습니다.
 +
 +
import package.file as ~
 +
from package.file import class, function, ...
 +
 
  import ~                              #--- 모듈 파일 삽입, ~.py
 
  import ~                              #--- 모듈 파일 삽입, ~.py
 
  import ~.~.~ as ~                    #--- 모듈을 as 뒤에 나오는 이름으로 import 합니다.  
 
  import ~.~.~ as ~                    #--- 모듈을 as 뒤에 나오는 이름으로 import 합니다.  
489번째 줄: 706번째 줄:
 
   
 
   
 
  moduleName.~
 
  moduleName.~
 +
 
:*sys.path를 사용한 import path 관리
 
:*sys.path를 사용한 import path 관리
 +
 
  import sys
 
  import sys
 
  sys.path.append('~')
 
  sys.path.append('~')
 
  sys.path.remove('~')
 
  sys.path.remove('~')
 +
 
:*코드 수정시 동적으로 import
 
:*코드 수정시 동적으로 import
 +
 
  import imp
 
  import imp
  imp.reload(moduleName)
+
  imp.reload(moduleName)               #--- 수정된 모듈을 다시 로드 한다.
  
 
*Python 파일을 직접 실행
 
*Python 파일을 직접 실행
 +
 
  python ~.py
 
  python ~.py
 
   
 
   
 
  if __name__ == '__main__':
 
  if __name__ == '__main__':
    pass                            #--- 직접 실행시 __name__에 __main__이 저장됨
+
  pass                            #--- 직접 실행시 __name__에 __main__이 저장됨
 
  else:
 
  else:
    pass                            #--- import시 __name__에 모듈 이름이 저장됨
+
  pass                            #--- import시 __name__에 모듈 이름이 저장됨
  
 
*패키지
 
*패키지
 +
 
:*폴더의 계층 구조로 package 생성, ~.~.~
 
:*폴더의 계층 구조로 package 생성, ~.~.~
 
:*각 폴더마다 패키지를 초기화하는 __init__.py 파일이 존재함
 
:*각 폴더마다 패키지를 초기화하는 __init__.py 파일이 존재함
 +
 
  import ~.~ as ~
 
  import ~.~ as ~
  
===오류 처리===
+
참고 문헌
 +
 
 +
*http://www.devtimes.com/139
 +
 
 +
=== with문 ===
 +
<pre> with atomic.ActionTimer(self, key):
 +
    return self.clients("ceilometer").meters.list(q=query, limit=limit)
 +
</pre>
 +
 
 +
 
 +
with문 시작시 ActionTimer class의&nbsp;__enter__(self) 함수를 호출하고 with문 종료시&nbsp;__exit__(type, value, traceback) 함수를 호출함
 +
 
 +
 
 +
 
 +
=== 오류 처리 ===
 +
 
 
*BaseEception
 
*BaseEception
:*Exception
+
:*Exception : __str__ 함수를 구현할 것
  
 
*사용자 정의 예외
 
*사용자 정의 예외
 
  class ~(Exception):
 
  class ~(Exception):
    def __init__(self, value):
+
  def __init__(self, value):
        self.value = value
+
      self.value = value
  
 
*try catch 문
 
*try catch 문
 
  try:
 
  try:
    ~
+
  ~
 
  except ~ as ~:
 
  except ~ as ~:
    ~
+
  ~
 
  except (~, ~, ~):
 
  except (~, ~, ~):
    ~
+
  ~
 +
except Exception as e:
 +
  print(e.args[0])
 +
except:
 +
  ~
 
  else:
 
  else:
    ~
+
  ~
 
  finally:
 
  finally:
    ~
+
  ~
  
 
*예외 발생
 
*예외 발생
 +
 
  raise                                #--- 예외를 상위로 전달
 
  raise                                #--- 예외를 상위로 전달
 
  raise Exception
 
  raise Exception
537번째 줄: 781번째 줄:
 
   
 
   
 
  assert 조건식, 관련_데이터            #--- AssertionError 발생, __debug__ 값이 true인 경우에만 실행됨
 
  assert 조건식, 관련_데이터            #--- AssertionError 발생, __debug__ 값이 true인 경우에만 실행됨
 +
eval(~)                              #--- 문자열을 실행
 +
 +
=== 기타 문법 ===
 +
 +
*import fibo&nbsp;: fibo.py 포함
  
===기타 문법===
 
*import fibo : fibo.py 포함
 
 
:*from fibo import ~
 
:*from fibo import ~
 
:*sys.path, PYTHONPATH
 
:*sys.path, PYTHONPATH
  
==Python 입출력==
+
== Python 입출력 ==
===전역 변수===
+
 
===표준 입출력===
+
=== 전역 변수 ===
*표준 입력 : sys.stdin
+
 
 +
=== 표준 입출력 ===
 +
 
 +
*표준 입력&nbsp;: sys.stdin
 +
 
 
  ~ = input(~)
 
  ~ = input(~)
  
*표준 출력 : sys.stdout
+
*표준 출력&nbsp;: sys.stdout
 +
 
 
  #--- sep. 구분자, end. 끝라인, file. 출력 파일
 
  #--- sep. 구분자, end. 끝라인, file. 출력 파일
 
  print(~)
 
  print(~)
555번째 줄: 807번째 줄:
 
  sys.stdout.write('~')
 
  sys.stdout.write('~')
  
*표준 오류 : sys.stderr
+
*표준 오류&nbsp;: sys.stderr
 +
 
 +
=== CLI Argument ===
 +
<pre>graph_file = sys.argv[1]
 +
task_fr = sys.argv[2]
 +
task_to = sys.argv[3]
 +
step = int(sys.argv[4])</pre>
 +
 
 +
 
 +
=== 브라우저 입출력 ===
 +
 
 +
=== Cookie 입출력 ===
 +
 
 +
=== 세션 입출력 ===
 +
 
 +
=== 데이터베이스 입출력 ===
 +
 
 +
=== 파일 입출력 ===
  
===브라우저 입출력===
 
===Cookie 입출력===
 
===세션 입출력===
 
===데이터베이스 입출력===
 
===파일 입출력===
 
 
*파일 입력
 
*파일 입력
 +
 
  finp = open('~.txt')
 
  finp = open('~.txt')
 
  for line in finp.readlines():
 
  for line in finp.readlines():
    print line
+
    print line
 
  finp.close()
 
  finp.close()
 
   
 
   
575번째 줄: 840번째 줄:
  
 
*파일 출력
 
*파일 출력
:*mode : r, w, a, +, b, t
+
 
 +
:*mode&nbsp;: r, w, a, +, b, t
 +
 
 
  fout = open('~.txt', 'w')
 
  fout = open('~.txt', 'w')
 
  fout.write('~')
 
  fout.write('~')
581번째 줄: 848번째 줄:
 
  fout.close()
 
  fout.close()
  
===메일 입출력===
+
=== 메일 입출력 ===
 +
 
 +
== numpy ==
 +
 
 +
import numpy as np
 +
 
 +
== pandas Series ==
 +
 
 +
import pandas as pd
 +
from pandas import Series, DataFrame
 +
 +
data = [100, 200, 300, 400, 500]
 +
index = ['20180701', '20180702', '20180703', '20180704', '20180705']
 +
 +
series = Series(data, index)
 +
print(series)
 +
 +
for idx in series.index:                              #--- series.values
 +
    print(idx, series[idx])
 +
 
 +
== pandas DataFrame ==
 +
 
 +
=== DataFrame 생성 ===
 +
 
 +
import pandas as pd
 +
from pandas import Series, DataFrame
 +
 +
df = DataFrame(None)                                  #--- 비어 있는 DataFrame 생성
 +
 +
#--- 데이터로 DataFrame 생성
 +
col_1 = [ 100,  200,  300,  400,  500]
 +
col_2 = [ 600,  700,  800,  900, 1000]
 +
col_3 = [1100, 1200, 1300, 1400, 1500]
 +
col_4 = [1600, 1700, 1800, 1900, 2000]
 +
col_5 = [2100, 2200, 2300, 2400, 2500]
 +
cols = ['open', 'high', 'low', 'close', 'other']
 +
index = ['20180701', '20180702', '20180703', '20180704', '20180705']
 +
 +
data = {
 +
    cols[0]: col_1,
 +
    cols[1]: col_2,
 +
    cols[2]: col_3,
 +
    cols[3]: col_4,
 +
    cols[4]: col_5
 +
}
 +
df = DataFrame(data, columns=cols, index=index)
 +
 +
#--- 데이터베이스에서 DataFrame 가져오기
 +
df = pd.read_sql(query, self.MainWindow.con, index_col=None)      #--- Table에서 읽기
 +
df.index = range(df.shape[0])                                    #--- 행 번호 재지정
 +
columns = ['stock', 'close', 'volume', 'amount', 'date', 'open', 'high', 'low']
 +
df.columns = columns                                              #--- 열 이름 재지정
 +
 
 +
=== DataFrame 기본 정보 ===
 +
 
 +
df.shape                                              #--- shape[0]. 행수, shape[1]. 열수
 +
df.index                                              #--- 행 인덱스
 +
df.columns                                            #--- 열 이름
 +
np.nan                                                #--- 비어 있는 값을 지정할 때 사용
 +
df[['f현재가', 'f저가']] = df[['f현재가', 'f저가']].astype(float) #--- 열의 유형 변경
 +
dataset.index = range(dataset.shape[0])                #--- 번호 인덱스 재지정
 +
 
 +
#--- 행 지정
 +
df.loc['20180701']                                    #--- Series
 +
df.loc[ ['20180701']]                                  #--- DataFrame
 +
 +
df.iloc[0]                                            #--- Series
 +
df.iloc[0:2]                                          #--- DataFrame
 +
 +
df.ix['20180701']                                      #--- Series (Deprecated)
 +
df.ix[2]                                              #--- Series (Deprecated)
 +
df.ix[0:2]                                            #--- DataFrame (Deprecated)
 +
 
 +
#--- 열 지정
 +
df.loc[:, 'open']                                      #--- Series
 +
df.loc[:, ['open', 'close']]                          #--- DataFrame
 +
df.iloc[:, 0]                                          #--- Series
 +
df.iloc[:, 0:2]                                        #--- DataFrame
 +
 +
df['open']                                            #--- Series
 +
df[ ['open', 'high']]                                  #--- DataFrame
 +
 +
#--- 행 우선 항목 지정
 +
df.loc[ ['20180701'], ['open']]                        #--- DataFrame
 +
df.loc[ ['20180701']][ ['open']]                      #--- DataFrame
 +
df.loc[ ['20180701']]['open']                          #--- Series
 +
df.loc['20180701'][ ['open']]                          #--- Series
 +
 +
df.ix['20180701']['open']                              #--- 값
 +
df.ix[:, 'open']                                      #--- Series
 +
 +
#--- 열 우선 항목 지정
 +
df['open']['20180701']                                #--- 값
 +
 +
#--- 부분 DataFrame 생성
 +
dataset = dataset[(dataset['f일자'] >= '20100101') & (dataset['f일자'] <= '20181231')]
 +
 +
val_mask = np.random.choice(전체_크기, 추출할_크기)
 +
x_val  = x_train.loc[val_mask]
 +
x_train = x_train.drop(val_mask)
 +
 
 +
=== DataFrame 연산 ===
 +
 
 +
#--- DataFrame 합치기
 +
dataset = pd.concat([dataset, datasetTA[idx]])        #--- 행이 추가됨
 +
 +
#--- 행 추가/수정/삭제
 +
df.ix[행] = [~, ~, ~, ~]                             
 +
df4 = df1.append({'c1':2, 'c2':2, 'c3': 3})
 +
 +
df = df.drop('행')                                    #--- 행 삭제
 +
df = df.dropna()                                      #--- 비어 있는 값을 포함한 행을 삭제
 +
 
 +
#--- 열 추가/수정/삭제
 +
dataset.loc[:, 'price'] = Series({'행1': '값1', '행2': '값2'})    #--- 열 추가
 +
 +
dataset[column_name_new] = np.nan                                #--- np.nan으로 초기화한 열 생성
 +
dataset[column_name_new] = np.zeros(len(dataset))                #--- 0으로 초기화한 열 생성
 +
dataset[column_name_new][idx:] = dataset[column_name][:-1 * idx]
 +
 +
df = df.drop('열', axis=1)                            #--- 열 삭제
 +
 +
#--- 행 계산
 +
dataset['profit'] = dataset['price_sale'] - dataset['price_purchase']
 +
dataset['close_ma{}'.format(5)] = dataset['close'].rolling(5).mean()    #--- 이동 평균 계산
 +
dataset[column_name_new][idx:] = dataset[column_name][:-1 * idx]
 +
dataset.loc[1:, column_name_new] = (dataset['open'][1:].values - dataset['close'][:-1].values) / dataset['close'][:-1].values
 +
dataset[column_name_new] = (dataset['high'].values - dataset['close'].values) / dataset['close'].values
 +
 
 +
== Python과 Java 연동 ==
  
==Python과 Java 연동==
 
 
*JPype 설치
 
*JPype 설치
 +
 
  #!/usr/bin/env python
 
  #!/usr/bin/env python
 
  import jpype
 
  import jpype
590번째 줄: 986번째 줄:
 
   
 
   
 
  classpath = os.path.join(os.path.abspath('~'), 'bin')
 
  classpath = os.path.join(os.path.abspath('~'), 'bin')
  jpype.startJVM(jpype.getDefaultJVMPath(), '-Djava.class.path=%s' % (classpath)
+
  jpype.startJVM(jpype.getDefaultJVMPath(), '-Djava.class.path=%s'&nbsp;% (classpath)
 
   
 
   
 
  javaPackage = jpype.JPackage('~').~              #--- ~.~ package
 
  javaPackage = jpype.JPackage('~').~              #--- ~.~ package
599번째 줄: 995번째 줄:
  
 
*참고 문헌
 
*참고 문헌
 +
 
:*http://jpype.sourceforge.net/doc/user-guide/userguide.html
 
:*http://jpype.sourceforge.net/doc/user-guide/userguide.html
  
==PSP 언어==
+
== PSP 언어 ==
 +
 
 +
== Testcase ==
 +
 
 +
참고 문헌
 +
 
 +
*http://www.slideshare.net/hosunglee948/python-52222334
 +
*http://www.slideshare.net/bench8704/python-unittest
 +
 
 +
== 사용자 가이드 ==
 +
 
 +
=== 외부 프로그램 실행 ===
  
==사용자 가이드==
 
===외부 프로그램 실행===
 
 
  # -*- coding: utf-8 -*-
 
  # -*- coding: utf-8 -*-
 
  import os, re, sys, urllib
 
  import os, re, sys, urllib
610번째 줄: 1,016번째 줄:
 
   
 
   
 
  if __name__ == '__main__':
 
  if __name__ == '__main__':
    results = []
+
    results = []
 
  #  p = subprocess.Popen('/bin/cat /nas/output/service001.out',stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
 
  #  p = subprocess.Popen('/bin/cat /nas/output/service001.out',stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    p = subprocess.Popen('/bin/cat /nas/output/service001.out',stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
+
    p = subprocess.Popen('/bin/cat /nas/output/service001.out',stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
    strInp = ""
+
    strInp = ""
    strOut = p.communicate(input + "\n")[0]
+
    strOut = p.communicate(input + "\n")[0]
    lines = strOut.split("\n")
+
    lines = strOut.split("\n")
    for line in lines:
+
    for line in lines:
        vals = line.split("\t")
+
        vals = line.split("\t")
 
  #      results.append({'line':line})
 
  #      results.append({'line':line})
        results.append({'acnt_no':vals[0], "cnt":vals[1]})
+
        results.append({'acnt_no':vals[0], "cnt":vals[1]})
 +
 
 +
== 관리자 가이드 ==
 +
 
 +
== Database 연동 ==
  
==관리자 가이드==
 
==Database 연동==
 
 
*https://pypi.python.org/pypi/JayDeBeApi/
 
*https://pypi.python.org/pypi/JayDeBeApi/
  
==참고 문헌==
+
== 참고 문헌 ==
*[[ActivePython]]
+
 
*[[Django]]
+
*[https://www.jopenbusiness.com/cms/Python/README.md 오비컨 - Python]
*[[Mako]]
+
*[https://www.jopenbusiness.com/cms/Python/BeautifulSoup.md 오비컨 - BeautifulSoup]
 +
*[[ActivePython|ActivePython]]
 +
*[[Django|Django]]
 +
*[[Mako|Mako]]
  
 
*[http://soooprmx.com/wp/archives/485 파이썬 몇 가지, 2008.11]
 
*[http://soooprmx.com/wp/archives/485 파이썬 몇 가지, 2008.11]
634번째 줄: 1,045번째 줄:
 
*[http://mulder3062.springnote.com/pages/2405090 PSP (Python Server Page)]
 
*[http://mulder3062.springnote.com/pages/2405090 PSP (Python Server Page)]
 
*http://docs.python.org/2/library/stdtypes.html
 
*http://docs.python.org/2/library/stdtypes.html
 
+
*http://byteofpython-korean.sourceforge.net/byte_of_python.html  [[Category:오픈소스|Category:오픈소스]] <br />  [[Category:프로그램 언어|Category:프로그램 언어]]
[[Category:오픈소스]]
 
[[Category:프로그램 언어]]
 

2019년 11월 5일 (화) 16:36 기준 최신판

오브젝트 지향 프로그래밍, 구조화 프로그래밍, 관점 중심 프로그래밍 및 함수 프로그래밍을 지원하는 프로그램 언어인 Python을 정리 한다.


설치 가이드

Python 배포판

Python 설치

Python 최신 버전은 3.0.1이나 Apache HTTP Server 2.2와 연동을 위해 Python 2.5 버전을 설치 한다.


  • 다운로드 받은 파일을 실행한 후 "Install for all users"를 선택 한다.

설치 시작

  • Python 설치 디렉토리를 설정 한다.

폴더 설정

  • 설치할 모듈을 선택 하는 화면으로 그냥 "Next" 버튼을 선택 하여 설치를 완료 한다.

모듈 선택

  • Python 설치 후 사용하기 위해서 필요한 환경을 설정한다.
  • PYTHON_HOME=c:/app/Python
  • PATH=c:/app/Python (기존 PATH에 추가)

환경 설정

  1. 바탕화면의 "내 컴퓨터"에서 오른 마우스를 클릭한 후 "속성"을 선택한다.
  2. "고급" 탭에서 하단에 있는 "환경 변수" 버튼을 누른다.
  3. 위에 명시한 환경 변수를 추가 또는 수정한다.


  • 환경 설정이 정상적으로 되었는지 확인하기 위해 도스창에서 다음 명령을 사용하여 Python의 버전을 확인한다.
python -V

Setuptools 설치

파이선용 패키지 설치 자동화 툴인 setuptools를 설치 한다.

  • 다운로드 사이트에서 MS Windows Installer인 "setuptools-0.6c9.win32-py2.5.exe" 파일을 다운로드 한다.


  • 다운로드 받은 프로그램을 관리자 권한으로 실행한 후 "다음(N)" 버튼을 선택 한다.

설치 시작

  • Python이 설치된 디렉토리와 설치할 디렉토리를 확인 한다.

설치 폴더

  • "다음(N)" 버튼을 선택하여 설치를 완료 한다.

설치 완료

  • setuptools는 아래 디렉토리에 설치가 된다.
$PYTHON_HOME/Lib/site-packages/setuptools
$PYTHON_HOME/Scripts/    #--- 실행 프로그램은 여기에 설치가 된다.


  • Python용 setuptools 설치 후 사용하기 위해서 필요한 환경을 설정한다.
  • PYTHONPATH=c:/app/Python/Lib;c:/app/Python/DLLs;c:/app/Python/Lib/lib-tk;c:/app/Python/Lib/site-packages
  • PATH=c:/app/Python/Scripts (기존 PATH에 추가)

환경 설정

  1. 바탕화면의 "내 컴퓨터"에서 오른 마우스를 클릭한 후 "속성"을 선택한다.
  2. "고급" 탭에서 하단에 있는 "환경 변수" 버튼을 누른다.
  3. 위에 명시한 환경 변수를 추가 또는 수정한다.


  • Setuptools을 사용한 python용 추가 모듈 설치 방법
  • 추가 모듈은 도스창에서 다음 명령으로 쉽게 설치할 수 있다.
  • 설치된 python 버전에 맞는 추가 모듈이 자동으로 설치 된다.
easy_install 모듈명


Python 추가 모듈 설치

Apache Python Module 설치

  • Apache Python Module 설치


  • 다운로드 받은 파일을 관리자 권한으로 실행하여 "다음(N)" 버튼만 눌러 주면 설치가 된다.
  • 설치된 Apache HTTP Server의 홈 디렉토리를 물어보면 해당 디렉토리를 선택하면 된다.
$PYTHON_HOME/Lib/site-packages/mod_python   #--- 폴더가 생성 된다.
$APACHE_HOME/modules/mod_python.so                #--- 파일이 생성 된다.


  • Python sys.path에는 다음과 같은 값이 설정 된다.
C:/WINDOWS/system32/python25.zip
C:/app/Python/Lib
C:/app/Python/DLLs
C:/app/Python/Lib/lib-tk
C:/app/Apache
C:/app/Apache/bin
C:/app/Python
C:/app/Python/lib/site-packages


  • $APACHE_HOME/conf/httpd.conf에서 Python 사용을 위한 환경 설정
  • mode_python은 기본적으로 세가지 handler를 제공 한다.
  • testhandler : 테스트용으로 Python으로 전달된 값을 웹페이지에 표시 한다.
  • publisher : CGI 방식으로 Python을 실행 한다. (~.py)
  • psp : PSP (Python Server Page) 방식으로 Python을 실행 한다. (~.psp)
LoadModule cgi_module modules/mod_python.so #--- 추가

<Directory "C:/www">                         
   #--- 폴더별로 아래 설정을 다르게 가질 수 있다.
   Options Indexes FollowSymLinks ExecCGI  #--- CGI를 위해 ExecCGI 추가 

  ###--- Test Hanldler를 사용하여 Python 정보와 요청 정보 등을 확인
  ###--- http://localhost/pythoninfo.py
#    PythonHandler mod_python.testhandler
#    PythonDebug On

  ###--- CGI 방식으로 Python 파일(~.py) 실행
  ###--- http://localhost/pythoninfo.py/handler
#    PythonHandler mod_python.publisher
#    PythonDebug On

  ###--- PSP (Python Server Page) 방식으로 Python 파일(~.psp) 실행
  ###--- http://localhost/pythoninfo.psp
  PythonHandler mod_python.psp
  PythonDebug On
</Directory>

<IfModule dir_module>                       #--- index.cgi index.psp index.py 추가
   DirectoryIndex index.html index.cgi index.psp index.py
</IfModule> 

<IfModule mime_module>
   AddHandler mod_python .py .psp          #--- 추가
</IfModule>


  • Python에서 한글 설정

  • CGI 방식으로 python 동작 확인 방법
  • httpd.conf에서 mod_python.publisher를 사용하도록 설정하고 Apache를 재기동 한다.
  • c:/www/pythoninfo.py (UTF-8 형태로 저장)를 아래와 같이 생성한다.
  • http://localhost/pythoninfo.py 를 호출 한다.
# -*- coding: utf-8 -*-
from mod_python import apache

def handler(req):
   req.content_type = 'text/html'
   
   req.write("\n")
      req.write("\n")
      req.write("    \n")
      req.write("    Python 정보\n")
      req.write("\n")
      req.write("\n")
      req.write("\n")
      req.write("Python Info (파이썬 정보)!\n")
      req.write("\n")
      req.write("\n")



  • PSP (Python Server Page) 방식으로 python 동작 확인
  • httpd.conf에서 mod_python.psp를 사용하도록 설정하고 Apache를 재기동 한다.
  • c:/www/pythoninfo.psp (UTF-8 형태로 저장)를 아래와 같이 생성한다.
  • http://localhost/pythoninfo.psp 를 호출 한다.
   
      
      Python 정보
   
   
   
   Python Info (파이썬 정보)!


MySQL for Python 설치

  • MySQL과 연동할 필요가 있을 경우에만 설치 한다.




  • 다운로드 받은 파일을 실행하여 "다음(N)" 버튼만 눌러 주면 아래 폴더에 설치가 된다.
$PYTHON_HOME/Lib/site-packages/MySQLdb

Python 설치

CentOS에서 Python 설치

yum install python python-*
python -V

Windows에서 Python 설치

Python 문법

Python 기초

  • 파일의 문자셋 설정
# -*- coding: utf-8 -*-
  • 코드 블록
  •  :와 들여쓰기로 표시
~:
   ~
  • 주석
#!/user/bin/python
# _*_ coding: cp949 _*_
# ~
  • 한 라인에서 여러 문장을 실행
~; ~; ~
  • _ : 인터프리터 모드에서 최종 실행된 결과가 저장되는 변수명

자료형

  • str(type(~)) : 자료형의 이름을 표시
  • Python에서 변수는 Call by Reference 값을 가짐, 즉 값을 저장하는 것이 아니라 값이 저장된 곳의 주소를 가짐
import copy
b = a[:]    : a의 값이 복제되어 다른 주소에 저장된 후 b에 할당됨
b = copy.deepcopy(a)

b = a
b = copy.copy(a)
숫자
  • int, float, complex (복소수)
  • int 상수 : 0b~. 2진수, 0o~. 8진수, 0x~. 16진수
  • int를 진수로 표시된 숫자로 변환 : bin(78), oct(78), hex(78)
  • x = 3 - 5i
  • x.real : 실수부
  • x.imag : 허수부
  • x.conjugate()
format(숫자, ",.2f")
format(숫자, "6,.2f")
문자
  • string : "~", '~'
  • str[0] : 0. str 문자열의 첫번째 문자, 단 수정시에는 사용할 수 없음
  • str[-1] : -1. str 문자열에서 마지막 문자
  • str[1:4] : str 문자열에서 인덱스가 1에서 4까지의 문자
  • len(str) : 문자열의 길이
  • ~.encode('utf-8')
  • ord('s') : 문자의 유니코드 값, chr(115) : 유니코드에 해당하는 문자
"""
Hear Text
"""
  • str1 + str2 : 문자열 합치기
  • str.split['x'] : 문자열을 쪼개어 List에 저장 한다.
  • str(~) : 숫자를 string 형으로 변환
  • ~.rjust(3) : 주어진 인수의 길이로 오른쪽 정렬 합니다.
  • ~.zfill(3) : 주어진 인수의 길이로 왼쪽에 0을 채워 표시 합니다.
  • format
  • {~:~n} : n. 크기, >. 오른쪽 정렬, < 왼쪽 정렬, ^. 가운데 정렬
  • = 부호 표시, +. Plus 부호, -. 마이너스 분호,
  • b. 이진수, d. 십진수, o. 8진수, x. 16진수, c. 문자열
  • e. 지수, f. 실수, %. 퍼센트 ({~:.3f} : 소숫점 세자리까지 표시)
"{0}~{1}".format(~, ~)
"{aaa}~{bbb}".format(aaa=~, bbb=~)

dic = {"item": "apple", "color": "red"}
"{0[item]}" ~ {0[color]}".format(dic)
"{item}" ~ {color]}".format(**dic)

"{~.~}.format(**vars())
"{0:$>5}".format(~) : 전체 길이 5, 빈공간을 채우는 문자는 $
논리
  • bool : True, False
Array
  • Array, 배열
from array import array
tmpArray = array('i')   #--- https://docs.python.org/3/library/array.html
  • ~[n] : 0, 1, 2, ...
  • -1. 맨 마지막 항목
  • 0:2 : 0, 1, 2 항목 배열
List
  • 생성자 : list(), []
  • List : [~, ~, ~], 0. 첫번째 항목
  • len(~) : List의 크기
  • ~.append(val) : 항목 추가
  • ~.extend(valList) : List 추가
  • ~.insert(pos, val) : pos 번째 위치에 x 추가
  • ~.remove(val) : val 값을 갖는 항목 삭제
  • ~pop([pos]) : pos 위치에 있는 항목 삭제, 위치 생략시 맨 마지막 항목 삭제
  • del ~[pos] : pos 위치에 있는 항목 삭제
  • ~.index(val) : val 값을 갖는 항목의 위치 반환
  • ~.count(val) : val 값이 나타나는 횟수 반환
  • ~.sort() : 정렬
  • ~.reverse() : 전체 항목의 순서를 거꾸로 조정
zip(~, ~, ~) : 여러개의 배열을 같은 인덱스 순으로 합침
Set
  • Set, 집합, { }
  • len(~)
  • add(~), remove(~), discard(~), pop(~), clear()
  • a.union(b) : 합집합
  • a.intersection(b) : 교집합
~ = {~, ~, ~}
~ = set('문자열')

for name, value in ~.items():
 ~
x in s
x not in s
Dictionary
  • 생성자 : dict(), {}
  • Dictionary
  • ~.items(), ~.keys(), ~.values() : Tuple로 반환
  • ~['~'] = ~
  • del ~['~']
~ = dict(a=1, b=3, c=5)
~ = {'a': 1, 'b':3, 'c': 5}
Tuple
  • 생성자 : tuple(), (~, ~, ~)
  • Tuple : 변수들의 모임, ( ), 읽기 전용
~ = ~, ~, ~
~ = (~, ~, ~)
~[pos] : Tuple에서 pos 위치의 변수, 0, 1, 2, ...
특수
  • None : 값이 없음
if ~ is None:

조건문/반복문

  • 블럭의 시작은 :로 표시하고 블럭의 내용은 Identation (들여쓰기)로 구분 합니다.
  • 아무것도 실행하지 않는 코드
pass
  • if 문
if ~:
   ~
elif ~:
   ~
else:
   ~
  • while 문
while ~:
   ~
  • for 문
for ~ in ~:
   ~
   break
   continue
else:                     #--- while 또는 for 문이 정상적으로 종료 되었을 경우 실행됨
   ~
  • 표현식
[표현식 for ~ in ~ if ~]
표현식 for ~ in ~ if ~
  • range(3) : 0, 1, 2
  • range(5, 8) : 5, 6, 7, 8
  • range(0, 10, 3) : 0, 3, 6, 9
  • 리스트 내장 : [~ for ~ in ~ if ~]
  • map 함수 : map(맵_함수, ~)
def 맵_함수(val):
   return ~                       #--- val을 가공한 값을 반환
  • 필터 함수 : filter(필터_함수, ~)
def 필터_함수(val):
   return ~                       #--- True, False
  • zip(~, ~) : 변수들의 값을 Tuple 형태로 묶어서 이터레이터 형태로 반환

For for List

msgs = [1, 2, 3, 4, 5]
for value in msgs:
    print(value)
msgs = [1, 2, 3, 4, 5]
for idx in range(len(msgs)):
    print(msgs[idx])
msgs = [1, 2, 3, 4, 5]
for idx in range(len(msgs)):
    print(msgs[len(msgs) - idx - 1])
msgs = [1, 2, 3, 4, 5]
for idx, val in enumerate(msgs):
    print(idx, val)

For for Set

msgs = {1, 2, 3, 4, 5}
for value in list(msgs):
    print(value)

For for Dictionary

msgs = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
for key, value in msgs.items():
    print(key, value)

for key in msgs.keys():
    print(key, msgs[key])

Class

  • Class 선언과 사용
class ~:
   """
   클래스 설명
   """

   __var = 0                         #--- Private 변수

   def __init__(self, value):        #--- 생성자
       pass

   def __del__(self):                #--- 소멸자
       pass

   @staticmethod
   def funcStatic():                 #--- Static Method, ClassName.funcStatic()
       pass

   def funcName(self):               #--- Class Method, instance.funcName()
       self.~

~ = className()
~.funcName()                          #--- Instance를 암묵적으로 parameter로 전달됨
~.__class__.~                         #--- Class의 변수나 함수를 참조 합니다.
  • isinstance(인스턴스, 클래스)
  • issubclass(하위클래스, 상위클래스)
  • 연산자 중복 (a를 기준으로)
  • __add__(self, ~) : a + b
  • __sub__(self, ~) : -
  • __mul__(self, ~) : *
  • __truediv__(self, ~) : /
  • __floordiv__(self, ~) : //
  • __mod__(self, ~) : %
  • __divmod__(self, ~) : divmod(a, b)
  • __pow__(self, ~) : a ** b
  • __lshift__(self, ~) : <<
  • __rshift__(self, ~) : >>
  • __and__(self, ~) : &
  • __xor__(self, ~) : ^
  • __or__(self, ~) : |
  • __abs__(self) : abs(a)
  • __pos__(self) : +a
  • __neg__(self) : -a
  • __invert__(self) : ~a
  • __lt__, __le__, __eq__, __ne__, __ge__, __gt__
  • 연산자 위치 변경, r 추가 : __radd__(self, ~) : b + a
  • 확장된 연산자 중복, i 추가 : __iadd__(self, other) : a += b
  • __len__(self) : len(a)
  • __contain__(self, item) : item in a
  • __getitem__(self, key) : a[key]
  • __setitem__(self, key, value) : a[key] = value
  • __delitem__(self, key) : del a[key]
  • Class 상속.
class ~(parentClass):
   super().__init__()                         #--- parent class의 함수 호출
   super(parentClass, self).__init__()        #--- parent class의 함수 호출
   parentClass.__init__(self, ~)              #--- child class에서 parent class의 함수 호출

class ~ (parentA, parentB):                   #--- 다중 상속
    #--- 생성자 호출 순서 : parentB.__init__() > parentA.__init__() > self.__init__()
  • issubclass(childClass, parentClass)
  • object : 모든 class의 최상위 parent class

함수

  • 함수도 변수처럼 다른 변수에 할당 가능
  • dir(__builtins__) : 내장 함수의 목록
  • 함수 설명
  • help(함수명) : 함수 설명 보기
함수명.__doc__ = "~"

def ~(~):
   """
   여기에 함수 설명 기술
   """
  • 함수의 정의
  • locals()
  • vars()
  • globals() : 생성된 함수의 객체를 표시
def ~(~, ~ = ~):
   global ~                 #--- global 변수를 함수내에서 사용하도록 설정
   ~
   yield ~                  #--- 함수를 끝내지 않고 값을 전달
                            #--- 다시 함수가 호출되면 이후에 실행된 yield에서 전달한 값을 전달
   return ~

def ~(~, ~):
   pass                     #--- 아무런 동작도 하지 않는 코드

def ~(*args):                #--- Tuple 형으로 값을 전달

def ~(**args):               #--- Dictionary 형으로 값을 전달, ~(~ = ~, ~ = ~) 방식으로 호출
  • Generators: Iterator를 만들때 사용
def ~():
    yield ~                  #--- 함수를 끝내지 않고 값을 전달

def generator_a():
   yield ~
   raise StopIteration()
  • Iterator
class iterrator_a: 
   def __init__(self, n):
       self.n = n
       
   def __iter__(self):
       self.idx = -1
       return self
   
   def __next__(self):
       self.idx += 1
       if self.idx >= self.n:
           raise StopIteration()
       
       return self.idx
  • iter(~) 함수
x = iter(~)
~ = next(~)

iter1 = filter(함수, 리스트)
iter2 = map(함수, 리스트)
  • 함수 호출
~(~, ~)
~(~ = ~, ~ = ~)

Lambda

lambda 인자: 구문
~ = lambda ~, ~: ~           #--- 변수에 직접 함수를 정의하여 저장

패키지

  • 폴더에 __init__.py 파일을 생성할 것

모듈

모듈의 위치

-   $PATHON_HOME/lib/
    $PATHON_HOME/lib/python2.7/site-packages/

-   $PYTHONPATH

-   sys.path.append('~')
    imp.reload(~)


  • 파일 확장자
  • ~.py : Python 파일
  • ~.pyc : 컴파일된 byte cod
  • 모듈 추가
  • $PATHON_HOME/lLib/ 폴더에서 import할 파일을 찾습니다.
  • PYTHONPATH 환경 변수에 등록된 path에 import할 파일을 찾습니다.
import package.file as ~
from package.file import class, function, ...

import ~                              #--- 모듈 파일 삽입, ~.py
import ~.~.~ as ~                     #--- 모듈을 as 뒤에 나오는 이름으로 import 합니다. 
~.funcName()

from ~ import funcName                #--- 모듈 파일에서 method 삽입
from ~ import *                       #--- __로 시작하는 변수, 함수를 제외하고 import
funcName()

moduleName.~
  • sys.path를 사용한 import path 관리
import sys
sys.path.append('~')
sys.path.remove('~')
  • 코드 수정시 동적으로 import
import imp
imp.reload(moduleName)                #--- 수정된 모듈을 다시 로드 한다.
  • Python 파일을 직접 실행
python ~.py

if __name__ == '__main__':
 pass                             #--- 직접 실행시 __name__에 __main__이 저장됨
else:
 pass                             #--- import시 __name__에 모듈 이름이 저장됨
  • 패키지
  • 폴더의 계층 구조로 package 생성, ~.~.~
  • 각 폴더마다 패키지를 초기화하는 __init__.py 파일이 존재함
import ~.~ as ~

참고 문헌

with문

 with atomic.ActionTimer(self, key):
    return self.clients("ceilometer").meters.list(q=query, limit=limit)


with문 시작시 ActionTimer class의 __enter__(self) 함수를 호출하고 with문 종료시 __exit__(type, value, traceback) 함수를 호출함


오류 처리

  • BaseEception
  • Exception : __str__ 함수를 구현할 것
  • 사용자 정의 예외
class ~(Exception):
  def __init__(self, value):
      self.value = value
  • try catch 문
try:
  ~
except ~ as ~:
  ~
except (~, ~, ~):
  ~
except Exception as e:
  print(e.args[0])
except:
  ~
else:
  ~
finally:
  ~
  • 예외 발생
raise                                 #--- 예외를 상위로 전달
raise Exception
raise Exception(~)

assert 조건식, 관련_데이터            #--- AssertionError 발생, __debug__ 값이 true인 경우에만 실행됨
eval(~)                               #--- 문자열을 실행

기타 문법

  • import fibo : fibo.py 포함
  • from fibo import ~
  • sys.path, PYTHONPATH

Python 입출력

전역 변수

표준 입출력

  • 표준 입력 : sys.stdin
~ = input(~)
  • 표준 출력 : sys.stdout
#--- sep. 구분자, end. 끝라인, file. 출력 파일
print(~)

sys.stdout.write('~')
  • 표준 오류 : sys.stderr

CLI Argument

graph_file = sys.argv[1]
task_fr = sys.argv[2]
task_to = sys.argv[3]
step = int(sys.argv[4])


브라우저 입출력

Cookie 입출력

세션 입출력

데이터베이스 입출력

파일 입출력

  • 파일 입력
finp = open('~.txt')
for line in finp.readlines():
   print line
finp.close()

f.read()
#--- readline(), readlines()
#--- seek(~), tell()
~ = pickle.load(finp)                     #--- 저장된 개체 읽기, rb 모드
f.close()
  • 파일 출력
  • mode : r, w, a, +, b, t
fout = open('~.txt', 'w')
fout.write('~')
pickle.dump(~, fout)                      #--- 개체 저장, wb 모드
fout.close()

메일 입출력

numpy

import numpy as np

pandas Series

import pandas as pd
from pandas import Series, DataFrame

data = [100, 200, 300, 400, 500]
index = ['20180701', '20180702', '20180703', '20180704', '20180705']

series = Series(data, index)
print(series)

for idx in series.index:                               #--- series.values
    print(idx, series[idx])

pandas DataFrame

DataFrame 생성

import pandas as pd
from pandas import Series, DataFrame

df = DataFrame(None)                                   #--- 비어 있는 DataFrame 생성

#--- 데이터로 DataFrame 생성
col_1 = [ 100,  200,  300,  400,  500]
col_2 = [ 600,  700,  800,  900, 1000]
col_3 = [1100, 1200, 1300, 1400, 1500]
col_4 = [1600, 1700, 1800, 1900, 2000]
col_5 = [2100, 2200, 2300, 2400, 2500]
cols = ['open', 'high', 'low', 'close', 'other']
index = ['20180701', '20180702', '20180703', '20180704', '20180705']

data = {
    cols[0]: col_1,
    cols[1]: col_2,
    cols[2]: col_3,
    cols[3]: col_4,
    cols[4]: col_5
}
df = DataFrame(data, columns=cols, index=index)

#--- 데이터베이스에서 DataFrame 가져오기
df = pd.read_sql(query, self.MainWindow.con, index_col=None)      #--- Table에서 읽기
df.index = range(df.shape[0])                                     #--- 행 번호 재지정
columns = ['stock', 'close', 'volume', 'amount', 'date', 'open', 'high', 'low']
df.columns = columns                                              #--- 열 이름 재지정

DataFrame 기본 정보

df.shape                                               #--- shape[0]. 행수, shape[1]. 열수
df.index                                               #--- 행 인덱스
df.columns                                             #--- 열 이름
np.nan                                                 #--- 비어 있는 값을 지정할 때 사용
df'f현재가', 'f저가' = df'f현재가', 'f저가'.astype(float) #--- 열의 유형 변경
dataset.index = range(dataset.shape[0])                #--- 번호 인덱스 재지정
 
#--- 행 지정
df.loc['20180701']                                     #--- Series
df.loc[ ['20180701']]                                  #--- DataFrame

df.iloc[0]                                             #--- Series
df.iloc[0:2]                                           #--- DataFrame

df.ix['20180701']                                      #--- Series (Deprecated)
df.ix[2]                                               #--- Series (Deprecated)
df.ix[0:2]                                             #--- DataFrame (Deprecated)
 
#--- 열 지정
df.loc[:, 'open']                                      #--- Series
df.loc[:, ['open', 'close']]                           #--- DataFrame
df.iloc[:, 0]                                          #--- Series
df.iloc[:, 0:2]                                        #--- DataFrame

df['open']                                             #--- Series
df[ ['open', 'high']]                                  #--- DataFrame

#--- 행 우선 항목 지정
df.loc[ ['20180701'], ['open']]                        #--- DataFrame
df.loc[ ['20180701']][ ['open']]                       #--- DataFrame
df.loc[ ['20180701']]['open']                          #--- Series
df.loc['20180701'][ ['open']]                          #--- Series

df.ix['20180701']['open']                              #--- 값
df.ix[:, 'open']                                       #--- Series

#--- 열 우선 항목 지정
df['open']['20180701']                                 #--- 값

#--- 부분 DataFrame 생성
dataset = dataset[(dataset['f일자'] >= '20100101') & (dataset['f일자'] <= '20181231')]

val_mask = np.random.choice(전체_크기, 추출할_크기)
x_val   = x_train.loc[val_mask]
x_train = x_train.drop(val_mask)

DataFrame 연산

#--- DataFrame 합치기
dataset = pd.concat([dataset, datasetTA[idx]])         #--- 행이 추가됨

#--- 행 추가/수정/삭제
df.ix[행] = [~, ~, ~, ~]                               
df4 = df1.append({'c1':2, 'c2':2, 'c3': 3})

df = df.drop('행')                                     #--- 행 삭제 
df = df.dropna()                                       #--- 비어 있는 값을 포함한 행을 삭제
 
#--- 열 추가/수정/삭제
dataset.loc[:, 'price'] = Series({'행1': '값1', '행2': '값2'})    #--- 열 추가

dataset[column_name_new] = np.nan                                 #--- np.nan으로 초기화한 열 생성
dataset[column_name_new] = np.zeros(len(dataset))                 #--- 0으로 초기화한 열 생성
dataset[column_name_new][idx:] = dataset[column_name][:-1 * idx]

df = df.drop('열', axis=1)                             #--- 열 삭제

#--- 행 계산
dataset['profit'] = dataset['price_sale'] - dataset['price_purchase']
dataset['close_ma{}'.format(5)] = dataset['close'].rolling(5).mean()    #--- 이동 평균 계산
dataset[column_name_new][idx:] = dataset[column_name][:-1 * idx]
dataset.loc[1:, column_name_new] = (dataset['open'][1:].values - dataset['close'][:-1].values) / dataset['close'][:-1].values
dataset[column_name_new] = (dataset['high'].values - dataset['close'].values) / dataset['close'].values

Python과 Java 연동

  • JPype 설치
#!/usr/bin/env python
import jpype
import os.path

classpath = os.path.join(os.path.abspath('~'), 'bin')
jpype.startJVM(jpype.getDefaultJVMPath(), '-Djava.class.path=%s' % (classpath)

javaPackage = jpype.JPackage('~').~              #--- ~.~ package
javaClass = javaPackage.~
jc = javaClass()

jpype.shutdownJVM()
  • 참고 문헌

PSP 언어

Testcase

참고 문헌

사용자 가이드

외부 프로그램 실행

# -*- coding: utf-8 -*-
import os, re, sys, urllib
import subprocess

if __name__ == '__main__':
   results = []
#   p = subprocess.Popen('/bin/cat /nas/output/service001.out',stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
   p = subprocess.Popen('/bin/cat /nas/output/service001.out',stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
   strInp = ""
   strOut = p.communicate(input + "\n")[0]
   lines = strOut.split("\n")
   for line in lines:
       vals = line.split("\t")
#       results.append({'line':line})
       results.append({'acnt_no':vals[0], "cnt":vals[1]})

관리자 가이드

Database 연동

참고 문헌