본문 바로가기
Python/점프 투 파이썬

05. 파이썬 날개달기 4) 라이브러리 [1] 내장함수

by 가므자 2012. 4. 20.

[1] 내장함수

우리는 이미 몇 가지의 내장 함수들을 사용해 왔다. print, del, type 등이 바로 그것이다. 이러한 파이썬 내장 함수들은 외부 모듈과는 달리 import를 필요로 하지 않는다. 아무런 설정 없이 바로 사용할 수가 있다.

 

이곳에서 우리는 모든 내장함수에 대해서 알아보지는 않을 것이다. 다만 활용빈도가 높고 중요한 것들에 대해서만 간략히 알아볼 것이다. 여기서 설명하고 있지 않은 것들에 대해서는 라이브러리 레퍼런스를 참고하도록 하자.

 

 

abs

 

abs(x)는 숫자값을 입력값으로 받았을 때, 그 숫자의 절대값을 돌려주는 함수이다.

>>> abs(3)

3

>>> abs(-3)

3

>>> abs(1+2j)

2.2360679774997898

>>> 


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

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

 

 

apply

 

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

>>> def sum(a,b):

...     return a+b

>>> 


위와 같이 두 값의 합을 되돌려 주는 함수를 만들었다고 했을 때 아래와 같이 apply를 호출하여 쓸 수 있다.

>>> apply(sum, (3,4))

7

 

 

chr

 

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

>>> chr(97)

'a'

>>> chr(48)

'0'

>>> 

 

 

cmp

 

cmp(x,y)는 두 개의 객체를 비교하는 함수이다. 만약 x가 크다면 양수값을 작다면 음수값을 반환한다. 같은 경우에는 0를 반환한다.

>>> cmp(4,3)

1

>>> cmp(3,4)

-1

>>> cmp(3,3)

0

 

 

dir

 

dir객체가 가지고 있는 변수나 함수를 리스트 형태로 보여준다.

아래의 예는 리스트와 딕셔너리 객체의 관련 함수들(메소드)을 보여주는 예이다. 우리가 앞서서 살펴보았던 관련함수들을 구경할 수 있을 것이다.

>>> dir([1,2,3])

