Python/Python 기초

[Python] Python Built-in Functions

데이터 세상 2021. 2. 24. 15:17
728x90
반응형

Python 내장 함수(Built-in Fucntions)

docs.python.org/3/library/functions.html

 

Built-in Functions — Python 3.9.2 documentation

Built-in Functions The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order. abs(x) Return the absolute value of a number. The argument may be an integer, a floating poin

docs.python.org

input()

  • 사용자가 입력한 값을 변수에 저장
a = input()

# 키보드 입력: 
>> 파이썬 input() 함수

print(a)
>> 파이썬 input() 함수

len(s)

  • 객체의 길이 (항목 수) 반환
  • 인자: 시퀀스(문자열, 바이트열, 튜플, 리스트 또는 range 등) 또는 컬렉션(딕셔너리, 집합 또는 불변 집합 등)

abs(x)

  • 숫자의 절댓값을 반환
  • 인자: 정수, 실수 또는 __abs__()를 구현하는 객체

range()

  • range(stop)
  • range(start, stop [,step])
  • 숫자 리스트를 생성, 숫자 시퀀스를 순회할 때 유용
range(10)
>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

range(4, 10)
>> [4, 5, 6, 7, 8, 9]

range(0, 10, 3)
>> [0, 3, 6, 9]

max() / min()

  • max(iterable *[,key,default])
  • max(arg1, arg2, *args[,key])
  • iterable에서 가장 큰 항목이나 두 개 이상의 인자 중 가장 큰 것을 반환

enumerate(iterable, start=0)

  • 반복 가능한 객체의 인덱스 값과 element 값을 tuple(input, element)로 반환
# list의 경우 순서 있는 
lst = ['a', 'b', 'c']
for x in enumerate(lst):
	print(x)

>>
(0, 'a')
(1, 'b')
(2, 'c')


# string 
st = 'abcd'
for x in enumerate(st):
	print(x)

>>    
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')


# set의 경우 순서가 없는
se = {'a','b','c'}
for x in enumerate(se):
    print(x)    
>>
(0, 'b')
(1, 'a')
(2, 'c')
lst = ['a', 'b', 'c', 'd']
for idx, val in enumerate(lst):
	print(idx, val)
    
>>
0 a
1 b
2 c
3 d

zip(*iterables)

  • 2개 이상의 시퀀스를 인수로 취하여, 짧은 길이의 시퀀스를 기준으로 각 항목이 순서대로 1:1 대응하는 새로운 튜플 시퀀스를 반환
a = [1, 2, 3, 4, 5]
b = ['a', 'b', 'c', 'd']
print(zip(a, b))
print(list(zip(a, b)))

>>
<zip object at 0x000001F374960B40>
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]


s1 = '123'
s2 = 'abc'
s3 = 'ㄱㄴㄷ'
print(list(zip(s1, s2, s3)))

>>
[('1', 'a', 'ㄱ'), ('2', 'b', 'ㄴ'), ('3', 'c', 'ㄷ')]

filter(function, iterable)

  • 시퀀스의 항목들 중 함수 조건이 참(True)인 항목만 추출해서 구성된 시퀀스를 반환
def f(x):
    return x % 2 != 0 and x % 3 !=0
print(list(filter(f, range(2, 25))))

>>
[5, 7, 11, 13, 17, 19, 23]

 

map(function, iterable, ...)

  • 리스트, 튜플, 스트링 등 시퀀스의 모든 항목에 함수를 적용한 결과 리스트를 반환
def cube(x): 
    return x*x*x
print(list(map(cube, range(1,11))))

>>
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

lambda()

  • lambda 매개변수 : 리턴 값
  • 코드 내에서 함수를 간결하게(compact) 동적으로 사용할 수 있다
  • python3에서 사용을 권장하지 않지만 머신러닝이나 데이터 분석 시 많이 사용
def area(b, h):
	return 0.5 * b * h
area(5, 4)

==>>>
area = lambda b, h: 0.5 * b * h
area(5, 4)

iter(object, [sentinel])

  • iterator 객체를 반환
  • 두 번째 인자가 없으면, object는 iteration 프로토콜(__iter__() method)을 지원하는 컬렉션 객체이거나 시퀀스 프로토콜(__getitme__() method)을 지원해야 함
  • 두 번째 인자가 있는 경우, object는 collable 이어야 함

※ Iterable

  • iterable 객체: 반복 가능한 객체
  • ex) list, dict, set, str, bytes, tuple, range, file

※ Iterator

  • 하나 이상의 항목이 포함되어 있는 자료구조에서 데이터를 순차적으로 꺼내어 이용할 수 있는 객체
  • 데이터를 순차적으로 활용하기 위해서는 next() 함수 또는 __next__() 특수 메소드를 이용
  • next(iterator, [default]): __next__() 메서드를 호출하여 iterator에서 다음 항목을 꺼냄
    • default가 주어지면, iterator가 고갈될 때 반환하고, 그렇지 않으면 StopIteration 예외 발생

lst = [10, 20, 30]
lst_iter = iter(lst)
print(lst_iter)

print(next(lst_iter))
print(next(lst_iter))
print(next(lst_iter))
print(next(lst_iter))

==>>
# print(lst_iter.__next__())
# print(lst_iter.__next__())
# print(lst_iter.__next__())
# print(lst_iter.__next__())


>>
<list_iterator object at 0x000001BB30A022B0>
10
20
30
Traceback (most recent call last):
StopIteration

Generator

  • generator 객체는 모든 값을 메모리에 올려두고 이용하는 것이 아니라 필요할 때마다 생성하여 반환
  • 메모리 효율성 향상
  • iterator를 작성하는 편리한 방법
  • 시퀀스를 반환하거나 반복문을 사용하는 함수를 다룰 때, 제너레이터를 고려할 수 있다.

yield

  • 각 반환값을 호출자에게 반환하고, 반환값이 모두 소진되었을 때에만 메서드가 종료됨
  • generator는 최종값을 반환하지만, iterator yield 키워드를 사용하여 코드 실행 중에 값을 반환
  • generator는 한번 생성해서 반환한 객체를 보관하지 않기 때문에 이전의 코드를 실행한 후 추가한 코드를 실행하면 아무런 객체도 출력되지 않음

※ return

반환값을 반환하고 메서드를 종료

 

Lazy evaluation

  • 반복자와 동일한 일을 하는 것처럼 보이지만 메모리에 만들어 두는 것이 아니라 for 문에서 필요로 할 때마다 fib_generator()로부터 받음
# 피보나치 수열
def fib_generator():
    a, b = 0, 1
    while True:
        yield b
        a, b = b, a+b

fib = fib_generator()
for n in range(5):
    print(next(fib))

>>
1
1
2
3
5

 

프로파일링

프로그램이 느리게 실행되거나 예상보다 많은 메모리가 소비된다면, 다음과 같은 항목 검토 필요

  • 읽기 전용 데이터는 리스트 대신 튜플을 사용
  • 반복문에서 항목이 많은 리스트나 튜플 대신 제너레이터를 사용하여 순회
  • 문자열을 연결할 때 + 연산자로 문자열을 연결(concatenate)하는 대신, 리스트에 문자열을 append()

 


References

728x90
반응형

'Python > Python 기초' 카테고리의 다른 글

Object Reference  (0) 2021.02.25
[Python] Python Module  (0) 2021.02.24
[Python] Python Exception Handling  (0) 2021.02.24
[Python] Python Class  (0) 2021.02.23
[Python] Python File  (0) 2021.02.23