파이썬의 숫자 데이터를 분류하면 다음과 같다.


[표 1] 숫자형의 분류

숫자형

개요

정수(int)

범위에 제한이 없다.

16진수, 8진수, 2진수로도 표현 가능하다.

(파이썬2.x 버전에서는 큰 정수에 l/L 접미사를 붙여야 함.)

실수(float)

소수점 이나 e/E 가 포함된 숫자

복소수(complex)

허수부(j/J) 가 포함된 숫자


 다른 언어들과는 달리 파이썬은 정수에 대해 범위 제한이 없으며 복소수까지 기본 자료형에 포함된다. 복소수는 숫자 뒤에 j/J 를 붙이면 된다. 파이썬쉘에서 다음 예를 하나씩 실행해 보고 결과를 확인해 보자.


>>> a=123
>>> b1=3.14
>>> b2=1e-10
>>> c=10000000000000000000000000000000000 # 정수는 범위 제한이 없다.
>>> d1=1+2j
>>> d2=1j #허수를 표기할 때 1j 와 같이 1을 꼭 붙여야 한다.
>>> d3=-3-1j
>>> e=0x12a #16진수. 0x(제로 엑스) 혹은 0X 로 시작한다.
>>> f=0b1101101 #2진수. 0b(제로 비) 혹은 0B 로 시작한다.
>>> g=0o1234 #8진수. 0o (제로 오) 혹은 0O로 시작한다.


정수는 10진수/16진수/8진수/2진수로 표현할 수 있으며 실수형은 십진수 형식으로만 표현된다. 숫자에 소수점이나 지수를 표시하는 e/E가 있다면 실수이고 그렇지 않다면 정수로 분류된다. 또한 허수부가 포함되어 있다면 복소수형이다.


 재미있는 것은 0j, -0j, +0.0j, -0.0j 도 내부적으로 complex 형으로 간주된다는 것이다. 숫자 상수나 변수의 형을 보려면 내장 함수인 type()을 이용한다.


>>> type(10)
>>> type(-1.2)
>>> a=3+4j; type(a)
>>> type(2+0j)


 정수의 범위에 제한이 없다는 점도 특이한 점이다. 이러한 점에서 파이썬이 매우 큰 숫자를 다뤄야 하는 분야나(예를 들어서 천문학, 경제학) 데이터 분석에서 타언어보다 유리하다는 점을 짐작할 수 있다. (2.x버전에서는 큰 정수를 표시하기 위해서는 정수 뒤에 L/l 접미어를 붙여야 한다. 그러나 3.x버전은 그런 제약이 없다.)


 복소수는 실수부, 허수부, 켤레복소수를 구할 수 있는 속성(attribute)이 있는데 각각 real, imag, conjugate() 이다. 다음을 실습해 보자.


>>> c=11+22j
>>> c.real
>>> c.imag
>>> c.conjugate()


또한 내장 함수인 abs()를 이용하면 복소수의 크기를 구할 수 있다.


>>> abs(c)


 십진수의 이진수 표현을 알고 싶다면 bin()이라는 내장함수를 사용하면 된다. 팔진수는 oct(), 십육진수는 hex()함수를 이용한다.


>>> a=1234
>>> bin(a)
'0b10011010010'
>>> oct(a)
'0o2322'
>>> hex(a)
'0x4d2'


단, 이 함수들은 정수형에 대해서만 동작하며 반환값이 문자열이라는 것에 유의해야 한다.


 만약 일반적인 변수의 값을 확인하고 싶다면 파이썬쉘에서 변수명을 입력하고 엔터를 치면 변수의 값을 보여준다.


>>> a
>>> c, z # 여러 변수를 동시에 출력하고 싶다면 콤마(,)로 구분한다.


 만약 ipython쉘을 사용하고 있다면 현재 정의된 모든 변수값을 보고 싶다면 ‘who ‘ 명령어를 이용하면 된다.




Posted by 살레시오
,

 프로그램은 결국 자료(data)를 처리하는 일을 주로 하게 된다. 여기에서는 파이썬의 내장 자료형의 종류 대해서 알아보자. 가장 중요하고 사용 빈도가 높은 파이썬 자료형은 다음과 같은 것들이 있다.


  • 숫자 : 정수 (int), 실수 (float), 복소수 (complex)로 나뉜다.

  • 문자열 (str)


  • 리스트 (list)

  • 튜플 (tuple)

  • 딕셔너리(dictionary)

  • 집합 (set)


 변수명, 함수명, 클래스명 등으로 쓸 수 있는 식별자(identifier)를 만드는 방법은 다른 언어들과 거의 동일하다. 식별자를 만들 때 보통 사용되는 문자들은 다음과 같다.


  • 영문자 대소문자 (a,b … z A B … Z)

  • 숫자 (0 1 … 9)

  • 언더바(_)


이러한 문자들을 조합하되 숫자로 시작하면 안된다. 그리고 대소문자를 다른 문자로 구별한다. 그리고 python3에서는 유니코드 문자를 식별자로 사용할 수 있다. 즉, 한글로도 변수명을 지을 수 있지만 권장되지는 않는다.



'프로그래밍언어.Lib > 파이썬' 카테고리의 다른 글

파이썬의 산술 연산자  (0) 2015.05.23
파이썬의 숫자형  (0) 2015.05.23
파이썬(python) 소개  (0) 2015.05.23
파이썬의 math,cmath,numpy 모듈  (0) 2015.04.29
no pylab, thanks  (0) 2015.04.29
Posted by 살레시오
,

 파이썬은 인터프리터 언어로서 암스테르담의 귀도 반 로섬(Guido V. Rossum)에 의해서 1990년에 초기 버전이 만들어졌다. (2015년 1월 현재 3.4.x 버전) 파이썬이라는 이름은 본인이 좋아하는 "Monty Python's Flying Circus" 라는 코미디 쇼에서 따왔다고 한다. 파이썬의 사전적인 뜻은 큰 비단뱀인데 대부분의 파이썬 책 표지와 아이콘이 뱀 모양으로 그려져 있는 이유가 여기에 있다.


[그림 1] 파이썬 개발자, 비단뱀 그리고 파이썬 로고


파이썬 프로그램의 가장 큰 특징은 배우기 쉽고 직관적이라는 것이다. 인터프리터 언어이기 때문에 실행 결과를 즉시 확인해 볼 수 있으며 최근에는 실행 속도도 심지어 C/C++ 프로그램과 맞먹을 정도로 성능도 향상되고 있다. 또한 공동 작업과 유지 보수가 매우 쉽고 편하기 때문에 이미 다른 언어로 작성된 많은 프로그램과 모듈들이 파이썬으로 다시 재구성되고 있기도 하다. 국내에서도 그 가치를 인정받아 사용자 층이 더욱 넓어져 가고 있고, 파이썬을 이용한 프로그램을 개발하는 기업체들이 늘어가고 있는 추세이다.


 현재 파이썬은 교육의 목적뿐만 아니라 실용적인 부분에서도 널리 사용되고 있는데 그 대표적인 예는 바로 구글(Google) 이다. 구글에서 만들어진 소프트웨어의 50%이상이 파이썬으로 만들어졌다고 한다. 이 외에도 유명한 것을 몇 가지 들어보면 Dropbox(파일 동기화 서비스), Django(파이썬 웹 프레임워크)등을 들 수 있다. 또한 빅데이터 분석이나 과학 계산 용도로도 활발히 활용되는 등 컴퓨터를 활용한 거의 모든 곳에 사용되고 있다고 해도 과언이 아닐 정도로 인기를 끌고 있다.


[그림 2] 가장 널리 사용되는 프로그래밍 언어들


파이썬의 특징을 정리하면 다음과 같다.


  • 인터프리터(interpreter) 언어이다.(실행 결과를 바로 확인할 수 있다.)

  • 간결하고 쉬운 문법으로 빠르게 학습할 수 있다.

  • 강력한 성능을 가진다.

  • 다양한 분야에 적용할 수 있는 라이브러리가 풍부하다.

  • 개발 속도가 빠르다.

  • 오픈 소스(open source)이며 무료이다.


최근에는 라즈베리파이(raspberry pi)나 비글본 블랙(beaglebone black) 같은 원보드 마이컴이 인기를 끌고 있는데 보통 운영체제로 리눅스를 채용한다. 이러한 시스템에서도 파이썬을 이용하여 전통적인 C/C++/JAVA로 개발하는 것보다 훨씬 더 쉽고 빠르게 응용 프로그램을 제작할 수 있다.

