Python/문법/함수
덤프버전 : (♥ 1)
||
Python의 함수를 정리하는 문서.
Python의 내장 함수는 다음과 같다. #
Python의 함수 정의 키워드는
<예시>
이러면 Hello?라는 문자열이 출력된다.
함수의 이름은 파이썬의 기본 함수[1] 로는 지정 할 수 없으며, 한글 이름과 숫자로 시작하는 이름은 입력 할 수 없다. 그리고 _를 제외한 특수 문자가 포함되게 할 수 없다.
그리고 인자라는 매개 변수를 줄 수 있다. 예시를 보자.
이러면 smith : hello? 라는 문자열이 출력된다.
return은 말그대로 반환값이다. 처음에는 함수 안에 명령어를 넣으면 되니 필요 없는 거 아닌가?라는 생각이 들 수 있으나, 아래 예시를 보면 생각이 바뀔 것이다.
<예시>
이 함수는 4와 4를 곱한 값인 16을 출력한다. print에 함수로 구해진 값인 16을 건네줘서 출력하는 거다.
하지만 굳이 인자를 가져오지 않아도 global 이라는 명령어를 사용하여 함수 안에서도 전역변수 사용을 명시할 수 있다. [2] 다만 전역 변수는 모두 공통으로 사용하는 변수라, 상황에 따라 필요 할 때만 쓰는 것이 좋다.
이 예시의 결과는 15이다. 만약 여기서 global을 뺐다면 오류가 났을 것이다.
정리하자면 Python에서의 함수의 종류는 총 4가지가 있다. 하나는 인자와 반환값이 없는 함수, 인자만 있는 함수, 반환값만 있는 함수, 인자와 반환값 둘 다 있는 함수이다.
함수의 인자로 입력된 변수는 함수 내에서만 사용 가능하다. 이걸 해결하기 위해 위의 global이 있는 것이다.
Asterisk를 2개 붙인 것은 키워드 변수를 의미한다. 이때, (키워드 - 값)의 딕셔너리 형태가 된다. 이때, 키워드는 str이다.
일반 변수, 키워드 변수, asterisk를 붙인 변수, double asterisk를 붙인 변수가 모두 있다면, 키워드 > 일반 > ** 변수 > * 변수 순서로 인식된다.
결과:
람다 함수도 사용 가능하다. 람다 함수는 익명 함수를 뜻하며, 선언한 즉시 함수 그 자체가 되어 실행 가능하다.
함수도 일종의 객체로 취급하기 때문에 변수에 담거나 인자로 넘길 수 있다.
변수가 여럿이면 ,로 구분하면 된다.
아예 변수가 없어도 된다. 이 경우 :의 왼쪽을 비우면 된다.
타 언어와 달리 파이썬의 람다 함수는 한 줄밖에 쓸 수 없으니 참고해야 한다.
Python에서 람다 함수의 사용은 가독성을 헤치므로 추천되지 않는다. (PEP 8)
다만, 람다 함수의 적절한 사용은 편의성을 높여주므로 가독성을 헤치지 않는 정도로 적절히 사용하는 것이 좋다.
예를 들어, map 함수[3] 나 functools 모듈의 reduce 함수와 lambda 함수의 궁합이 좋다.
map은 iterable한 자료형으로, 함수와 다른 iterable한 객체으로 만든다.
reduce는 이변수함수와 iterable한 객체를 인자로 받는 함수이다. reduce의 작용은 대략적으로 다음과 같다.
이를 lambda 함수와 함께 사용하면 다음과 같이 사용할 수 있다.
1. 개요[편집]
Python의 함수를 정리하는 문서.
2. 내장 함수[편집]
Python의 내장 함수는 다음과 같다. #
-
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
이다. 예시를 보자.<예시>
def hello():
print("Hello?")
hello()
이러면 Hello?라는 문자열이 출력된다.
함수의 이름은 파이썬의 기본 함수[1] 로는 지정 할 수 없으며, 한글 이름과 숫자로 시작하는 이름은 입력 할 수 없다. 그리고 _를 제외한 특수 문자가 포함되게 할 수 없다.
그리고 인자라는 매개 변수를 줄 수 있다. 예시를 보자.
def name_hello(name):
print(f"{name} : hello?")
name_hello("smith")
이러면 smith : hello? 라는 문자열이 출력된다.
return은 말그대로 반환값이다. 처음에는 함수 안에 명령어를 넣으면 되니 필요 없는 거 아닌가?라는 생각이 들 수 있으나, 아래 예시를 보면 생각이 바뀔 것이다.
<예시>
def multiply(a, b):
return a*b
print(multiply(4, 4)
이 함수는 4와 4를 곱한 값인 16을 출력한다. print에 함수로 구해진 값인 16을 건네줘서 출력하는 거다.
하지만 굳이 인자를 가져오지 않아도 global 이라는 명령어를 사용하여 함수 안에서도 전역변수 사용을 명시할 수 있다. [2] 다만 전역 변수는 모두 공통으로 사용하는 변수라, 상황에 따라 필요 할 때만 쓰는 것이 좋다.
a = 3
b = 5
def multiply():
global a, b
return a*b
print(multiply())
이 예시의 결과는 15이다. 만약 여기서 global을 뺐다면 오류가 났을 것이다.
정리하자면 Python에서의 함수의 종류는 총 4가지가 있다. 하나는 인자와 반환값이 없는 함수, 인자만 있는 함수, 반환값만 있는 함수, 인자와 반환값 둘 다 있는 함수이다.
함수의 인자로 입력된 변수는 함수 내에서만 사용 가능하다. 이걸 해결하기 위해 위의 global이 있는 것이다.
Asterisk를 2개 붙인 것은 키워드 변수를 의미한다. 이때, (키워드 - 값)의 딕셔너리 형태가 된다. 이때, 키워드는 str이다.
def function(**kwargs):
print(kwargs)
function(a = 1, b = 2) # {'a': 1, 'b': 2}를 출력한다.
일반 변수, 키워드 변수, asterisk를 붙인 변수, double asterisk를 붙인 변수가 모두 있다면, 키워드 > 일반 > ** 변수 > * 변수 순서로 인식된다.
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)
결과:
a = 1
b = 4
args = (2, 3)
kwargs = {'i': 5}
4. 람다 함수[편집]
람다 함수도 사용 가능하다. 람다 함수는 익명 함수를 뜻하며, 선언한 즉시 함수 그 자체가 되어 실행 가능하다.
square = lambda n: n**2
square(5) #25
함수도 일종의 객체로 취급하기 때문에 변수에 담거나 인자로 넘길 수 있다.
변수가 여럿이면 ,로 구분하면 된다.
add = lambda m, n: m+n
아예 변수가 없어도 된다. 이 경우 :의 왼쪽을 비우면 된다.
one = lambda: 1
타 언어와 달리 파이썬의 람다 함수는 한 줄밖에 쓸 수 없으니 참고해야 한다.
4.1. 응용[편집]
Python에서 람다 함수의 사용은 가독성을 헤치므로 추천되지 않는다. (PEP 8)
다만, 람다 함수의 적절한 사용은 편의성을 높여주므로 가독성을 헤치지 않는 정도로 적절히 사용하는 것이 좋다.
예를 들어, map 함수[3] 나 functools 모듈의 reduce 함수와 lambda 함수의 궁합이 좋다.
map은 iterable한 자료형으로, 함수와 다른 iterable한 객체으로 만든다.
arr = map(func, iter)
arr[i] == func(iter[i]) #True
reduce는 이변수함수와 iterable한 객체를 인자로 받는 함수이다. reduce의 작용은 대략적으로 다음과 같다.
def reduce(func, iter)
x = iter[0]
for i in iter[1:]:
x = func(x, i)
return
이를 lambda 함수와 함께 사용하면 다음과 같이 사용할 수 있다.
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] 사실은 클래스이지만
이 문서의 내용 중 전체 또는 일부는 2024-06-02 04:03:04에 나무위키 Python/문법/함수 문서에서 가져왔습니다.