본문 바로가기

Developing/Python_배우기

Python 12 - 라이브러리 (내장 함수)

 지금까지 파이썬을 따라왔다면 본인이 원하는 프로그램을 직접 코딩할 수도 있을 것이다. 하지만 프로그래머는 늘 염두해야 할 것이 자신이 만들려는 프로그램을 이미 누군가가

만들어 놓았을지도 모른다는 사실이다.

 

물론 공부를 목적으로 누군가가 만들어 놓은것을 또 만들수 있지만 공부가 아니라면 굉장히 어리석은 행동이다. 또한 이미 만들어진 것들은 수많은 테스트를 거친 것이라

안정적이기도 하다. 특히나 파이썬 배포판에 함께 들어 있는 라이브러리들에 대해서 살펴보는 것은 공부를 위해 굉장히 중요한 작업이다.

 

우선 라이브러리를 살펴보기 전에 파이썬 내장 함수를 먼저 보도록 한다.

 

 

내장 함수

 

여지껏 사용한 함수들 대부분이 내장 함수이다. 바로 print, del, type, raw_Input 등이 이것이다. 이러한 파이썬 내장 함수들은 외부 모듈과 달리 별도의 import를 필요로 하지 않는다.

그만큼 내장 함수들은 자주 사용된다는 소리이다. 여기서는 파이썬 내장 함수 중 중요하고 자주 쓰이는 것들만 살펴본다.

 

 

 

 

 

 

abs

abs (x)는 숫자를 입력받았을 때 해당 값의 절대값을 돌려준다.

 

복소수의 절대값을 다음과 같이 구해진다.

 

abs(a + bj) = sqrt (a^2+b^2)

 

 

apply

apply (function, (args))는 함수 이름과 그 함수의 인수를 입력받아 간접적으로 함수를 실행시키는 명령이다.

 

sum 처럼 2 값의 합을 돌려주는 함수를 만들었다고 했을 때 아랫부분처럼 apply를 호출하여 사용할 수도 있다.

 

 

 

chr

chr (i)는 정수 형태의 ASCII 코드 값을 입력 받아서 이에 해당하는 문자를 출력하는 함수이다.

 

 

 

 

cmp

cmp(x,y)는 2개의 객체를 비교하는 함수로서, x가 크면 양수값을, 작으면 음숙밧을 반환한다. 같은 경우에는 0을 반환한다.

 

 

 

 

divmod

divmod(a,b)는 2개의 숫자를 입력으로 받았을 때 그 몫과 나머지를 튜플 형태로 반환한다.

 

 

 

 

enumerate

enumerate는 입력값으로 순서자료형(리스트,튜플,문자열)을 입력 받아 enumerate 객체를 리턴한다. 이 객체는 첫 번째로 그 순서값, 두번째로 그 순서값에 해당되는 시퀀스

자로형의 실제값을 갖는 객체이다. 일반적으로 for문과 함께 사용되는데 반복구간에서 순서자료형의 값 뿐만 아니라 현재 어떤 위치에 있는지에 대한 인덱스 값이 필요한 경우

매우 유용하게 사용되는 함수이다.

 

 

 

 

 

 

eval

eval(expression)은 입력값으로 실행 가능한 문자열을 입력받서 문자열을 실행한 결과값을 반환하는 함수이다.

 

 

 

 

 

execfile

execfile(file)은 입력으로 파이썬 파일 이름을 받아서 그 파이썬 파일을 실행시키는 명령이다. 만약, 다음과 같은 스크립트를 sum.py 라는 이름으로 저장했다면,

 

 

 

다음처럼 인터프리터 모드에서 실행시킬 수 있다.

 

 

 

 

 

filter

filter(function, list)는 함수와 리스트를 입력으로 받아서 리스트의 값이 하나씩 함수에 인수로 전달될 때, 참을 반환시키는 값만을 따로 모아서 리스트의 형태로 반환하는

함수이다.  filter의 뜻은 무엇인가를 걸러낸다는 뜻이다. 아래의 샘플을 보자.

 

 

위의 positive 함수는 리스트를 입력값으로 받아서 각각의 요소를 판별해  양수값만 따로 모아 리스트에 저장하고 이를 돌려준다. 그다지 긴 코드는 아니지만 위의 것을

filter함수로 사용하면 다음과 같이 짧아진다.

 

filter 함수는 1 번째 인수로 함수명, 2 번째 인수로 그 함수아 차례로 들어갈 순서 자료형(리스트 ,튜플,문자열)을 받는다.

filter 함수는 2 번째 인수인 각 리스트의 요소들이 1 번째 인수인 함수에 들어갔을 때 리턴값이 '참'인 것만을 골라 묶어서 돌려준다.

위의 사진에서는 1, 0.5, 7만이 양수로 x>0 조건에 의해 참이 되기 때문에 [1, 0.5, 7] 이라는 결과값을 돌려준다.

 

이걸 다시 lambda를 사용하면 더욱 짧아진다. (lambda는 아래에서 자세히 다룬다)

 

 

 

hex

hex(x)는 정수값을 입력으로 받아 그 값을 16진수 값으로 변환하여 반환한다.

 

 

 

 

id

id(object)는 객체를 입력값으로 받아서 객체의 고유값(레퍼런스)을 반환한다. 

 

 

a = 3, b = a 라고 했기 때문에 a, 3, b는 전부 같은 값을 갖는다. 물론 4는 다른 객체이기 때문에 다른 값을 갖는다. 

 

 

 

 

input

input([prompt])은 사용자 입력을 받는 함수이다. 입력 인수로 문자열을 주면 그 문자열은 프롬프트가 된다. (b 부분)

 

 

 

 

 

int

int(x)는 문자열 형태의 숫자나 소수점 숫자 등을 정수의 형태로 반환시켜 돌려준다. 정수를 입력으로 받으면 그대로 돌려주며, 다른 진법의 숫자를 10진법으로 반환하여 돌려준다.

 

단순히 정수 형태로 돌려주기도 하고,

 

 

2 진법에서의 11 이라는 값을 10진수로 변환하여 출력한 값이 3이고,

16 진법에서의 1A 라는 값을 10진수로 변환하여 출력한 값이 26이다. 

 

 

 

 

isinstance

isinstance(object, class)는 입력값으로 인스턴스와 클래스 이름을 받아서 입력으로 받은 인스턴스가 해당 클래스의 인스턴스면 True, 아니면 False를 반환한다.

 

 

 

Test라는 클래스를 생성하고 a 라는 변수에 할당하였다. 따라서 a는 Test의 인스턴스이기 때문에 True가 반환된다.

그러나, b는 그저 정수값 3을 대입한것이기 때문에 Test와 무관하여 Test의 인스턴스가 아니기 때문에 False가 반환된다. 

 

 

 

 

lambda

labmda는 함수를 생성할 때 사용되는 예약어로 def와 동일하나 보통 한줄로 간결하게 만들어 사용할 때 사용한다. '람다'라고 읽으며 보통 def를 쓸 정도로 복잡하지 않거나

def를 사용하지 못할 경우 대신하여 쓰인다. lambda는 다음과 같이 정의된다.

lambda  인수1,인수2,..., : 인수를 이용한 표현식

 

 lambda를 이용한 sum함수는 인수로 a,b를 받고 a와 b를 합한 값을 돌려준다. lambda를 이용한 위의 sum 함수는 def를 이용한 아래의 sum 함수와 동일하다.

 

 

그렇다면 def가 있는데 굳이 lambda를 쓰는 이유는 뭘까? 우선 lambda는 def 대신 간결하게 사용할 수 있고 def로 쓸 수 없는 곳에 lambda는 쓰일 수 있기 때문이다.

리스트 내에 lambda가 들어간 경우가 이런 경우이다.

 

위의 리스트에서 1 번째 요소는 입력값의 합, 2 번째 요소는 곱을  돌려주는 함수이다.

 

1 번째 요소의 위치를 확인하면 선언시에 보았던 주소와 동일하며 (3,4)를 넣으면 7이 반환된다.

 

2 번째 요소의 위치 역시 선언 시의 위치와 동일하며 (3,4)를 넣으면 12가 반환된다.

 

 

 

len

