파이썬 내장함수와 관련하여 간단하게 분류별로 나누고 정리해 보았다. 보다 자세한 사용법에 대해서는 파이썬 표준라이브러리 문서나 대화형쉘에서 help()
를 이용해서 도움말을 얻도록 하자. 이 내장함수들은 하나 이상의 타입의 인자를 받을 수도 있고, 별도의 옵션 인자를 받기도 한다. 예를 들어 max()
함수는 max(a, b, c)
와 같이 쓸 수도 있지만, max(aList)
와 같이 연속열 1개를 인자로 받기도 하며, key=
파라미터를 줄 수도 있다. 본 글에서는 이런 세부 내용에 대해서는 따로 언급하지 않는다.
그외에 객체/모듈 조사 명령을 사용하여 내장 함수 목록을 뽑아내는 방법이 있는데, 이 부분은 글의 말미에서 추가로 소개하겠다.
updated : 파이썬 내장함수의 사용법을 일일이 적어 두는 것이 가독성도 좋지 못하고 별 필요가 없는 내용이라 판단되어, 내용은 간소화하고 분류별로 정리했습니다.
파이썬 표준 라이브러리
기본적으로 모든 내장 함수 및 표준 라이브러리 내 함수의 도움말은 표준 라이브러리 문서를 직접 참고하는 습관을 들여야 합니다.
내장함수 목록
다음은 파이썬의 내장함수 목록이다. 내장함수들은 __bulitins__
라는 모듈에 정의되어 있다. 내장함수는 매우 기본이 되는 함수들이라 할 수 있지만, 모두 외울 필요는 없다. 자신이 자주 쓰게 되는 것들에 대해서는 자연스럽게 외우게 되어 있다. 사실 내장함수외에도 표준 라이브러리에는 엄청나게 많은 모듈과 함수들이 있으며, 이들은 외워서 쓰는 것이 아니라 대략적으로 알고 있다가 필요할 때 찾아보고 쓰는 편이 맞다. (그러니까 그런식으로 암기로 파이썬을 절대 공부하지 말 것) 또한 파이썬 표준 문서는 브라우저 북마크에 등록해두고 필요할 때마다 찾아봐야 한다.
산술 연산 함수
사칙연산 외의 산술 계산에 사용되는 함수들이다.
abs
: 절대값을 구한다.bin
: 2진수로 변환한 문자열oct
: 8진수로 변환한 문자열hex
: 16진수로 변환한 문자열pow
: 거듭제곱을 계산한다.**
연산자로 대체할 수 있다.round
: 반올림한다.divmod
: 몫과 나머지를 동시에 구한다. 낯익은 이름은 아니겠지만, 의외로 자주 쓰이기도 한다.hash
: 객체의 해시값을 구한다. 직접 사용하는 일은 매우 드물다.
여러 기본 타입/클래스의 생성자
여러 타입들의 생성자이다. 타입에 따라서 비어있는 인스턴스를 만들 수도 있고, 다른 타입의 값을 해당 타입의 값으로 변환할 수도 있다. 예를 들어 bool
타입은 불리언 대수(참/거짓)을 의미하는데, bool(1)
은 True
가 되고 bool(0)
은 False
가 되는 식이다. 그외에 list
는 우리가 알고 있는 그 리스트가 맞고, list()
라고만 하면 빈 리스트를 생성한다.
bool
bytearray
bytes
complex
dict
float
frozenset
int
list
memoryview
object
range
:for
문에서 자주 쓰이는 그range
가 맞다. Python3에서range
는 일종의 반복자 타입으로 정의된다. (파이썬 2에서는 그냥 특정 구간을 채운 리스트를 생성하는 함수였음)set
slice
: 리스트의 부분열을 액세스할 때aList[3:8]
을 쓸 때3:8
에 해당하는 표기는 슬라이스 객체로 치환된다. 슬라이스는 연속열의 부분열을 만들기 위한 참조 영역을 표현하는 타입이다.str
tuple
zip
런타임 관련
프로그램의 실행 중에 특정 텍스트를 받아서 컴파일하고 실행한다. 보안상의 문제로 사용하지 않을 것을 권장한다.
compile
eval
exec
연속열/반복 관련
연속열, 반복자, 생성자와 관련된 함수들이다. 대부분 매우 중요하다고 보면 된다.
all
: 연속열의 모든 원소가 참인지 확인any
: 연속열 중 참인 원소가 1개라도 있는지 확인enumerate
: 연속열의 각 원소와 그 인덱스를 순차적으로 생성해내는 반복자 생성함수filter
: 필터함수를 적용하여 연속열의 원소를 걸러낸다.iter
: 연속열에 대해서 반복자를 생성한다. 직접 쓰이는 경우는 없고,for
문이 내부적으로 이 함수를 사용한다.len
: 연속열의 길이를 구한다.map
: 연속열의 각 원소에 주어진 함수를 사상한다.max
: 연속열에서 최대값을 구한다.min
: 연속열에서 최소값을 구한다.next
: 반복자/생성자에게서 다음 원소를 요청한다.reversed
: 연속열의 역순인 사본을 생성한다.sorted
: 연속열의 정렬된 사본을 생성한다.sum
: 연속열의 각 원소들의 합계를 구한다.
문자열 및 IO 관련
ascii
: 특정 객체를 표현하는 문자열을 아스키코드만 써서 표현한다. 영역외의 문자는 모두 이스케이프된다.chr
: 코드값(정수)으로부터 해당 코드가 가리키는 문자를 찾는다.format
: 미니포맷 언어를 사용하여 템플릿과 값을 조합한 문자열을 만든다.str.format()
과 유사하다.ord
:chr
의 반대동작. 문자를 주면 해당 문자의 코드값을 구한다.repr
: 주어진 객체의 표현 문구를 구한다. 보통 대화형쉘에서 객체 이름만 넣고 실행하면 나오는 값이 이 것이다.input
: 표준 입력으로부터 문자열을 한 줄 수신한다.open
: 파일을 열고 파일 핸들러를 리턴한다.print
: 문자열을 표준 출력으로 내보낸다.
기타 객체/모듈 조사용
특정 객체를 조사하는데 유용한 함수들이다. 실제로 자주 쓰일 일은 없겠지만, 알아두면 외부 모듈들을 사용하거나 디버깅하는데 큰 도움을 받을 수 있다.
help
: 객체의 도움말을 표시한다.callable
: 객체가 실행가능한지 확인한다.delattr
: 객체에게 주어진 문자열로 된 이름의 속성이 있으면 그 속성을 제거한다.dir
: 객체의 모든 속성 이름들의 리스트를 반환한다.getattr
: 객체에게 주어진 문자열로된 이름의 속성을 구한다.globals
: 실행 위치에서 현재 모듈의 전역 변수 이름 공간의 사본을 구한다.hasattr
: 객체가 주어진 문자열로 된 이름의 속성이 있는지를 파악한다.id
: 객체의 고유 식별 값을 찾는다.isinstance
: 객체가 특정 클래스/타입의 인스턴스인지 확인한다. 예를 들어isinstance(d, dict)
는d
가 사전객체인지 확인한다.issubclass
: 클래스가 특정 클래스/타입의 서브 클래스인지 확인한다.locals
: 실행 위치의 지역 변수 이름 공간의 사본을 구한다.setattr
: 객체에게 주어진 문자열로 된 이름의 속성의 값을 세팅한다.type
: 객체의 타입을 조사한다. 해당 타입 이름(문자열)을 리턴한다.vars
: 주어진 모듈의 최상위 속성들을 리턴한다. 메인 모듈에서 실행하면globals()
와 동일한 동작이된다.
그외
classmethod
: 클래스 메소드를 정의할 때 사용하는 데코레이터static
method : 정적 메소드를 정의할 때 사용하는 데코레이터property
: 클래스 내에 프로퍼티를 만들 때 사용하는 데코레이터super
: 클래스 내부에서 해당 클래스의 수퍼 클래스를 찾을 때 사용한다.__import__
: 모듈을 임포트한다.
내장함수 목록 구하기
내장함수는 __builtins__
모듈에 정의되어 있다고 했다. 그러하다면 위에서 살펴본 dir
함수를 이용해서 해당 모듈의 속성 이름을 모두 구할 수 있다. 하지만 실행해보면, 여기에는 모듈의 속성이 모두 나오는데다가, 기본 예외 클래스들도 다 정의가 되어 있기 때문에 함수가 아닌 것도 많다.
따라서 다음과 같이 필터링을 할 조건을 세워보자
- 대문자로 시작하는 것은 주로 예외 클래스들이다. 함수는 소문자로 시작한다.
__
로 시작하는 것은 일반적으로 내부적으로만 쓰려는 이름이다. 제외한다.- 실행가능해야 한다. 즉,
callable
로 확인할 수 있어야 한다.
그런데 dir()
함수로 얻는 결과는 문자열의 리스트로, 속성들의 이름만 얻을 뿐이다. 어떻게 해당 이름의 속성이 실행가능한지 알 수 있을까? 이를 위해서는 특정한 객체의 속성을 이름만 가지고 액세스할 수 있어야 하는데, 그런 함수가 위에 있다. 바로 getattr()
이다.
따라서 이 함수들을 이용해서 다음과 같이 내장 함수들의 목록을 구할 수 있다. 참고로 copyright
와 credits
는 내장함수는 아닌데 __builtins__
에 끼어 있다. 이들은 제외한다.
def get_builin_funcs():
names = dir(__builtins__) ## 1
name_filter = lambda s: s[0].islower and not s.startswith('__') ## 2
call_filter = lambda s: s not in ('copyright', 'credit') \
and callable(getattr(__builtins__, s)) ## 3
## 이 두 필터를 적용한 이름의 리스트
filtered_names = filter(call_filter, filter(name_filter, names))
## 각 이름들을 함수로 바꾸어 리턴한다.
get_func = lambda s: getattr(__builtins__, s)
return list(map(get_func, filtered_names))
이를 이용해서 각 내장 함수의 이름과 그 함수의 간이 도움말을 출력해보자. 모든 객체는 __name__
, __doc__
속성을 가지고 있는데 이들이 각각 이름과 간이 도움말에 해당한다.
funcs = get_builtin_funcs()
for f in funcs:
print(f.__name__)
print()
print(f.__doc__)
print()
print("=" * 80)
print()
print()
실행해보면 각 함수의 이름과 설명을 순차적으로 출력해줄 것이다.