[이솦] 파이선으로 배우는 AI 기초 11
- 파이썬에서 사용자 정의 함수와 내장 함수에 대한 개념을 설명한다.
- enumerate(), map(), zip() 등의 내장 함수 사용법을 소개한다.
- 모듈의 개념과 내장 모듈 및 외장 모듈의 차이를 설명하고, import 방법을 알려준다.
지금까지 사용자 정의 함수에 대해서 공부했다. 함수는 아주 중요한 프로그래밍의 자료이다. 프로그램의 모든 것은 함수라고 해도 과언이 아니다. 인공지능 프로그램에서 파이썬을 많이 사용한다는 것은 전세계의 개발자가 함께 다양한 종류의 함수를 개발했다는 것이다. 내부 함수도 중요하지만, 외부 개발자들인 만든 모듈이 많이 있고, 매우 중요하다.
pypi.org 사이트에 가면 많은 라이브러리가 있다. 파이썬이 개발 될때에 내부에 있던 함수들이 있다. 이것을 내장 함수라고 한다. 파이썬은 기본 내장 함수 말고도 내장 모둘도 있다. 내장 모듈은 추가적인 설치 없이 불러와서 사용할수 있는 모듈이다. 모듈은 어려개의 함수를 포함하고 있다.
내장함수
함수에는 두가지 종류가 있다
사용자의 필요에 따라서 만들어 사용하는 사용자 정의 함수
파이썬에서 미리 만들어서 제공하는 내장 함수
내장 함수는 매개변수나 리턴값의 여부에 따라서 사용 규칙이 다르다. 따라서 각 함수에 맞는 사용 규칙에 따라호출해야 된다. 내장 함수는 많은데 그중의 몇가지 사용법을 알아보자.
enumerate() 함수
매개별수소 iterable, start의 매개변수를 받는 것으로 사용한다.
iterable: 반복해서 출력할수 있는 즉 여러 개의 요소를 가진 컨테이너 자료형을 의미한다. 자료를 주고 시작 위치를 정하면 자동으로 번호를 생성해 주는 기능이다.
friends = ['뽀로로', '에디', '루피', '포비']
for i in enumerate(friends):
print(i)
프렌드 라는 리스트에 함수를 사용해서 각각의 요소에 번호를 붙여서 출력한다.
map() 함수
반복문을 사용하지 않고도 컨테이너 자료형의 요소를 특정 함수에 한개씩 입력한 후, 그 함수의 실행 리턴값을 받아 다시 컨테이너 자료형으로 리턴하는 함수이다.
def plus(num1):
total = num1 + 2
return total
list_a = [1, 2, 3, 4]
result = map(plus, list_a) #map()을 이용해서 plus()함수에 list_a 요소 전달
print(list(result))
plus 라는 함수는 값을 받는다. 받은 값에 2를 더해서 리턴한다. map 함수는 plus 라는 사용자 지정함수에 list의 값을 불러와서 하나씩 넣고 결과를 다시 result라는 리스트로 만들고 출력한다.
map함수의 특징은 함수와 연결해서 사용 한다. 내장 함수를 쓰지 않고도 코드는 만들수 있다. 코드가 매우 길어지고 어차피 내장 함수를 써야 한다. 따라서 적절하게 내장함수를 쓰면 유용하다.
zip() 함수
두개 이상의 컨테이너 자료형의 요소를 묶어 튜플 형태로 출력해 준다.
zip(컨테이너 자료형 여러개 입력) 결과적으로는 튜플 형태로 저장된 자료의 형태를 튜플 형태로 출력해 준다.
x = [1, 2, 3, 4]
y = (5,6,7,8)
z = {'a':1, 'b':2, 'c':3, 'd':4}
for result in zip(x, y, z):
print(result)
x는 리스트, y는 튜플, z는 딕셔너리 이다. zip을 쓰면 딕셔너리의 key값을 가져오게 된다. zip함수의 출력을 튜플로 저장된다.
모듈
내장함수와 같은 개념으로 함수를 여러개 모아 놓은 것을 모듈이라고 한다. 모듈은 그안에 여러개의 함수가 들어 있다고 생각하면 된다.
모듈을 공부할때 꼭 배워야 하는 것은 import 이다. 모듈을 사용할때 import라는 명령어를 사용한다. 모듈은 내장 모듈과 외장 모듈이 있다. 내장 모듈은 따로 설치할 필요가 없다. 외장은 따로 설치해야 된다.
import os
from os import *
import 를 사용하는 것은 똑같다. import로 추가한 모듈 안의 함수를 사용하는 방법은 모듈명. 함수명 ()으로 하고, from를 사용하면 바로 함수명()으로 사용한다. 이렇게 하면 os안의 모든 함수를 가져오는 것이다.
내장 모듈중 하나를 써보자. 난수를 발생시키는 random모듈을 이용하려면 먼저 import를 해보자.
import random
num = random.randint(1, 10)
print(num)
random모듈에는 많은 함수가 있으며 그중 정수형 난수를 발생시키는 randint() 함수가 있다. 정해진 범위내에서 무작위로 추출된 수를 표시한다. 이걸 이용하면 일정 간격에 있는 정수를 난수로 발생시킬수 있다.
zip() 내장 함수는 실제 머신러닝 코드에서 많이 쓰인다. zip() 함수를 사용하면 두 리스트의 값을 하나로 묶어 줄수 있다.
실습
import random
num = random.randint(0, 5)
food_list = ['떡볶이', '햄버거', '된장찌개', '김치찌개', '돈까스', '두부김치' ]
print("오늘 펭수가 먹을 저녁은 %s 입니다." %food_list[num])
음식 리스트를 6개를 만들고 랜덤으로 하게 하자. 6개라서 범위가 0-5번이다.
파이썬은 엄청나게 많은 내장 함수와 내장 모듈을 가지고 있다. 더 많은 외장도 있다. 파이썬의 힘은 외장 함수에서 나오는것 같다.