최근 수정 시각 : 2024-12-09 13:12:16

Python/문법/함수


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

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

1. 개요

이 문서는 Python 함수를 정리한 것이다.

2. 내장 함수

Python의 내장 함수는 다음과 같다.[1]
  • abs(): \'absolute value'의 약자. 절댓값을 뜻하며, 절댓값을 반환한다.
  • aiter(): \'asynchronous iterator'의 약자. 비동기 반복자를 뜻한다.
  • all()
  • anext(): \'asynchronous next'의 약자. 비동기 이터레이터에서 다음 값을 가져온다.
  • any()
  • ascii(): \'American Standard Code for Information Interchange'의 약자. 아스키 코드를 뜻한다.
  • bin(): \'binary'의 약자. 2진법을 뜻한다.
  • bool(): \'boolean'의 약자. 논리 연산을 뜻한다.
  • breakpoint(): 중단점을 뜻한다.
  • bytearray()
  • bytes()
  • callable()
  • chr(): \'character'의 약자.
  • classmethod()
  • compile()
  • complex()
  • delattr(): \'delete attribute'의 약자.
  • dict(): \'dictonary'의 약자. 사전을 뜻한다.
  • dir(): \'directory'의 약자. 디렉터리를 뜻한다.
  • divmod(): \'division and modulus'의 약자.
  • enumerate()
  • eval(): \'evaluate'의 약자.
  • exec(): \'execute'의 약자.
  • filter()
  • float()
  • format()
  • frozenset()
  • getattr(): \'get attribute'의 약자.
  • globals()
  • hasattr(): \'has attribute'의 약자.
  • hash()
  • help()
  • hex(): \'hexadecimal'의 약자. 16진법을 뜻한다.
  • id(): \'identity'의 약자.
  • input()
  • int(): \'integer'의 약자.
  • isinstance()
  • issubclass()
  • iter(): \'iterator'의 약자. 반복자를 뜻한다.
  • len(): \'length'의 약자. 길이를 뜻한다.
  • list()
  • locals()
  • map()
  • max(): \'maximum'의 약자.
  • memoryview()
  • min(): \'minimum'의 약자.
  • next()
  • object()
  • oct(): \'octal'의 약자. 8진법을 뜻한다.
  • open()
  • ord(): \'ordinal'의 약자.
  • pow(): \'power'의 약자. 거듭제곱을 뜻한다.
  • print()
  • property()
  • range()
  • repr(): \'representation'의 약자.
  • reversed()
  • round()
  • set()
  • setattr(): \'set attribute'의 약자.
  • slice()
  • sorted()
  • staticmethod()
  • str(): \'string'의 약자. 스트링을 뜻한다.
  • sum()
  • super()
  • tuple()
  • type()
  • vars(): \'variables'의 약자.
  • zip()
  • __import__()

3. 일반 함수

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

hello()
이러면 Hello?라는 문자열이 출력된다.

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

그리고 인자라는 매개 변수를 줄 수 있다. 예시를 보자.
#!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이라는 명령어를 사용하여 함수 안에서도 전역변수 사용을 명시할 수 있다.[3]다만 전역 변수는 모두 공통으로 사용하는 변수라 상황에 따라 필요 할 때만 쓰는 것이 좋다.
#!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)[4] 다만, 람다 함수의 적절한 사용은 편의성을 높여주므로 가독성을 헤치지 않는 정도로 적절히 사용하는 것이 좋다. 예를 들어, map 함수[5]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


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

[1] https://docs.python.org/ko/3.12/library/functions.html [2] print, def, input, if, on, in 등 [3] 명시한다고 표현한 이유는 함수가 정의될 때 스코프에 전역변수를 포함하기 때문이다. 하지만 함수 내에서 값을 수정하면 실제 전역변수는 수정되지 않아 global 키워드로 수정할 수 있다. [4] PEP 8에서는 함수에 이름을 지을 거면 람다를 쓰지 말라고 한 것이고 가독성에 대한 언급은 없다. [5] 사실은 클래스이지만