빌트인 함수(Built-in function)은 언어 설계 과정에서 미리 만들어진 함수를 말합니다. Hello World에서 봤던 print라는 함수도 빌트인 함수에 속합니다. 이와 같은 빌트인 함수와 혼동하지 않기 위해, 개발자가 직접 만든 함수는 사용자 정의 함수라고도 부릅니다. Python 3.6.4 기준 빌트인 함수는 총 68개가 있습니다. 여기서는 쓸만한 여러가지 빌트인 함수들을 소개합니다. Iterable 자료형을 위한 빌트인들을 설명하기 위해 sequence, iterator 등을 언급할텐데, 둘 다 그냥 iterable이라 생각하고 이해는 나중으로 넘기도록 합시다.

콘솔 출력을 위한 함수입니다.

1번 라인의 print문은 end 인자가 기본값인 \n으로 처리되어 'Hello'라는 문자열 출력과 함께 개행이 이루어지고, 2번 라인의 print문은 end를 직접 ''로 지정하였으므로 출력 이후 개행 처리되지 않습니다.

type(obj)

전달된 객체의 타입을 확인하기 위해 사용합니다. 클래스를 배우기 전이라 객체가 어떤 건지 정확히 알기 힘들다면, 그냥 변수의 타입을 반환한다고 생각해도 좋습니다.

isinstance(object, class-or-type-or-tuple)

타입 검증을 위해 사용합니다. 전달된 객체(obj)가 전달된 타입(type)에 속하는지를 boolean 타입으로 반환합니다.

sum(a, b)

두 수의 합을 반환합니다.

divmod(x, y)

a를 b로 floor div한 몫나머지를 반환합니다.

max(arg1, arg2, *args)

전달된 2개 이상의 인자 중 최댓값을 반환합니다. int와 str 등 서로 값을 비교할 수 없는 인자를 함께 전달할 경우 오류가 발생합니다.

Iterable 자료형을 위한 빌트인

len(object)

전달된 iterable 객체의 길이를 반환합니다. 정확히는 해당 객체가 가지고 있는 매직 메소드인 __len__을 호출합니다. 따라서 __len__ 메소드만 가지고 있으면 iterable 자료형이 아니더라도 오류가 발생하지 않습니다. 매직 메소드에 대한 설명은 여기에 나와 있습니다.

reversed(sequence)

전달된 sequence 객체를 역방향으로 뒤집은 iterator를 반환합니다.

sorted(iterable, cmp=None, key=None, reverse=False)

전달된 iterable 객체를 정렬하여 반환합니다.

enumerate(iterable)

전달된 iterable 객체를 이용해 0으로 시작하는 카운트와 값으로 이루어진 튜플로 구성된 iterable로 리턴합니다.

Python 공식 레퍼런스 에서 기타 빌트인 함수들을 더 알아볼 수 있습니다.

'Python 계열 > Python 레거시 글' 카테고리의 다른 글

[Python] 클래스의 상속  (0) 2018.06.30
[Python] 객체지향  (0) 2018.06.29
[Python] 값으로서의 함수와 lambda  (0) 2018.06.27
[Python] docstring  (0) 2018.06.26
[Python] 함수  (0) 2018.06.25

Python의 함수는 으로서 관리됩니다. 쉽게 말하면, 변수에 할당할 수 있다는 것입니다

이를 프로그래밍 언어 디자인 측에선 일급 객체라고 부릅니다. 이는 다른 객체들에 적용 가능한 일반적인 연산을 모두 지원하는 객체를 가리킵니다. 함수에 매개변수로 넘기기, 변수에 대입하기와 같은 연산들이 여기서 말하는 일반적인 연산의 예입니다. 다음과 같은 조건을 만족할 때 일급 객체라고 말할 수 있습니다.

  • 변수나 데이터 구조안에 담을 수 있다.
  • 파라미터로 전달 할 수 있다.
  • 반환값(return value)으로 사용할 수 있다.
  • 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
  • 동적으로 프로퍼티 할당이 가능하다.

Python의 함수는 해당 조건을 모두 만족하며, 따라서 일급 객체입니다.

lambda

그러나 Python의 함수는 JavaScript의 함수처럼 런타임 생성과 익명 생성이 불가능하므로 일급 함수라고 분류할 수는 없습니다. 런타임 생성은 그때 그때 함수를 만든다는 의미인데, Python은 이 일이 불가능합니다. return def ...와 같은 표현을 할 수 없다는 것입니다. 이를 위해 Python에서는 lambda를 지원합니다.

lambda는 함수를 생성할 때 사용하는 예약어로, def와 동일한 역할을 합니다. 이는 def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳(런타임 또는 익명으로 생성해야 하는 경우)에 주로 쓰입니다.

'Python 계열 > Python 레거시 글' 카테고리의 다른 글

[Python] 객체지향  (0) 2018.06.29
[Python] 빌트인 함수  (0) 2018.06.28
[Python] docstring  (0) 2018.06.26
[Python] 함수  (0) 2018.06.25
[Python] pass statement  (0) 2018.06.24

주석에 대해서 설명한 적이 있었고, 기본 자료형에서 문자열을 이야기할 때 샘플 코드에서 큰 따옴표 3개는 함수의 docstring에서 사용한다라고 한 적 있었습니다. docstring모듈, 함수, 클래스, 메소드 정의의 최상단에 위치하는 문자열입니다. 주석의 일종이지만, 컴파일 타임에 제외되는 # 주석과 다르게 하나의 특수 속성이 됩니다. 아래는 함수에 대한 docstring의 예입니다.

함수 정의 최상단에 큰 따옴표 3개로 묶인 문자열로 docstring을 정의했습니다. 함수에 대한 설명, 파라미터 정보, 반환값에 대한 정보가 포함되어 있습니다. 이를 통해 각 파라미터에는 어떤 타입의 값을 전달해야 하는지, 함수가 어떤 작업을 하고, 어떤 값을 반환하는지 등을 바로 이해할 수 있습니다. 한가지 신기한 점은, help라는 함수에 sum 함수를 전달하고 반환받은 docstring에 대한 정보와, __doc__이라는 함수의 속성입니다. docstring은 # 주석처럼 컴파일 타임에 제외되지 않는다는 것입니다. 따라서 Python의 docstring은 최소한의 노력으로 코드를 문서화할 수 있는 강력한 무기입니다.

docstring은 작은 따옴표 3개로 묶인 문자열로 작성해도 상관 없으나, Python docstring 제안서에서는 큰 따옴표를 권고하고 있습니다. docstring은 함수만이 아니라 모듈, 클래스, 메소드 등에 모두 작성 가능하며 docstring을 작성하는 스타일은 Google의 Python docstring guide가 가장 대표적입니다. 주석과 docstring이 필수는 아니지만, 지금의 내가 아닌 내 코드를 보는 다른 사람을 위해 꼭 적어주는 것이 좋습니다.

'Python 계열 > Python 레거시 글' 카테고리의 다른 글

[Python] 빌트인 함수  (0) 2018.06.28
[Python] 값으로서의 함수와 lambda  (0) 2018.06.27
[Python] 함수  (0) 2018.06.25
[Python] pass statement  (0) 2018.06.24
[Python] 반복문 - while  (0) 2018.06.23

+ Recent posts