<출처> http://www.dreamy.pe.kr/zbxe/CodeClip/165016
이제 우리는 파이썬에 대한 대부분의 것들을 알게 되었다. 이제 여러분은 자신이 원하는 프로그램을 직접 만들어볼 수 있을 것이다. 하지만 무엇인가를 만들기 전에 살펴보아야 할 것이 있다. 그것은 자신이 만들려는 프로그램을 이미 누군가가 만들어 놓았을지도 모른다는 사실이다.
물론 공부를 목적으로 누군가가 만들어 놓은 프로그램을 또 만들 수는 있지만 그런 목적이 아니라면 이미 만들어진 것을 다시 만드는 것은 어리석은 행동일 것이다. 그리고 이미 만들어진 것들은 테스트과정을 무수히 거친 훌륭한 것들이기도 하다. 따라서 무엇인가 새로운 프로그램을 만들기 전에 이미 만들어진 것들, 그 중에서도 특히 파이썬 배포본에 함께 들어 있는 파이썬 라이브러리들에 대해서 살펴보는 것은 매우 중요한 일일 것이다.
파이썬 라이브러리는 매우 광범위하고 훌륭한 것들이다. 이 책에서는 모든 라이브러리들을 살펴볼 수는 없고 자주 쓰이는 유용한 것들에 대해서만 다루기로 한다. 우선 라이브러리들을 살펴보기 전에 파이썬 내장함수를 먼저 보도록 하자.
우리는 이미 몇 가지의 내장 함수들을 사용해 왔다. 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)
chr
chr(i)는 정수 형태의 아스키코드값을 입력으로 받아서 그에 해당하는 문자를 출력하는 함수이다.
>>> chr(97)
'a'
>>> chr(48)
'0'
>>>
dir
dir은 객체가 가지고 있는 변수나 함수를 리스트 형태로 보여준다. 아래의 예는 리스트와 딕셔너리 객체의 관련 함수들(메소드)을 보여주는 예이다. 우리가 앞서서 살펴보았던 관련함수들을 구경할 수 있을 것이다.
>>> dir([1,2,3])
['append', 'count', 'extend', 'index', 'insert', 'pop',...]
>>> dir({'1':'a'})
['clear', 'copy', 'get', 'has_key', 'items', 'keys',...]
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)
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(list(filter(positive, [1,-3,2,0,-5,6])))
결과값: [1, 2, 6]
filter 함수는 첫 번째 인수로 함수명을, 두 번째 인수로는 그 함수에 차례로 들어갈 시퀀스 자료형(리스트, 터플, 문자열)을 받는다. filter 함수는 두 번째 인수인 각 리스트의 요소들이 첫 번째 인수인 함수에 들어갔을 때 리턴값이 참인 것만을 리스트로 묶어서 돌려준다. 위의 예에서는 1, 2, 6 만이 양수로 x > 0 이라는 문장이 참이 되므로 [1, 2, 6]이라는 결과 값을 돌려주게 된다.
lambda를 쓰면 더욱 간편하게 쓸 수 있다. (lambda함수는 잠시 후에 설명한다.)
>>> print(list(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])은 사용자 입력을 받는 함수이다.
입력 인수로 문자열을 주면 아래의 세번째 예에서 보듯이 그 문자열은 프롬프트가 된다.
>>> a = input()
hi
>>> a
'hi'
>>> b = input("Enter: ")
Enter: hi
위에서 입력 받은 문자열을 확힌해 보면 다음과 같다.
>>> b
'hi'
※ 파이썬 2.7 버전의 경우 위 예제의
input
대신raw_input
으로 사용해야 한다. (참고: 파이썬 2.7 vs 파이썬 3)
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값이 서로 다르다.
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
. . .
>>> list(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 함수가 하는 일이다.
위의 예는 lambda를 쓰면 다음처럼 간략화된다.
>>> list(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(list(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)
'0o42'
>>> oct(12345)
'0o30071'
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문과 잘 사용되는 것으로 인수로 정수값을 주어 그 숫자에 해당되는 범위의 값을 iteratable의 형태로 돌려주는 함수이다.
인수가 하나일 경우
>>> list(range(5))
[0, 1, 2, 3, 4]
인수가 두 개일 경우 (입력으로 주어지는 두 개의 숫자는 시작과 끝을 나타낸다. 끝번호가 포함이 안된다는 것에 주의 하자. )
>>> list(range(5, 10))
[5, 6, 7, 8, 9]
인수가 세 개일 경우 - 세 번째 인수는 시작번호부터 끝번호까지 가는데 숫자 사이의 거리를 말한다.
>>> list(range(1, 10, 2))
[1, 3, 5, 7, 9]
>>> list(range(0, -10, -1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
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'))
zip
zip 함수는 동일한 갯수의 요소값을 갖는 시퀀스 자료형을 묶어주는 역할을 한다. 예제로 확인해 보자.
>>> list(zip([1,2,3], [4,5,6]))
[(1, 4), (2, 5), (3, 6)]
>>> list(zip([1,2,3], [4,5,6], [7,8,9]))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> list(zip("abc", "def"))
[('a', 'd'), ('b', 'e'), ('c', 'f')]
'Python 기초' 카테고리의 다른 글
파이썬 터틀 그래픽 함수 (0) | 2016.12.30 |
---|---|
파이썬 터틀 그래픽 예제 1 (0) | 2016.12.30 |
파이썬 자료 구조를 위한 데이터 형 ( List, Tuple, Set, Dictionary ) (0) | 2016.12.28 |
파이썬 로또 번호 자동 생성 예제 (0) | 2016.12.26 |
파이썬 구구단 출력 예제 (0) | 2016.12.26 |