[그림 3] 라즈베리파이와 비글본블랙


 현재 파이썬은 버전이 2.x 대와 3.x 대로 나뉘어 두 가지 버전이 같이 사용되고 있다는 점인데 초보 사용자가 선택하는데 문제가 생긴다. 특이하게도 3.x 버전의 문법이 2.x버전과는 달라서 100% 호환되지 않으므로 같은 언어로 작성한 프로그램인데도 불구하고 2.x 버전에서 잘 작동되는 것이 3.x 버전에서는 작동하지 않거나 반대의 경우도 발생한다.


 본 강좌에서는 3.x 버전의 문법을 기본으로 해서 2.x버전 과의 차이점에 대해서 필요할 때마다 설명하도록 하겠다.


파이썬 강좌 전체 목록 (TOP) >>>


c{pyt},n{py001}


Posted by 살레시오
,

  파이썬의 수학함수를 이용하기 위해서는 math 모듈을 import해야 한다. 기본 (표준) 모듈이므로 설치 과정 없이 다음과 같이 로드할 수 있다.


-------------------------------------------------------------------

             >>> import math

-------------------------------------------------------------------


이 모듈의 수학 함수는 표준 C언어의 그것들을 구현한 것이다. 실수 연산을 수행하며 대부분의 경우 float형을 반환한다.


 복소수 연산을 위해서는 cmath 모듈을 이용해야 한다. 이것도 역시 기본 모듈이므로 별도 설치 없이 다음과 같이 로드할 수 있다.


-------------------------------------------------------------------

             >>> import cmath

-------------------------------------------------------------------

이 모듈에는 복소수 연산을 위한 다양한 함수들이 있는데 여기에 잘 정리되어 있다.

 하지만 math 모듈은 인수가 실수 (스칼라) 에 대해서만 적용이 되고 cmath 는 복소수 (스칼라) 인 경우에만 적용이 된다는 단점이 있다. 만약 행렬 연산이 필요하다면 이 두 모듈은 사용할 수 없으며 numpy 를 사용해야 한다. 이 모듈은 파이썬의 고급 연산 분야의 기본 모듈로서 벡터 혹은 행렬에 대한 요소간 연산을 지원하므로 가장 적용 범위가 넓다. 또한 python(x,y) 나 winPython 같은 패키지를 사용하면 쉽게 인스톨 없이 바로 import 하여 사용할 수 있다.

winPyhon : 과학 계산용 파이썬 패키지

