Python/문법/함수
덤프버전 : (♥ 0)
![파일:나무위키+상위문서.png](http://obj-sg.the1.wiki/d/82/8a/0bb4602568cf2876f4e245107c482e7872ef091d5e44bbef84992a5b4c06186a.png)
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] 사실은 클래스이지만