len(x)는 인수로 순차 자료형을 입력받아 그 길이(요소의 개수)를 돌려준다. 

 

 

 

 

 

list

list(x)는 인수로 순차 자료형을 입력받아 그 요소를 똑같은 순서의 리스트로 만들어 돌려준다. 리스트를 입력하여 똑같은 리스트를 복제하여 돌려준다.

 

a 리스트를 복제한 것이 b 리스트 지만 같은게 아니라 복사를 한것이기 때문에 id로 고유값을 확인하여 다르게 보인다.

 

 

 

 

long

long(x)는 숫자 형태의 문자열이나 숫자를 인수로 입력받아 큰 정수형 (long integer)로 돌려주는 함수이다.

 

 

 

 

 

map

map이라는 것은 함수와 순차 자료형을 입력으로 받아서 순차 자료형의 각각의 요소가 함수의 입력으로 들어간 다음 나온ㄴ 출력값을 묶어서 리스트로 돌려주는 함수이다.

다음의 함수를 보자. 

 

위 함수는 리스트를 입력받아서 각각의 요소에 2를 곱한 결과값을 돌려주는 함수이다.

위 함수를 map를 이용하며 표현하면 다음과 같다.

 

즉, map이란 함수는 입력값으로 함수명과 그 함수에 들어갈 인수로 순차 자료형을 받는다. 이것은 다음과 같이 해석된다.

" 리스트의 처음인 1이 times_two 함수의 입력값으로 들어가서 1*2의 과정을 거쳐 2가 되어 결과값 리스트 []에 추가된다. 이 때 결과값 리스트는 [2]가 되고,

   그 다음 리스트 요소인 2가 times_two 함수의 입력값으로 들어가서 4가 된 다음 이 값이 또 결과값 리스트인 [2]에 추가되어 [2, 4]가 된다."

 

총 4개의 요소값이 반복되면 결과값은 [2, 4, 6 ,8]이 되고 더 이상 입력값이 없기 때문에 결과값을 돌려준다. 이것이 map 함수가 하는 일이다.

즉, map함수는 결과 값으로 리스트를 리턴한다.

 

위의 예를 lambda를 쓰면 다음과 같이 간략화 할 수 있다.

 

 

 

 

 

 

 

max

max(x)는 인수로 순차 자로형을 입력 받아 그 최대값을 돌려주는 함수이다.

 

 

 

 

min

min(x)는 max와 반대로 최소값을 돌려주는 함수이다.

 

 

 

 

 

 

oct

oct(x)는 정수 형태의 숫자를 8진수 문자열로 바꾸어 주는 함수이다.

 

 

 

 

 

 

open