[#00107]


Posted by 살레시오
,

 파이랩(pylab)은 파이썬을 마치 MATLAB처럼 사용할 수 있도록 하는 목표를 가지고 개발되고 있는 모듈로서 내부적으로 numpy, scipy, 그리고 그래픽을 생성하기 위한 matplotlib 라는 모듈을 사용한다. 이 모듈은 matlab 사용자들을 python 쪽으로 옮겨오는데 편의를 주기 위해서 개발되기 시작한 것 같고 한 때 사용의 편의성 때문에 많이 사용되었던 것 같다. 특히 그래픽을 생성하는 기능은 MATLAB과 매우 흡사한데 이는 matplotlib 의 함수들은 MATLAB문법에 맞게 wrapping 해서 제공하기 때문이다.


 하지만 파이썬 커뮤니티 내부에서는 pylab은 몇 가지 이유로 사용하기를 권장지 않는 듯 하다. 가장 큰 이유는 그 안에서 사용되는 파이썬 모듈 간 구분이 잘 이루어 지지 않아 혼동을 준다는 것이다. 아래 포스트에 자세한 이유가 소개되어 있다.


 please stop using python


현재 pylab에 대한 자료가 별로 많지 않고 2013년 이후로 업데이트도 없다. 단지 하위 호환성을 일정 기간 유지하기 위해서 관련 내용을 완전히 삭제하고 있지는 않은 것 같다. 특히 수치 해석시 많이 사용되는 파이썬쉘인 ipython 을 사용할 때에는 더더욱 권장되지 않는다.




Posted by 살레시오
,

  winPython의 python 콘솔을 실행하면 pylab 이 기본적으로 import 되어서 함수들을 엄격하게 구분해서 사용하는 것이 무척 불편하다. pylab 을 사용하는 것은 파이썬 커뮤니티 안에서 권하지 않는다.


 파이썬 콘솔에서 백그라운드로 임포트되는 모듈들은 다음과 같이 'scientific'이라는 명령을 입력하면 상세한 내용을 확인할 수 있다.

-----------------------------------------------------------------------

>>> scientific


This is a standard Python interpreter with preloaded tools for scientific

computing and visualization. It tries to import the following modules:


>>> import numpy as np  # NumPy (multidimensional arrays, linear algebra, ...)

>>> import scipy as sp  # SciPy (signal and image processing library)

>>> import matplotlib as mpl         # Matplotlib (2D/3D plotting library)

>>> import matplotlib.pyplot as plt  # Matplotlib's pyplot: MATLAB-like syntax

>>> from pylab import *              # Matplotlib's pylab interface

>>> ion()                            # Turned on Matplotlib's interactive mode

>>> import guidata  # GUI generation for easy dataset editing and display


>>> import guiqwt                 # Efficient 2D data-plotting features

>>> import guiqwt.pyplot as plt_  # guiqwt's pyplot: MATLAB-like syntax

>>> plt_.ion()                    # Turned on guiqwt's interactive mode


Within Spyder, this interpreter also provides:

   * special commands (e.g. %ls, %pwd, %clear)

   * system commands, i.e. all commands starting with '!' are subprocessed

     (e.g. !dir on Windows or !ls on Linux, and so on)

-----------------------------------------------------------------------

 파이썬 콘솔 기동시에 pylab을 import 하지 않으려면 다음과 같은 과정을 거쳐야 한다. 먼저 Tools > Preferences 의 Console 탭에서 Advanced settings 항목으로 들어간다.

여기서 Default PYTHONSTARTUP scrip 를 선택하면 파이썬의 기본적인 세팅으로 기동하는 것이다. 아예 아무런 모듈도 import하지 않고 시작하려면 이것을 체크하면 된다.


 과학계산 모듈을 초기에 import 하는 일은 scientific_startup.py 에 기록되어 있는데 아래 그림과 같이 pylab을 로딩하는 부분을 주석 처리하면 pylab 이 import 되는 것을 막을 수 있다.


추가적으로


              %ls (파일리스트)

              %pwd (현재 디렉토리)

              %clear


등의 명령이 사용가능함을 알 수 있다.

Posted by 살레시오
,

  컴퓨터로 프로그래밍을 하다 보면 눈이 쉽게 피로해지는데 컬러 테마를 어두운색 계열로 바꾸어 놓으면 도움이 된다. 윈파이썬의 경우 spyder를 기본 IDE로 사용하는데 spyder의 Tools > Preferences 메뉴에서 Editor, Console 텝의 옵션을 조정하면 dark theme 를 사용할 수 있다.

먼저 Editor 텝에서 다음 그림과 같이 color scheme 을 변경한다. 이것을 적용하면 프로그램 에디터의 테마가 다크테마를 적용되어 어두운 배경에 밝은 색 폰트로 변경된다.



아래 그림에서는 체크를 해제하여야 console창과 python쉘의 배경이 검은색으로 된다.



만약 ipython쉘을 사용한다면 다음과 같이 ipython탭에서 설정을 해주어야 한다.



이렇게 설정해 놓으면 눈이 훨씬 편하게 작업할 수 있다.

Posted by 살레시오
,

  winPython 은 초기에 python console을 실행시키게 되어 있다. 만약 ipython을 기본으로 사용하고 싶다면 다음과 같은 과정으로 설정하면 된다.


먼저 python console을 초기 기동시 자동으로 시작하게 하지 않으려면 Tools > Preferences 메뉴에서 다음 그림과 같은 옵션을 체크 해제한다. 이 옵션의 체크가 해제되면 winPython을 실행시킬 때 console 창이 자동으로 실행되는 것을 억제할 수 있다.



그 다음 ipython 옵션에서 다음 탭을 체크하여 선택한다.



그러면 이제 winPython을 실행시키면 초기에 python console 대신 ipython 이 실행된다.

[#00066]


Posted by 살레시오
,

1. 파이시리얼(pyserial) : 파이썬 시리얼통신 모듈

 먼저 pyserial을 소개하도록 하겠다. pyserial은 시리얼 통신을 하기 위한 파이썬 모듈이다. 만약 winPython 을 사용한다면 pyserial 이 기본으로 설치되어 있다. ( 처음에는 이 사실도 모르다가 따로 설치를 해야 하겠거니 짐작하고 한참을 헤맸었다. ) 따라서 바로 import 하면 사용할 수 있다.  주의할 점은 모듈명은 pyserial이 아니라 그냥 serial 이라는 것이다.


>>> import serial


일단 아두이노를 연결하면 윈도우 장치관리자에서 COM포트 번호를 확인할 수 있다. 아두이노 우노를 연결하고 내 컴퓨터의 예를 보면 아래와 같이 'COM22'번으로 잡혀있다.



먼저 시리얼 통신 객체를 생성하여야하는데 serial 모듈에 있는 Serial 클래스 (즉, serial.Serial 클래스이다.)를 이용하면 된다. 생성자의 정의는 다음과 같다.


class serial.Serial

__init__(
    port=None,
    baudrate=9600,
    bytesize=EIGHTBITS,
    parity=PARITY_NONE,
    stopbits=STOPBITS_ONE,
    timeout=None,
    xonxoff=False,
    rtscts=False,
    writeTimeout=None,
    dsrdtr=False,
    interCharTimeout=None
)


입력 인수들:


  • port - 장치명. 윈도우즈에서는 'COM0', 'COM1' 등이다.

  • baudrate - 보레이트(baud rate) 예를 들면 9600, 115200 등.

  • parity - 패리티비트. FIVEBITS, SIXBITS, SEVENVITS, EIGHTBITS 등이 가능하다.

  • stopbit - 정지비트. STOPBITS_ONE , STOPBITS_ONE_POINT_FIVE , STOPBITS_TWO 등이 가능하다.

  • timeout - 수신 시간 제한 설정

  • xonxoff - 소프트웨어 흐름 제어를 설정

  • rtscts - 하드웨어(RTS/CTS) 흐름 제어 설정

  • dsrdtr - 하드웨어(DSR/DTR) 흐름 제어 설정

  • writeTimeout - 송신 시간 제한 설정

  • interCharTimeout


예외 발생


  • ValueError - 입력 변수값에 오류가 있을 경우 발생

  • SerialException - 시리얼 통신 장치에 오류가 있을 경우 발생


이것을 보면 포트 정도만 지정해 주어도 기본적으로 생성이 되는 것을 알 수 있다. 포트는 'COM22'와 같이 문자열로 넘겨주어야 한다. 포트명을 특정해 주면 즉시 장치와 연결이 open된다. 시리얼통신 장치를 다 사용하였다면 obj.close() 를 호출하여 반드시 닫아주어야 한다.




Posted by 살레시오
,

2. 아두이노로부터 수신 실험

 실험을 위해서 다음과 같은 간단한 프로그램을 아두이노 우노에 다운로드 하였다. 이 프로그램은 전원이 켜지면(또는 리셋 버튼을 누르면) "Hello python." 이라는 문자열을 보낸다.


void setup() {
   Serial.begin(9600);
   Serial.println("Hello python.");
}

void loop() {
}


그리고 파이썬에서 Serial 객체의 인스턴스를 다음과 같이 생성한다.


>>> ard = serial.Serial('COM22')


이렇게 하면 ard 변수에 Serial 클래스의 인스턴스가 생성된다. 이제 이 변수를 이용해서 아두이노에서 보내는 값을 읽어들일수 있다.


>>> obj = ard.readline()
>>> obj
b'Hello python.\r\n'


아두이노 쪽에서 println()함수를 썼기 때문에 끝에 \r\n 두 개의 개행 제어 문자가 붙어서 넘어왔다.


 한 가지 주의할 것은 Serial.readlin() 함수의 반환 객체가 문자열이 아니라 bytes 라는 파이썬 객체로서 각각의 문자의 아스키코드 바이트 값의 배열이라는 점이다. 이것을 파이썬 문자열(string)로 변환하려면 bytes.decode()함수를 이용하면 된다.


>>> str = obj[:-2].decode()
>>> str
'Hello python.'


이제 str 변수에 아두이노로 부터 전송된 문자열이 정확히 저장되었다. 여기서 obj[:-2] 와 같이 인덱싱을 한 것은 \r\n 두 문자를 제외하기 위한 것이다.





Posted by 살레시오
,