오늘도 개발
파이썬 함수(function) 본문
1. 함수란?
변수가 값에 대한 이름표라면 함수는 코드에 대한 이름표이다.
함수를 정의하면 CPython이 힙 메모리에 함수 오브젝트를 생성하고
스택 메모리에 함수 이름을 생성하여 함수 오브젝트를 바인딩한다.
함수를 호출하면 CPython이 스택 메모리에 함수의 프레임을 생성하고
함수의 실행이 끝나면 자동으로 삭제한다.
# 함수 정의
def sayHi():
print("hello, world")
# 함수 호출
sayHi()
2. 인수의 종류
함수에 들어가는 인수의 종류는 두 가지로 나눌 수 있다.
1) 인수를 넣는 방법에 따라 - 위치 인수와 키워드 인수
- 위치 인수(positional argument) : 매개변수 위치에 맞게 순서대로 인수를 넣는 경우
- 키워드 인수(keyword argument): 순서 상관 없이 매개변수=값 형태로 인수를 넣는 경우
# 키워드 인수
def info(name, age):
pass
personal(age="1000", name="sue")
2) 인수의 개수 고정 여부에 따라 - 일반 인수와 가변 인수
- 일반 인수(Regular argument) : 함수 정의 시 인수 개수를 고정해두는 경우
- 가변 인수(variable argument) : 함수 정의 시 인수 개수를 고정해두지 않는 경우
가변 인수는 좀 더 자세히 살펴보자.
2. 가변 인수(variable argument)
1) 가변인수이면서 위치 인수인 경우
함수에 인수를 순서대로 넣는 방식. 통상 *args 사용.
def positional(*args):
print(args)
# 입력값을 튜플로 묶어 저장함.
# (1, 2, 3)
for arg in args:
print(arg)
# 1
# 2
# 3
positional(1, 2, 3)
# 리스트/튜플 언패킹해서 인수로 넣을 수 있음
nums = [4, 5, 6]
positional(*nums)
2) 가변인수이면서 키워드 인수인 경우
인수에 이름(키워드)를 붙여서 사용하는 방식. 순서 상관없이 넣을 수 있다. 통상 **kargs 사용.
def keyWord(**kwargs):
print(kwargs)
# 입력값을 딕셔너리로 묶어 저장함.
# {'a': 1, 'b': 2, 'c': 3}
for value in kwargs.values():
print(value)
# 1
# 2
# 3
keyWord(a=1, b=2, c=3)
# 딕셔너리 언패킹해서 넣을 수도 있음
dict = {'a':1, 'b': 2}
keyWord(**dict)
# 인자 개수가 고정된 경우에도 사용 가능
def sum(x, y):
return x + y
print(sum(y=2, x=1))
3. 매개변수 초깃값 설정하기
매개변수에 인수를 넣지 않는 경우 미리 설정한 값이 나오게 만드는 방법.
초깃값이 있는 매개변수는 항상 뒤쪽에 넣어야 한다.
def introduction(name, hi=False):
if hi:
print('Hi, I am ' + name)
else:
print('I am ' + name)
introduction('Snoopy', True)
# Hi, I am Snoopy
introduction('Garfield')
# hi 인수 없기 때문에 디폴트 False 적용
# I am Garfield
4. 함수 안에서 함수 밖 변수 변경하기
return 사용 (추천)
a = 1
def plusOne(x):
x = x + 1
return x
a = plusOne(a)
print(a)
# 2
global 키워드 사용
a = 1
def plusOne():
global a
a = a + 1
plusOne()
print(a)
# 2
5. 람다 표현식(Lambda expression)으로 함수 만들기
람다 표현식은 함수를 만드는 방법이다.
def 대신 lambda 키워드를 이용해서 간단하게 함수를 만들 수 있다.
람다 표현식은 이름이 없는 함수를 만들기 때문에 익명 함수(anonymous function)라고도 한다.
보통 다른 함수의 인수로 함수를 넣을 때 사용한다.
일반적으로 함수를 만드는 경우:
def plusOne(x):
return x + 1
arr = [1, 2, 3]
list(map(plusOne, arr))
# [2, 3, 4]
람다 표현식을 사용하는 경우:
arr = [1, 2, 3]
list(map(lambda x: x + 1, arr))
# [2, 3, 4]
참고
'웹 프로그래밍 > Python3' 카테고리의 다른 글
| 파이썬 인수(Argument)의 종류와 규칙 (0) | 2022.06.23 |
|---|---|
| 파이썬 객체(Object) (0) | 2022.06.09 |
| CPython이 함수를 처리하는 방법 (0) | 2022.06.07 |
| for문과 range()함수 (0) | 2022.06.05 |
| 파이썬 세트(Set) (0) | 2022.06.05 |