open(filename, [mode]은 파일 이름과 읽기 방법을 입력 받아 파일 객체를 돌려주는 함수이다. 읽기 방법(mode)가 생략되면 기본적으로 읽기 전용 모드('r')로 파일 객체를

만들어 돌려준다.

 

mode 

설명 

w

쓰기 모드로 파일 열기 

r

읽기 모드로 파일 열기

a

추가 모드로 파일 열기

b

바이너리 모드로 파일 열기

 

 

마지막줄의 경우

fread = open ("read_mode.txt") 로 나타낼 수도 있다. (mode의 기본값은 r이기 때문)

 

 

 

 

 

ord

ord(x)는 문자의 아스키 값을 돌려주는 함수이다.

 

 

 

 

 

pow

pow(x,y)는 x의 y승 값을 돌려주는 함수이다.

 

 

 

 

 

 

range

range([start], stop [,step])는 for문과 같이 사용되는 것으로 인수로 정수값을 주어 그 숫자에 해당되는 범위의 값을 리스트의 형태로 돌려주는 함수이다.

주의해야 할 점은 대부분의 프로그래밍 언어들이 그렇듯 숫자의 시작은 0이기 때문에 끝값은 포함되지 않는다는 것이다.

 

 

 

인수가 1개인 경우

 

 

 

 

인수개 2개인 경우  ( 입력으로 주어지는 2개의 숫자는 시작과 끝을 나타낸다. 물론 끝번호는 포함되지 않는다 )

 

 

 

 

인수가 3개인 경우  ( 3번째 인수는 시작부터 끄까지 가는데 숫자 사이의 거리를 나타낸다 )

 

 

 

 

 

 

 

raw_input

raw_input([prompt])은 사용자 입력을 받는 함수로 prompt는 입력을 받는 메시지이다. 입력 받은 값의 맨 마지막 문자('\n')를 없애고 돌려준다.

 

 

 

 

 

 

reduce

reduce(function, sequence)는 인수를 2개 받는 함수와 순차 자료형을 인수로 입력받아서 순차 요소의 왼쪽부터 차례대로 끝까지 감소시키며 입력받은 함수를 실행시키는

함수이다.

 

 

test1이 실행되는 순서를 식으로 나타내면 다음과 같다.

((((1+2)+3)+4)+5)

 

 

test2가 실행되는 순서는 다음과 같다.

((((1*2)*3)*4)*5)

 

 

 

 

 

reload

reload(module)는 이미 불러왔던 모듈을 다시 부르는 함수로 모듈 객체를 돌려준다.

 

위와 같은 파일을 에디터로 작성한다.

 

인터프리터에서 모듈을 테스트 테스트 한다.

 

 

 

인터프리터를 닫지 말고 에디터를 이용하여 위와 같이 수정한다.

 

 

수정 후 reload를 하기 전에는 이미 이전값(Python is Good)이 들어있어서 수정된 값으로 나타나지 않는다. 따라서 reload를 하고 다시 a를 호출하면 수정된 값으로 나타난다.

 

 

 

 

repr

repr(object)은 객체를 출력할 수 있는 문자열 형태로 반환하여 돌려주는 함수이다. 이 변환된 값은 주로 eval 함수의 입력으로 쓰인다.

str 함수와의 차이점이라면 str은 변환된 값을 eval의 입력값으로 할 수 없는 경우가 있다는 것이다.

 

 

위에서 보는것과 같이 repr로 변환된 python이 대문자 PYTHON은 eval 함수의 입력값으로 넣을 수 있다.

그러나, str로 변환된 PYTHON의 경우 eval 함수의 입력값으로 넣을 수 없다.

 

 

 

 

sorted

sorted 함수는 입력으로 받은 순차 자료형을 정렬한 후 그 결과를 리스트로 리턴한다.

 

 

리스트 자료형에도 sort라는 함수가 있긴 하다. 하지만 리스트 자료형의 sort 함수는 리스트 객체 그 자체를 정렬할 뿐이지 정렬된 결과를 리턴하지는 않는다.

이해가 가질 않는다면 다음의 사진을 보자.

 

a 라는 변수에 [3,1,2] 리스트를 대입한다.

result 변수에 a 변수를 sort 함수를 이용하여 정렬한 결과를 대입한다.

result를 출력하면 None이 리턴된다. 그러나 a값 자체를 보면 정렬된 순서로 바뀌어 있다.

즉, sort 함수는 정렬만 할 뿐 이를 결과를 리턴하지는 않는다.

 

 

 

 

str

str(object)은 객체를 출력할 수 있는 문자열 형태로 변환하여 돌려주는 함수이다. 단 문자열 그 자체로만 돌려주는 함수이다.

 

 

 

 

 

 

tuple

tuple(sequence)은 인수로 순차 자료형을 입력받아 튜플 형태의 자료로 바꾸어 돌려준다. 튜플형이 입력으로 들어오면 그대로 돌려준다.

 

 

 

 

 

type

type(object) 인수로 객체를 입력받아 그 객체의 자료형이 무엇인지 알려주는 함수이다.

 

 

 

 

 

 

zip

zip 함수는 동일한 개수의 요소값을 갖는 순차 자료형을 묶어주는 역화을 한다. 

 

 

 

'Developing > Python_배우기' 카테고리의 다른 글

Python 13 - 라이브러리 (외장 함수)  (0) 2014.02.18
Python 11 - 예외처리  (0) 2014.02.15
Python 10 - 모듈  (1) 2014.02.03
Python 09 - 클래스  (0) 2014.01.26
Python 08 - 입/출력 (I/O)  (0) 2014.01.25