PYTHON. 05장 파이썬 날개달기. 05-5 내장 함수
PYTHON/CONCEPT 2018. 1. 8. 17:47 |PYTHON. 05장 파이썬 날개달기. 05-5 내장 함수
파이썬 내장 함수들은 외부 모듈과는 달리 import를 필요로 하지 않는다. 아무런 설정 없이 바로 사용할 수가 있다.
abs
// abs(x)는 어떤 숫자를 입력으로 받았을 때, 그 숫자의 절대값을 돌려주는 함수이다.
>>> abs(3) 3 >>> abs(-3) 3 >>> abs(-1.2) 1.2
all
// all(x)은 반복 가능한(iterable) 자료형 x를 입력 인수로 받으며, 이 x가 모두 참이면 True, 거짓이 하나라도 있 으면 False를 리턴한다.
// (※ 반복 가능한 자료형이란 for문으로 그 값을 출력할 수 있는 것을 의미한다. 리스트, 튜플, 문자열, 딕셔너리, 집합 등이 있다.)
>>> all([1, 2, 3]) True
// 리스트 자료형 [1, 2, 3]은 모든 요소가 참이므로 True를 리턴한다.
>>> all([1, 2, 3, 0]) False
// 리스트 자료형 [1, 2, 3, 0] 중에서 요소 0은 거짓이므로 False를 리턴한다.
(※ 자료형의 참과 거짓에 대해 잘 기억나지 않는다면 02-7절을 다시 한 번 읽어 보자.)
any
// any(x)는 x 중 하나라도 참이 있을 경우 True를 리턴하고, x가 모두 거짓일 경우에만 False를 리턴한다.
// all(x)의 반대 경우라고 할 수 있다.
>>> any([1, 2, 3, 0]) True
// 리스트 자료형 [1, 2, 3, 0] 중에서 1, 2, 3이 참이므로 True를 리턴한다.
* chr
// chr(i)는 아스키(ASCII) 코드값을 입력으로 받아 그 코드에 해당하는 문자를 출력하는 함수이다.
dir
dir은 객체가 자체적으로 가지고 있는 변수나 함수를 보여 준다. 아래 예는 리스트와 딕셔너리 객체의 관련 함수들(메서드)을 보여 주는 예이다. 우리가 02장에서 살펴보았던 자료형 관련 함수들을 만나볼 수 있을 것이다.
>>> dir([1, 2, 3]) ['append', 'count', 'extend', 'index', 'insert', 'pop',...] >>> dir({'1':'a'}) ['clear', 'copy', 'get', 'has_key', 'items', 'keys',...]
divmod
divmod(a, b)는 2개의 숫자를 입력으로 받는다. 그리고 a를 b로 나눈 몫과 나머지를 튜플 형태로 리턴하는 함수이다.
>>> divmod(7, 3) (2, 1) >>> divmod(1.3, 0.2) (6.0, 0.099999999999999978)
enumerate
// enumerate는 "열거하다"라는 뜻이다. 이 함수는 순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 리턴한다.
(※ 보통 enumerate 함수는 아래 예제처럼 for문과 함께 자주 사용된다.)
>>> for i, name in enumerate(['body', 'foo', 'bar']): ... print(i, name) ... 0 body 1 foo 2 bar
// 순서값과 함께 body, foo, bar가 순서대로 출력되었다. 즉, 위 예제와 같이 enumerate를 for문과 함께 사용하면 자료형의 현재 순서(index)와 그 값을 쉽게 알 수 있다.
// for문처럼 반복되는 구간에서 객체가 현재 어느 위치에 있는지 알려주는 인덱스 값이 필요할때 enumerate 함수를 사용하면 매우 유용하다.
eval
// eval(expression)은 실행 가능한 문자열(1+2, 'hi' + 'a' 같은 것)을 입력으로 받아 문자열을 실행한 결과값을 리턴하는 함수이다.
>>> eval('1+2') 3 >>> eval("'hi' + 'a'") 'hia' >>> eval('divmod(4, 3)') (1, 1)
// 보통 eval은 입력받은 문자열로 파이썬 함수나 클래스를 동적으로 실행하고 싶은 경우에 사용된다.
filter
filter란 무엇인가를 걸러낸다는 뜻으로, 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]
여기서는 두 번째 인수인 리스트의 요소들이 첫 번째 인수인 positive 함수에 입력되었을 때 리턴값이 참인 것만 묶어서 돌려준다. 앞의 예에서는 1, 2, 6만 양수여서 x > 0 이라는 문장이 참이 되므로 [1, 2, 6]이라는 결과값을 리턴하게 된 것이다.
앞의 함수는 lambda를 이용하면 더욱 간편하게 코드를 작성할 수 있다. lambda 함수는 조금 뒤에서 설명한다.
>>> print(list(filter(lambda x: x > 0, [1, -3, 2, 0, -5, 6])))
hex
// hex(x)는 정수값을 입력받아 16진수(hexadecimal)로 변환하여 리턴하는 함수이다.
>>> hex(234) '0xea' >>> hex(3) '0x3'
id
// id(object)는 객체를 입력받아 객체의 고유 주소값(레퍼런스)을 리턴하는 함수이다.
>>> a = 3 >>> id(3) 135072304 >>> id(a) 135072304 >>> b = a >>> id(b) 135072304
// 위 예의 3, a, b는 고유 주소값이 모두 135072304이다. 즉, 3, a, b가 모두 같은 객체를 가리키고 있음을 알 수 있다.
// 만약 id(4)라고 입력하면 4는 3, a, b와 다른 객체이므로 당연히 다른 고유 주소값이 출력된다.
>>> id(4) 135072292
input
// input([prompt])은 사용자 입력을 받는 함수이다.
// 입력 인수로 문자열을 주면 아래의 세 번째 예에서 볼 수 있듯이 그 문자열은 프롬프트가 된다.
(※ [ ] 기호는 괄호 안의 내용을 생략할 수 있다는 관례적인 표기법임을 기억하자.)
>>> 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)는 radix 진수로 표현된 문자열 x를 10진수로 변환하여 리턴한다.
// 2진수로 표현된 '11'의 10진수 값은 다음과 같이 구한다.
>>> int('11', 2) 3
// 16진수로 표현된 '1A'의 10진수 값은 다음과 같이 구한다.
isinstance
// isinstance(object, class)는 첫 번째 인수로 인스턴스, 두 번째 인수로 클래스 이름을 받는다. 입력으로 받은 인스턴스가 그 클래스의 인스턴스인지를 판단하여 참이면 True, 거짓이면 False를 리턴한다.
>>> class Person: pass ... >>> a = Person() >>> isinstance(a, Person) True
// 위의 예는 a가 Person 클래스에 의해서 생성된 인스턴스임을 확인시켜 준다.
// b는 Person 클래스에 의해 생성된 인스턴스가 아니므로 False를 리턴한다.
lambda
// lambda는 함수를 생성할 때 사용하는 예약어로, def와 동일한 역할을 한다.
// 보통 함수를 한줄로 간결하게 만들 때 사용한다.
// 우리말로는 "람다"라고 읽고 def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 쓰인다.
// 사용법은 다음과 같다.
lambda 인수1, 인수2, ... : 인수를 이용한 표현식
// lambda를 이용한 sum 함수는 인수로 a, b를 받아 서로 더한 값을 돌려준다.
// 위의 예제는 def를 사용한 아래 함수와 하는 일이 완전히 동일하다.
>>> def sum(a, b): ... return a+b ... >>>
// 그렇다면 def가 있는데 왜 lambda라는 것이 나오게 되었을까? 이유는 간단하다.
// lambda는 def 보다 간결하게 사용할 수 있기 때문이다. 또한 lambda는 def를 사용할 수 없는 곳에도 사용할 수 있다. 다음 예제에서 리스트 내에 lambda가 들어간 경우를 살펴보자.
>>> myList = [lambda a,b:a+b, lambda a,b:a*b] >>> myList [at 0x811eb2c>, at 0x811eb64>]
// 즉, 리스트 각각의 요소에 lambda 함수를 만들어 바로 사용할 수 있다. 첫 번째 요소 myList[0]은 2개의 입력값을 받아 두 값의 합을 돌려주는 lambda 함수이다.
// 두 번째 요소 myList[1]은 2개의 입력값을 받아 두 값의 곱을 돌려주는 lambda 함수이다.
>>> myList[1](3,4) 12
// 파이썬에 익숙해질수록 lambda 함수가 굉장히 편리하다는 사실을 알게 될 것이다.
* len
// len(s)은 입력값 s의 길이(요소의 전체 개수)를 리턴하는 함수이다.
>>> len("python") 6 >>> len([1,2,3]) 3 >>> len((1, 'a')) 2
list 함수에 리스트를 입력으로 주면 똑같은 리스트를 복사하여 돌려준다.
>>> list("python") ['p', 'y', 't', 'h', 'o', 'n'] >>> list((1,2,3)) [1, 2, 3]
map
// map(f, iterable)은 함수(f)와 반복 가능한(iterable) 자료형을 입력으로 받는다. map은 입력받은 자료형의 각 요소가 함수 f에 의해 수행된 결과를 묶어서 리턴하는 함수이다.
# two_times.py def two_times(numberList): result = [ ] for number in numberList: result.append(number*2) return result result = two_times([1, 2, 3, 4]) print(result)
// two_times 함수는 리스트 요소를 입력받아 각 요소에 2를 곱한 결과값을 돌려준다. 실행 결과는 다음과 같다.
결과값: [2, 4, 6, 8]
위의 예제는 map 함수를 이용하면 다음처럼 바꿀 수 있다.
>>> def two_times(x): return x*2 ... >>> list(map(two_times, [1, 2, 3, 4])) [2, 4, 6, 8]
// 이제 앞 예제를 해석해 보자. 먼저 리스트의 첫 번째 요소인 1이 two_times 함수의 입력값으로 들어가고, 1 * 2의 과정을 거쳐서 2가 된다. 다음으로 리스트의 두 번째 요소인 2가 2 * 2의 과정을 거쳐 4가 된다. 따라서 결과값 리스트는 이제 [2, 4]가 된다. 총 4개의 요소값이 모두 수행되면 최종적으로 [2, 4, 6, 8]이 리턴된다. 이것이 map 함수가 하는 일이다.
// 앞의 예는 lambda를 사용하면 다음처럼 간략하게 만들 수 있다.
>>> list(map(lambda a: a*2, [1, 2, 3, 4])) [2, 4, 6, 8]
// map 함수 예를 하나 더 살펴보자.
# 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]
// 위 예는 map과 plus_one 함수를 이용하여 리스트의 각 요소값을 1씩 증가시키는 예제이다.
max
max(iterable)는 인수로 반복 가능한 자료형을 입력받아 그 최대값을 리턴하는 함수이다.
>>> max([1, 2, 3]) 3 >>> max("python") 'y'
min
min(iterable)은 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 | 바이너리 모드로 파일 열기 |
b는 w, r, a와 함께 사용된다.
>>> f = open("binary_file", "rb")
// 위 예의 rb는 "바이너리 읽기 모드"를 의미한다.
// 아래 예의 fread와 fread2는 동일한 방법이다.
>>> fread = open("read_mode.txt", 'r') >>> fread2 = open("read_mode.txt")
// 즉, 모드 부분이 생략되면 기본값으로 읽기 모드인 r을 갖게 된다.
// 다음은 추가 모드(a)로 파일을 여는 예이다.
>>> fappend = open("append_mode.txt", 'a')
ord
ord(c)는 문자의 아스키 코드값을 리턴하는 함수이다.
(※ ord 함수는 chr 함수와 반대이다.)
>>> 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 함수는 0부터 시작한다.
>>> list(range(5)) [0, 1, 2, 3, 4]
인수가 2개일 경우
// 입력으로 주어지는 2개의 인수는 시작 숫자와 끝 숫자를 나타낸다. 단, 끝 숫자는 해당 범위에 포함되지 않는다는 것에 주의하자.
>>> list(range(5, 10)) [5, 6, 7, 8, 9]
인수가 3개일 경우
// 세 번째 인수는 숫자 사이의 거리를 말한다.
>>> 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]
sorted
// sorted(iterable) 함수는 입력값을 정렬한 후 그 결과를 리스트로 리턴하는 함수이다.
>>> 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() // 리스트 자료형의sort 함수 >>> print(result) None >>> a [1, 2, 3]
// sort 함수는 리턴값이 없기 때문에 result 변수에 저장되는 값이 없다.
// 따라서 print(result)를 하면 None이 출력된다.
// sort 함수를 수행한 후 리턴값은 없지만 리스트 객체 a를 확인하면 [3, 1, 2]가 [1, 2, 3]으로 정렬된 것을 볼 수 있다.
str
str(object)은 문자열 형태로 객체를 변환하여 리턴하는 함수이다.
>>> str(3) '3' >>> str('hi') 'hi' >>> str('hi'.upper()) 'HI'
tuple
// tuple(iterable)은 반복 가능한 자료형을 입력받아 튜플 형태로 바꾸어 리턴하는 함수이다.
// 만약 튜플이 입력으로 들어오면 그대로 리턴한다.
type
// type(object)은 입력값의 자료형이 무엇인지 알려주는 함수이다.
>>> type("abc") <class 'str'> >>> type([ ]) <class 'list'> >>> type(open("test", 'w')) <class '_io.TextIOWrapper'>
zip
// zip(iterable*)
은 동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수이다
>>> 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 > CONCEPT' 카테고리의 다른 글
PYTHON. 06장 파이썬 프로그래밍, 어떻게 시작해야 할까?. 06-1 내가 프로그램을 만들 수 있을까? (0) | 2018.01.09 |
---|---|
PYTHON. 05장 파이썬 날개달기. 05-6 외장 함수 (0) | 2018.01.09 |
PYTHON. 05장 파이썬 날개달기. 05-4 예외 처리 (0) | 2018.01.08 |
PYTHON. 05장 파이썬 날개달기. 05-3 패키지 // 수정 (0) | 2018.01.08 |
PYTHON. 05장 파이썬 날개달기. 05-2 모듈 (0) | 2018.01.08 |