최근 수정 시각 : 2024-06-01 21:52:29

Python/문법/함수


파일:상위 문서 아이콘.svg   상위 문서: Python/문법
프로그래밍 언어 문법
{{{#!wiki style="margin: -16px -11px; word-break: keep-all" <colbgcolor=#0095c7><colcolor=#fff,#000> 언어 문법 C( 포인터 · 구조체) · C++( 자료형 · 클래스 · 이름공간 · 상수 표현식 · 특성) · C# · Java · Python · Kotlin · MATLAB · SQL · PHP · JavaScript · Haskell
마크업 문법 HTML · CSS
개념과 용어 함수 · 인라인 함수 · 고차 함수 · 람다식 · 리터럴 · size_t · 상속 · 예외 · 조건문 · 참조에 의한 호출 · eval
기타 == · === · NaN · null · undefined · 모나드 · 배커스-나우르 표기법
프로그래밍 언어 예제 · 목록 · 분류 }}}

1. 개요2. 내장 함수3. 일반 함수4. 람다 함수
4.1. 응용

1. 개요

Python 함수를 정리하는 문서.

2. 내장 함수

Python의 내장 함수는 다음과 같다. #
  • abs()
  • aiter()
  • all()
  • anext()
  • any()
  • ascii()
  • bin()
  • bool()
  • breakpoint()
  • bytearray()
  • bytes()
  • callable()
  • chr()
  • classmethod()
  • compile()
  • complex()
  • delattr()
  • dict()
  • dir()
  • divmod()
  • enumerate()
  • eval()
  • exec()
  • filter()
  • float()
  • format()
  • frozenset()
  • getattr()
  • globals()
  • hasattr()
  • hash()
  • help()
  • hex()
  • id()
  • input()
  • int()
  • isinstance()
  • issubclass()
  • iter()
  • len()
  • list()
  • locals()
  • map()
  • max()
  • memoryview()
  • min()
  • next()
  • object()
  • oct()
  • open()
  • ord()
  • pow()
  • print()
  • property()
  • range()
  • repr()
  • reversed()
  • round()
  • set()
  • setattr()
  • slice()
  • sorted()
  • staticmethod()
  • str()
  • sum()
  • super()
  • tuple()
  • type()
  • vars()
  • zip()
  • __import__()

3. 일반 함수

Python의 함수 정의 키워드는 def이다. 예시를 보자.
<예시>
#!syntax python
def hello():
    print("Hello?")

hello()

이러면 Hello?라는 문자열이 출력된다.
함수의 이름은 파이썬의 기본 함수[1]로는 지정 할 수 없으며, 한글 이름과 숫자로 시작하는 이름은 입력 할 수 없다. 그리고 _를 제외한 특수 문자가 포함되게 할 수 없다.

그리고 인자라는 매개 변수를 줄 수 있다. 예시를 보자.
#!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 이라는 명령어를 사용하여 함수 안에서도 전역변수 사용을 명시할 수 있다. [2]다만 전역 변수는 모두 공통으로 사용하는 변수라, 상황에 따라 필요 할 때만 쓰는 것이 좋다.
#!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}

4. 람다 함수

람다 함수도 사용 가능하다. 람다 함수는 익명 함수를 뜻하며, 선언한 즉시 함수 그 자체가 되어 실행 가능하다.

#!syntax python
square = lambda n: n**2
square(5) #25

함수도 일종의 객체로 취급하기 때문에 변수에 담거나 인자로 넘길 수 있다.

변수가 여럿이면 ,로 구분하면 된다.
#!syntax python
add = lambda m, n: m+n


아예 변수가 없어도 된다. 이 경우 :의 왼쪽을 비우면 된다.
#!syntax python
one = lambda: 1


타 언어와 달리 파이썬의 람다 함수는 한 줄밖에 쓸 수 없으니 참고해야 한다.

4.1. 응용

Python에서 람다 함수의 사용은 가독성을 헤치므로 추천되지 않는다. (PEP 8)
다만, 람다 함수의 적절한 사용은 편의성을 높여주므로 가독성을 헤치지 않는 정도로 적절히 사용하는 것이 좋다.

예를 들어, map 함수[3]나 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


[1] print, def, input, if, on, in 등 [2] 명시한다고 표현한 이유는 함수가 정의될 때 스코프에 전역변수를 포함하기 때문이다. 하지만 함수 내에서 값을 수정하면 실제 전역변수는 수정되지 않아 global 키워드로 수정할 수 있다. [3] 사실은 클래스이지만


파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 문서의 r180에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r180 ( 이전 역사)
문서의 r ( 이전 역사)