내장함수(Built-in function)

Don’t Reinvent The Wheel (이미 있는 것을 다시 만드느라 쓸데없이 시간을 낭비하지 말라)

이미 잘 만들어놓고 검증까지 해놓은 프로그램(소스코드)를 다시 만드는 것은 불필요한 행동이다.
파이썬에서는 중요한 역할을 하는 몇가지 함수들을 이미 만들어 놓았다.
이런 함수들은 import구문을 쓰지 않고 그냥 바로 사용할 수 있다.
이러한 함수들을 내장함수(Built-in function) 라고 한다.
Python3 built-in function documentary 참고

여기서는 쉽고 자주 사용되는 것들을 위주로 알아보자

1-1 abs, max, min, pow, round, len, sum, sorted, reversed

>>> abs(-1) # 절댓값(absolute)
1
>>> max([1, 3, 2, 5]) # 최댓값
5
>>> min([1, 3, 2, 5]) # 최솟값
1
>>> pow(3, 2) # power
9
>>> round(5.43, 1) # 소수점 첫째자리 까지 반올림
5.4
>>> len([1, 2, 4, 5, 3]) # 요소의 갯수
5
>>> sum([1, 2, 3, 4, 5]) # 요소의 합
15
>>> sorted([1, 5, 2, 3]) # 정렬
[1, 2, 3, 5]
>>> reversed([1, 5, 2, 3]) # 뒤집기
[3, 2, 5, 1]

1-2 list, str, tuple, dict, set, bin, oct, hex, int, float, bool

>>> a = list('car') # iterable한 객체가 인자로 받아서 list로 형변환
>>> a
['c', 'a', 'r']
>>> bin(5)
'0b101'
>>> int('0b101', 2) # x진수로 표현된 값을 갖는 문자열과 x를 입력해주면 그에 맞는 10진수 정수로 변환해준다.
5

>>> bool(1)
True
>>> bool(0)
False
>>> bool("False")
True
>>> bool(False)
False
>>> bool([1, 2, 0])
True
>>> bool([0, 0, 0])
True
>>> bool("")
False

1-3 map, filter, zip, enumerate, range

- map(function, iterable)

iterable에 있는 모든 요소를 function에 적용하고 그 결과를 돌려주는 iterator를 돌려준다

  >>> map(lambda x: x**2, [1, 2, 3])
  <map at 0x23645348608>
  >>> list(map(lambda x: x**2, [1, 2, 3]))
  [1, 4, 9]

- filter(function, iterable)

iterable에 있는 요소들을 function에 넣었을 때 결과값이 나오고 그 결과값을 bool()에 넣었을 때 참이 나오는 iterable 요소들만 돌려주는 iterator를 돌려준다.


  >>> list(filter(lambda x: x, [0, 1, 2, 3]))
    [1, 2, 3]
  

  >>> list(filter(lambda x: True, [0, 1, 2, 3]))
    [0, 1, 2, 3]
  

  >>> list(filter(lambda x: x>1, [0, 1, 2, 3]))
    [2, 3]
  

  >>> list(filter(lambda x: len(x)>3, ['car', 'banana', 'apple']))
    ['banana', 'apple']

- zip(iterable, iterable, …)

  >>> list(zip([1, 2, 3], ['하나', '둘', '셋'], ['one', 'two', 'three']))
  [(1, '하나', 'one'), (2, '둘', 'two'), (3, '셋', 'three')]

  >>> list(zip([1, 2, 3], ['하나', '둘', '셋'], ['one', 'two']))
  [(1, '하나', 'one'), (2, '둘', 'two')]

- enumerate(iterable)

  >>> list(enumerate(['apple', 'banana', 'lemon']))
  [(0, 'apple'), (1, 'banana'), (2, 'lemon')]
  >>> list(enumerate(['apple', 'banana', 'lemon'], start = 1))
  [(1, 'apple'), (2, 'banana'), (3, 'lemon')]

- range

제너레이터의 방식을 활용하는 대표적인 함수(함수 안에 yield문이 있다)로 range()함수를 사용하면 range클래스 객체를 리턴합니다. range() 함수가 제너레이터 방식을 활용하기 때문에 range클래스 객체 안에도 분명 yield문이 있을 것입니다.

>>> range(5)
range(0, 5)

>>> type(range(5))
<class 'range'>

>>> list(range(5))
[0, 1, 2, 3, 4]

# for 문에서 사용할 경우 내부적으로 next메소드 호출
>>> for i in range(5):
      print(i, end=' ')
0 1 2 3 4
>>> a = [n for n in range(1000000)]
>>> b = range(1000000)

>>> sys.getsizeof(a)
8697464

sys.getsizeof(b)
48

1-4 input, print, open

- open(name, mode)

파일(name)을 열고 파일 객체를 돌려준다

  >>> open("hi.txt")
  <_io.TextIOWrapper name='hi.txt' mode='r' encoding='cp949'>

1-5 help, dir, id, type

- help()

  def good():
      """인사하는 함수"""
      print("안녕")

  >>> help(good)
  Help on function good in module __main__:
  good()
      인사하는 함수

- dir()

객체가 가지고 있는 변수나 메소드를 출력한다

>>> a = [1, 2, 3]
>>> dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__',   
'__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__',  
'__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__',  
  '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

- id()

객체를 입력받아 객체의 고유 주소 값(레퍼런스)을 돌려주는 함수이다.

- type()

객체의 자료형을 알려준다.

1-6 isinstance, issubclass

- isinstance(instance, class)

instanceclass 로 만들어진 인스턴스인지 알려준다.

- issubclass(subclass, class)

subclassclass 의 자식 클래스인지 알려준다.

Tags:

Categories:

Updated: