오늘도 개발

파이썬 함수(function) 본문

웹 프로그래밍/Python3

파이썬 함수(function)

Sueeeeeee 2022. 6. 7. 21:19

1.  함수란?

변수가 값에 대한 이름표라면 함수는 코드에 대한 이름표이다. 

 

함수를 정의하면 CPython이 힙 메모리에 함수 오브젝트를 생성하고

스택 메모리에 함수 이름을 생성하여 함수 오브젝트를 바인딩한다.

 

함수를 호출하면 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]

 

 

 

참고

점프 투 파이썬 04-1. 함수

Geeks for Geeks - *args and **kwargs in Python

'웹 프로그래밍 > 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