['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

>>> dir({'1':'a'})

['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'setdefault', 'update', 'values']

 

 

divmod

 

divmod(a,b)는 두 개의 숫자를 입력값으로 받았을 때 그 몫과 나머지를 터플의 형태로 반환하는 함수이다.

>>> divmod(7,3)

(2,1)

>>> divmod(1.3, 0.2)

(6.0, 0.099999999999999978)

 

 

enumerate

 

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


enumerate
는 아래의 예와같이 보통 for문과 함께 사용된다.

>>> for i, name in enumerate(['boby', 'foo', 'bar']):

...     print i, name

...

0 boby

1 foo

2 bar

반복구간에서 시퀀스 자료형의 값 뿐만 아니라 현재 어떤 위치에 있는지에 대한 인덱스값이 필요한 경우에 enumerate함수는 매우 유용하다.

 

 

eval

 

eval(expression)은 입력값으로 실행가능한 문자열(1+2, 'hi' + 'a' 같은 것)을 입력으로 받아서 문자열을 실행한 결과값을 반환하는 함수이다.

>>> eval('1+2')

3

>>> eval("'hi' + 'a'")

'hia'

>>> eval('divmod(4,3)')

(1, 1)

 

 

execfile

 

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

# sum.py

def sum(a,b):

    return a+b

 

print sum(3,4)


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

>>> execfile('sum.py')

7

 

 

filter

 

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

 

filter의 뜻은 무엇인가를 걸러낸다는 뜻이다. 이 의미가 filter 함수에서도 그대로 사용된다. 다음의 예를 보자.

#positive.py

def positive(l):

    result = []

    for i in l:

        if i > 0:

            result.append(i)

    return result

 

print positive([1,-3,2,0,-5,6])

결과값: [1, 2, 6]

, 위의 positive함수는 리스트를 입력값으로 받아서 각각의 요소를 판별해 양수값만 따로 리스트에 모아 그 결과값을 돌려주는 함수이다.


filter
함수를 이용하면 아래와 같이 위의 내용을 간단하게 쓸 수 있다.

#filter1.py

def positive(x):

    return x > 0

 

print filter(positive, [1,-3,2,0,-5,6])


결과값: [1, 2, 6]

filter 함수는 첫 번째 인수로 함수명을, 두 번째 인수로는 그 함수에 차례로 들어갈 시퀀스 자료형(리스트, 터플, 문자열)을 받는다. filter 함수는 두 번째 인수인 각 리스트의 요소들이 첫 번째 인수인 함수에 들어갔을 때 리턴값이 참인 것만을 리스트로 묶어서 돌려준다. 위의 예에서는 1, 2, 6 만이 양수로 x > 0 이라는 문장이 참이 되므로 [1, 2, 6]이라는 결과 값을 돌려주게 된다.


lambda
를 쓰면 더욱 간편하게 쓸 수 있다. (lambda함수는 잠시 후에 설명한다.)

>>> print filter(lambda x: x > 0, [1,-3,2,0,-5,6])

[1, 2, 6]

 

 

hex

 

hex(x)는 입력으로 정수값을 받아서 그 값을 십육진수값(hexadecimal)로 변환하여 돌려주는 함수이다.

>>> hex(234)

'0xea'

>>> hex(3)

'0x3'

 

 

id

 

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

>>> a = 3

>>> id(3)

135072304

>>> id(a)

135072304

>>> b = a

>>> id(b)

135072304

a, b 3이 모두 같은 객체를 가리키고 있음을 보여 준다.


4
는 다른 객체이므로 당연히 id(4)는 다른 값을 보여 준다.

>>> id(4)

135072292

 

 

input

 

input([prompt])은 사용자 입력을 받는 함수이다. raw_input과 다른 점에 대해서는 "입력과 출력" 챕터에 설명되어 있다.
입력 인수로 문자열을 주면 아래의 세번째 예에서 보듯이 그 문자열은 프롬프트가 된다.

>>> a = input()

'hi'

>>> a

'hi'

>>> b = input("Enter: ")

Enter: 'hi'


위에서 입력 받은 문자열을 확힌해 보면 다음과 같다.

>>> b

'hi'

 

 

int

 

int(x)는 스트링 형태의 숫자나 소수점 숫자 등을 정수의 형태로 반환시켜 돌려준다. 정수를 입력으로 받으면 그대로 돌려준다.

>>> int('3')

3

>>> int(3.4)

3

int(x, radix) x라는 문자열을 radix(진수)형태로 계산한 값을 리턴한다.


'11'
이라는 이진수 값에 대응되는 십진수 값은 다음과 같이 구한다.

>>> int('11', 2)

3


'1A'
라는 십육신수 값에 대응되는 십진수 값은 다음과 같이 구한다.

>>> int('1A', 16)

26

 

 

isinstance

 

isinstance(object, class)는 입력값으로 인스턴스와 클래스 이름을 받아서 입력으로 받은 인스턴스가 그 클래스의 인스턴스인지를 판단하여 참이면 True, 거짓이면 False를 반환한다.

>>> class Person: pass

. . .

>>> a = Person()

>>> b = 3

>>> isinstance(a, Person)

True


위의 예는 a Person 클래스에 의해서 생성된 인스턴스임을 확인시켜 준다.

>>> isinstance(b, Person)

False

b Person 클래스에 의해 생성된 인스턴스가 아니다.

 

 

lambda

 

lambda는 함수를 생성할 때 사용되는 예약어로 def와 동일하나 보통 한줄로 간결하게 만들어 사용할 때 사용한다. lambda는 “람다”라고 읽으며 보통 def를 쓸 정도로 복잡하지 않거나 def를 쓸 수 없는 곳에 쓰인다. lambda는 다음과 같이 정의된다.

 

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


한 번 만들어 보자.

>>> sum = lambda a, b: a+b

>>> sum(3,4)

7


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

>>> def sum(a, b):

. . .     return a+b

. . .

>>> 


그렇다면 def가 있는데 왜 lambda라는 것이 나오게 되었을까? 이유는 간단하다. lambda def 대신 간결하게 사용할 수 있고 def로 쓸 수 없는 곳에 lambda는 쓰일 수 있기 때문이다. 리스트 내에 lambda가 들어간 경우를 살펴보자.

>>> l = [lambda a,b:a+b, lambda a,b:a*b]

>>> l

[at 0x811eb2c>, at 0x811eb64>]


즉 리스트 각각의 요소에 lambda 함수를 만들어 쓸 수 있다. 첫 번째 요소 l[0]은 두개의 입력값을 받아서 합을 돌려주는 lambda 함수이다.

>>> l[0]

at 0x811eb2c>

>>> l[0](3,4)

7


두 번째 요소 l[1]은 두개의 입력값을 받아서 곱을 돌려주는 lambda 함수이다.

>>> l[1](3,4)

12

프로그래밍을 하다 보면 lambda 함수의 사용용도는 무궁무진함을 알게 될 것이다.

 

 

len

 

len(s)은 인수로 시퀀스 자료형(문자열, 리스트, 터플)을 입력받아 그 길이(요소의 개수)를 돌려주는 함수이다.

>>> len("python")

6

>>> len([1,2,3])

3

>>> len((1, 'a'))

2

 

 

list

 

list(s)는 인수로 시퀀스 자료형을 입력받아 그 요소를 똑같은 순서의 리스트로 만들어 돌려주는 함수이다. 리스트를 입력으로 주면 똑같은 리스트를 복사하여 돌려준다.

>>> list("python")

['p', 'y', 't', 'h', 'o', 'n']  #리스트

>>> list((1,2,3))

[1, 2, 3]

>>> a = [1,2,3]  #리스트

>>> b = list(a)

>>> b

[1, 2, 3]

>>> id(a)

9164780

>>> id(b)

9220284

List(a)는 리스트를 복사해서 다른 리스트를 돌려주는 것을 위의 예에서 확인할 수 있다. a b id값이 서로 다르다.

 

 

long

 

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

>>> long('34567890')

34567890L

>>> long(34567890)

34567890L

 

 

map

 

map이라는 것은 함수와 시퀀스 자료형(리스트, 터플, 문자열)을 입력으로 받아서 시퀀스 자료형의 각각의 요소가 함수의 입력으로 들어간 다음 나오는 출력값을 묶어서 리스트로 돌려주는 함수이다.


다음의 함수를 보자.

def two_times(l):

    result = []

    for i in l:

        result.append(i*2)

    return result

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


다음과 같이 쓰일 것이다.

# two_times.py

def two_times(l):

    result = []

        for i in l:

            result.append(i*2)

    return result

 

result = two_times([1,2,3,4])

print result

결과값: [2, 4, 6, 8]


이것을 다음과 같이 해보자.

>>> def two_times(x): return x*2

. . .

>>> map(two_times, [1,2,3,4])

[2, 4, 6, 8]

map이란 함수는 입력값으로 함수명과 그 함수에 들어갈 인수로 리스트 등의 시퀀스 자료형을 받는다. 이것은 다음과 같이 해석된다. 리스트의 첫 번째 요소인 1 two_times 함수의 입력값으로 들어가서 1 * 2의 과정을 거쳐 2의 값이 결과값 리스트 []에 추가된다. 이 때 결과값은 [2]가 되고, 다음에 리스트의 두 번째 요소인 2 two_times 함수의 입력값으로 들어가서 4가 된 다음 이 값이 또 결과값인 [2]에 추가되어 결과값은 [2, 4]가 된다. 4개의 요소값이 반복되면 결과값은 [2, 4, 6, 8]이 될 것이고 더 이상의 입력값이 없으면 최종 결과값인 [2, 4, 6, 8]을 돌려준다. 이것이 map 함수가 하는 일이다. map은 결과 값으로 리스트를 리턴한다.


위의 예는 lambda를 쓰면 다음처럼 간략화된다.

>>> map(lambda a: a*2, [1,2,3,4])

[2, 4, 6, 8]


[map
을 이용해서 리스트의 값을 1씩 추가하는 예]

# map_test.py

def plus_one(x):

    return x+1

print map(plus_one, [1,2,3,4,5])

결과값: [2,3,4,5,6]

 

 

max

 

max(s)는 인수로 시퀀스 자료형(문자열, 리스트, 터플)을 입력받아 그 최대값을 돌려주는 함수이다.

>>> max([1,2,3])

3

>>> max("python")

'y'

 

 

min

 

min(s) max와는 반대로 시퀀스 자료형을 입력받아 그 최소값을 돌려주는 함수이다.

>>> min([1,2,3])

1

>>> min("python")

'h'

 

 

oct

 

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

>>> oct(34)

'042'

>>> oct(12345)

'030071'

 

 

open

 

open(filename, [mode])은 파일 이름과 읽기 방법을 입력받아 파일 객체를 돌려주는 함수이다. 읽기 방법(mode)이 생략되면 기본적으로 읽기 전용 모드('r')로 파일객체를 만들어 돌려준다. 그 외에 더 자세한 사항은 라이브러리 레퍼런스를 참조하자.

mode

설명

w

쓰기 모드로 파일 열기

r

읽기 모드로 파일 열기

a

추가 모드로 파일 열기

b

바이너리 모드로 파일 열기

w+, r+, a+ 는 파일을 업데이트할 용도로 사용된다.


b
w, r, a와 함께 사용된다.

>>> f = open("binary_file", "rb")

>>> fwrite = open("write_mode.txt", 'w')

>>> fread = open("read_mode.txt", 'r')

>>> fread2 = open("read_mode.txt")

fread fread2는 동일한 값을 나타낸다. , 읽기모드 부분이 생략되면 기본값으로 'r'을 갖게 된다.


다음은 추가 모드로 파일을 여는 예이다.

>>> fappend = open("append_mode.txt", 'a')

 

 

ord

 

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

>>> ord('a')

97

>>> ord('0')

48

 

 

pow

 

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

>>> pow(2, 4)

16

>>> pow(3, 3)

27

 

 

range

 

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


인수가 하나일 경우

>>> range(5)

[0, 1, 2, 3, 4]


인수가 두 개일 경우 (입력으로 주어지는 두 개의 숫자는 시작과 끝을 나타낸다. 끝번호가 포함이 안된다는 것에 주의 하자. )

>>> range(5, 10)

[5, 6, 7, 8, 9]


인수가 세 개일 경우 - 세 번째 인수는 시작번호부터 끝번호까지 가는데 숫자 사이의 거리를 말한다.

>>> range(1, 10, 2)

[1, 3, 5, 7, 9]

>>> range(0, -10, -1)

[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

 

 

raw_input

 

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

>>> a = raw_input()

you need python

>>> a

'you need python'

>>> b = raw_input("--->")

--->you need python

>>> b

'you need python'

이미 설명했던 입출력 부분에 input raw_input에 대한 설명을 하였다.

 

 

reduce

 

reduce(function, sequence) 이것은 인수를 두 개 받는 함수인 function과 시퀀스 자료형을 인수로 입력받아서 시퀀스 요소의 왼쪽부터 차례대로 끝까지 감소시키며 입력받은 함수를 실행시키는 함수이다.

# reduce1.py

def test(x, y):

    return x+y

 

def test2(x, y):

    return x*y

 

print reduce(test, [1,2,3,4,5])

print reduce(test2, [1,2,3,4,5])

결과값:

15
120


reduce(test, [1,2,3,4,5])
가 적용되는 과정은 다음과 같다.
((((1+2)+3)+4)+5)


reduce(test2, [1,2,3,4,5])
가 적용되는 과정은 다음과 같다.
((((1*2)*3)*4)*5)

 

 

reload

 

reload(module)는 이미 불러왔던(import) 모듈을 다시 부르는 함수로 모듈 객체를 돌려준다. 외부 에디터로 다음을 작성해 보자.

# test.py

def a():

    print "life is too short"


다음에 대화형 인터프리터에서 이 모듈을 불러보자.

>>> import test

>>> test.a()

'life is too short'


대화형 인터프리터를 닫지 말고 외부 에디터로 test.py 파일을 바꾸어보자.

#test.py

def a():

    print "you need python"


다음에 다시 대화형 인터프리터에서 다음과 같이 해보자.

>>> test.a()

'life is too short'

>>> reload(test)

>>> test.a()

'you need python'

, 위의 경우처럼 이미 불러온 모듈을 수정한 다음 바뀐 내용을 적용하고 싶을 때 주로 사용하게 된다.

 

 

repr

 

repr(object)은 객체를 출력할 수 있는 문자열 형태로 변환하여 돌려주는 함수이다. 이 변환된 값은 주로 eval 함수의 입력으로 쓰인다. str 함수와의 차이점이라면 str으로 변환된 값은 eval의 입력값이 될 수 없는 경우가 있다는 것이다.

>>> repr("hi".upper())

"'HI'"

>>> eval(repr("hi".upper()))

'HI'

>>> eval(str("hi".upper()))

Traceback (innermost last):

File "", line 1, in ? eval(str("hi".upper()))

File "", line 0, in ?

NameError: There is no variable named 'HI'

위의 경우처럼 str을 쓸 경우 eval 함수의 입력값이 될 수 없는 경우가 있다.

 

 

sorted

 

sorted 함수는 입력으로 받은 시퀀스 자료형을 소트한 후 그 결과를 리스트로 리턴하는 함수이다.

>>> sorted([3,1,2])

[1, 2, 3]

>>> sorted(['a','c','b'])

['a', 'b', 'c']

>>> sorted("zero")

['e', 'o', 'r', 'z']

>>> sorted((3,2,1))

[1, 2, 3]

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


다음의 예제로 sorted와 리스트 자료형의 sort함수와의 차이점을 확인해 보자.

>>> a = [3,1,2]

>>> result = a.sort()

>>> print result

None

>>> a

[1, 2, 3]

 

 

str

 

str(object)객체를 출력할 수 있는 문자열 형태로 변환하여 돌려주는 함수이다. 단 문자열 그 자체로만 돌려주는 함수이다. 위의 repr함수와의 차이점을 살펴보자.

>>> str(3)

'3'

>>> str('hi')

'hi'

>>> str('hi'.upper())

'HI' 

 

 

tuple

 

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

>>> tuple("abc")

('a', 'b', 'c')

>>> tuple([1,2,3])

(1, 2, 3)

>>> tuple((1,2,3))

(1, 2, 3)

 

 

type

 

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

>>> type("abc")

>>> type([])                      

>>> type(open("test", 'w'))

마지막 예에서 볼 수 있듯이 파일을 쓰기 모드로 연 객체의 자료형은 'file'임을 알 수 있다.

 

 

zip

zip 함수는 동일한 갯수의 요소값을 갖는 시퀀스 자료형을 묶어주는 역할을 한다. 예제로 확인해 보자.

>>> zip([1,2,3], [4,5,6])

[(1, 4), (2, 5), (3, 6)]

>>> zip([1,2,3], [4,5,6], [7,8,9])

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

>>> zip("abc", "def")

[('a', 'd'), ('b', 'e'), ('c', 'f')]

출처 : wikidocs 점프 투 파이썬

댓글