상위 문서: 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. 개요
이 문서는 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