[[분류:Python]][[분류:프로그래밍 언어 문법]] [include(틀:상위 문서, top1=Python/문법)] [include(틀:프로그래밍 언어 문법)] [목차] == 개요 == [[Python]]의 [[함수(프로그래밍)|함수]]를 정리하는 문서. == 내장 함수 == Python의 내장 함수는 다음과 같다. [[https://docs.python.org/ko/3.12/library/functions.html|#]] * {{{abs()}}}: \''''abs'''olute value'의 약자. [[절댓값]]을 뜻하며, 절댓값을 반환한다. * {{{aiter()}}}: \''''a'''synchronous '''iter'''ator'의 약자. 비동기 반복자를 뜻한다. * {{{all()}}} * {{{anext()}}}: \''''a'''synchronous '''next''''의 약자. 비동기 이터레이터에서 다음 값을 가져온다. * {{{any()}}} * {{{ascii()}}}: \''''A'''merican '''S'''tandard '''C'''ode for '''I'''nformation '''I'''nterchange'의 약자. [[아스키 코드]]를 뜻한다. * {{{bin()}}}: \''''bin'''ary'의 약자. [[2진법]]을 뜻한다. * {{{bool()}}}: \''''bool'''ean'의 약자. [[논리 연산]]을 뜻한다. * {{{breakpoint()}}}: 중단점을 뜻한다. * {{{bytearray()}}} * {{{bytes()}}} * {{{callable()}}} * {{{chr()}}}: \''''ch'''a'''r'''acter'의 약자. * {{{classmethod()}}} * {{{compile()}}} * {{{complex()}}} * {{{delattr()}}}: \''''del'''ete '''attr'''ibute'의 약자. * {{{dict()}}}: \''''dict'''onary'의 약자. [[사전]]을 뜻한다. * {{{dir()}}}: \''''dir'''ectory'의 약자. [[디렉터리]]를 뜻한다. * {{{divmod()}}}: \''''div'''ision and '''mod'''ulus'의 약자. * {{{enumerate()}}} * {{{eval()}}}: \''''eval'''uate'의 약자. * {{{exec()}}}: \''''exec'''ute'의 약자. * {{{filter()}}} * {{{float()}}} * {{{format()}}} * {{{frozenset()}}} * {{{getattr()}}}: \''''get attr'''ibute'의 약자. * {{{globals()}}} * {{{hasattr()}}}: \''''has attr'''ibute'의 약자. * {{{hash()}}} * {{{help()}}} * {{{hex()}}}: \''''hex'''adecimal'의 약자. [[16진법]]을 뜻한다. * {{{id()}}}: \''''id'''entity'의 약자. * {{{input()}}} * {{{int()}}}: \''''int'''eger'의 약자. * {{{isinstance()}}} * {{{issubclass()}}} * {{{iter()}}}: \''''iter'''ator'의 약자. [[Iterator|반복자]]를 뜻한다. * {{{len()}}}: \''''len'''gth'의 약자. [[길이]]를 뜻한다. * {{{list()}}} * {{{locals()}}} * {{{map()}}} * {{{max()}}}: \''''max'''imum'의 약자. * {{{memoryview()}}} * {{{min()}}}: \''''min'''imum'의 약자. * {{{next()}}} * {{{object()}}} * {{{oct()}}}: \''''oct'''al'의 약자. [[8진법]]을 뜻한다. * {{{open()}}} * {{{ord()}}}: \''''ord'''inal'의 약자. * {{{pow()}}}: \''''pow'''er'의 약자. [[거듭제곱]]을 뜻한다. * {{{print()}}} * {{{property()}}} * {{{range()}}} * {{{repr()}}}: \''''repr'''esentation'의 약자. * {{{reversed()}}} * {{{round()}}} * {{{set()}}} * {{{setattr()}}}: \''''set attr'''ibute'의 약자. * {{{slice()}}} * {{{sorted()}}} * {{{staticmethod()}}} * {{{str()}}}: \''''str'''ing'의 약자. [[스트링#s-5]]을 뜻한다. * {{{sum()}}} * {{{super()}}} * {{{tuple()}}} * {{{type()}}} * {{{vars()}}}: \''''var'''iable'''s''''의 약자. * {{{zip()}}} * {{{__import__()}}} == 일반 함수 == [[Python]]의 함수 정의 키워드는 {{{def}}}이다. 예시를 보자. <예시> {{{#!syntax python def hello(): print("Hello?") hello() }}} 이러면 Hello?라는 문자열이 출력된다. 함수의 이름은 파이썬의 기본 함수[* print, def, input, if, on, in 등]로는 지정 할 수 없으며, 한글 이름과 숫자로 시작하는 이름은 입력 할 수 없다. 그리고 _를 제외한 특수 문자가 포함되게 할 수 없다. 그리고 인자라는 매개 변수를 줄 수 있다. 예시를 보자. {{{#!syntax python def name_hello(name): print(f"{name} : hello?") name_hello("smith") }}} 이러면 smith : hello? 라는 문자열이 출력된다. return은 말그대로 반환값이다. 처음에는 함수 안에 명령어를 넣으면 되니 필요 없는 거 아닌가?라는 생각이 들 수 있으나, 아래 예시를 보면 생각이 바뀔 것이다. <예시> {{{#!syntax python def multiply(a, b): return a*b print(multiply(4, 4) }}} 이 함수는 4와 4를 곱한 값인 16을 출력한다. print에 함수로 구해진 값인 16을 건네줘서 출력하는 거다. 하지만 굳이 인자를 가져오지 않아도 global 이라는 명령어를 사용하여 함수 안에서도 전역변수 사용을 명시할 수 있다. [* 명시한다고 표현한 이유는 함수가 정의될 때 스코프에 전역변수를 포함하기 때문이다. 하지만 함수 내에서 값을 수정하면 실제 전역변수는 수정되지 않아 global 키워드로 수정할 수 있다.]다만 전역 변수는 모두 공통으로 사용하는 변수라, 상황에 따라 필요 할 때만 쓰는 것이 좋다. {{{#!syntax python a = 3 b = 5 def multiply(): global a, b return a*b print(multiply()) }}} 이 예시의 결과는 15이다. 만약 여기서 global을 뺐다면 오류가 났을 것이다. 정리하자면 Python에서의 함수의 종류는 총 4가지가 있다. 하나는 인자와 반환값이 없는 함수, 인자만 있는 함수, 반환값만 있는 함수, 인자와 반환값 둘 다 있는 함수이다. 함수의 인자로 입력된 변수는 함수 내에서만 사용 가능하다. 이걸 해결하기 위해 위의 global이 있는 것이다. Asterisk를 2개 붙인 것은 키워드 변수를 의미한다. 이때, (키워드 - 값)의 딕셔너리 형태가 된다. 이때, 키워드는 str이다. {{{#!syntax python def function(**kwargs): print(kwargs) function(a = 1, b = 2) # {'a': 1, 'b': 2}를 출력한다. }}} 일반 변수, 키워드 변수, asterisk를 붙인 변수, double asterisk를 붙인 변수가 모두 있다면, 키워드 > 일반 > ** 변수 > * 변수 순서로 인식된다. {{{#!syntax python def function(a, b = 0, *args, **kwargs): print("a =", a) print("b =", b) print("args = ", args) print("kwargs =", kwargs) function(1, 2, 3, b = 4, i = 5) }}} 결과: {{{#!syntax python a = 1 b = 4 args = (2, 3) kwargs = {'i': 5} }}} == 람다 함수 == 람다 함수도 사용 가능하다. 람다 함수는 익명 함수를 뜻하며, 선언한 즉시 함수 그 자체가 되어 실행 가능하다. {{{#!syntax python square = lambda n: n**2 square(5) #25 }}} 함수도 일종의 객체로 취급하기 때문에 변수에 담거나 인자로 넘길 수 있다. 변수가 여럿이면 ,로 구분하면 된다. {{{#!syntax python add = lambda m, n: m+n }}} 아예 변수가 없어도 된다. 이 경우 :의 왼쪽을 비우면 된다. {{{#!syntax python one = lambda: 1 }}} 타 언어와 달리 파이썬의 람다 함수는 한 줄밖에 쓸 수 없으니 참고해야 한다. === 응용 === Python에서 람다 함수의 사용은 가독성을 헤치므로 추천되지 않는다. (PEP 8) 다만, 람다 함수의 적절한 사용은 편의성을 높여주므로 가독성을 헤치지 않는 정도로 적절히 사용하는 것이 좋다. 예를 들어, map 함수[* 사실은 클래스이지만]나 functools 모듈의 reduce 함수와 lambda 함수의 궁합이 좋다. map은 iterable한 자료형으로, 함수와 다른 iterable한 객체으로 만든다. {{{#!syntax python arr = map(func, iter) arr[i] == func(iter[i]) #True }}} reduce는 이변수함수와 iterable한 객체를 인자로 받는 함수이다. reduce의 작용은 대략적으로 다음과 같다. {{{#!syntax python def reduce(func, iter) x = iter[0] for i in iter[1:]: x = func(x, i) return }}} 이를 lambda 함수와 함께 사용하면 다음과 같이 사용할 수 있다. {{{#!syntax python arr = list(map(lambda x: x**3, range(7))) print(arr) # [0, 1, 8, 27, 64, 125, 216] import functools total = functools.reduce(lambda x, y: x+y, [1, 3, 4]) print(total) # 1 + 3 + 4 = 8 }}} [각주][include(틀:문서 가져옴, title=Python/문법, version=180, paragraph=7)]