[Python3] 함수

Alexandria·2023년 8월 31일
0

Python3 Basic

목록 보기
13/19
post-thumbnail

1. def

def는 함수를 만들 때 사용하는 예약어입니다. 함수 이름, 인자 목록과 콜론(:)을 입력한 다음에 수행할 코드를 작성합니다.

함수에서 값을 반환하려면 return을 사용합니다.

두 개의 인자(a, b)를 더하는 함수를 다음과 같이 생성해 볼 수 있습니다.

def sum_function(a, b):
    return a + b

다음과 같이 생성한 함수를 호출할 수 있습니다. sum_function에 2개의 인수(5, 7)을 전달하면 5 + 7인 12가 반환됩니다.

def sum_function(a, b):
    return a + b

c = sum_function(5, 7)
print(f'5 + 7 = {c}')

당연히 인자가 없는 함수를 선언할 수도 있으며 반환 값도 필수 값은 아닙니다.

def no_param():
    return 'Hello'

def no_return():
    print('World')

print(no_param())
no_return()

2. Argument

2.1. Positional argument

함수의 인자를 전달할 때, 기본적으로는 positional argument 방법이 사용됩니다. 함수 정의에서 지정한 위치에 따라 전달되는 방법입니다.

다음과 같이 함수 정의에서 지정한 인자의 위치와 전달되는 인수의 위치가 같아야 합니다.

def my_func(name, age):
    print(f'my name is {name} and {age} years old')

my_func('john doe', 20) # my name is john doe and 20 years old

"john doe"와 20의 위치가 바뀐다면 my_func 함수에서는 name이 20이고, age가 "john doe"가 됩니다.

def my_func(name, age):
    print(f'my name is {name} and {age} years old')

my_func(20, 'john doe') # my name is 20 and john doe years old

2.2. Keyword argument

Keyword argument는 함수의 인자를 전달할 때, 인자의 이름에 따라 전달되는 방법입니다.

다음과 같이 함수 정의에서 지정한 인자의 이름과 인수의 이름이 같아야 하며, 위치에 대한 제약이 없습니다.

def my_func(name, age, country):
    print(f'name : {name}')
    print(f'age : {age}')
    print(f'country : {country}')

my_func(country='KR', age=20, name='john doe')

다음과 같이 positional argument 방법과 함께 사용할 수 있습니다.

def my_func(name, age, country):
    print(f'name : {name}')
    print(f'age : {age}')
    print(f'country : {country}')

my_func('john doe', country='KR', age=20)

💡 my_func(name='john doe', age=20, 'KR')와 같이 positional argument가 Keyword argument보다 뒤에 사용될 경우 SyntaxError가 발생합니다.

2.3. Default argument

인수를 전달하지 않아도 미리 지정된 초기 값을 설정하여 자동으로 할당되게 할 수 있습니다.

당연히, 인수를 전달하면 초기 값이 아닌 전달된 값을 사용하게 됩니다.

def my_func(name, age, country='KR'):
    print(f'name : {name}')
    print(f'age : {age}')
    print(f'country : {country}')

my_func('john doe', 20)

💡 my_func(name, country='KR', age)와 같이 초기 값이 설정되지 않은 인자의 위치보다 앞에 사용될 경우 SyntaxError가 발생합니다.

2.4. Variable aruments

함수의 인자 개수가 가변적일 경우 *args**kwargs를 사용할 수 있습니다.

변수 명은 정해진 것은 없으나, 다른 이들과의 협업 등을 위해 되도록이면 args나 kwargs를 사용합니다.

다음과 같이 인자의 개수를 원하는 대로 주어서 실행이 가능합니다.

def sum_function(*args):
    result  = 0
    for arg in args:
        result += arg
    return result
    
print(sum_function(1,2,3,4,5)) # 15

args(arguments)를 사용할 때는 변수 값만 전달하였다면, kwargs(keyword arguments)는 변수의 이름과 함께 사용이 가능합니다.

def my_func(**kwargs):
    for key, value in kwargs.items():
        print(f'{key} : {value}')
    
my_func(name='john doe', age=20, country='KR')

💡 *args의 데이터 타입은 tuple이고, **kwargs의 데이터 타입은 dict입니다.

다음과 같이 args와 kwargs를 동시에 사용할 수 있습니다.

def myFun(*args, **kwargs):
    print(f'args: {args}')
    print(f'kwargs: {kwargs}')
 
myFun('john doe', 20, 'KR', name='john doe', age=20, country='KR')

2.5. Type hints

함수의 인자 및 반환 값에 대한 데이터 타입을 명시하여 코드의 가독성과 안정성을 높일 수 있습니다.

💡 PEP 484에서 자세한 내용을 확인할 수 있습니다.

어떤 함수의 인자가 str형과 int형을 받아서 dict형의 데이터를 반환한다고 하면 다음과 같이 작성할 수 있습니다.

def my_func(a:str, b:int) -> dict:
    return {"name":a, "age":b}

print(my_func('john doe', 20))

하지만, 주석과 같은 용도이지 강제성이 없습니다.

즉, str형에 int를 전달하여도 오류가 나지 않고 int으로 취급됩니다.

def my_func(a:str, b:int) -> dict:
    print(type(a)) # <class 'int'>
    print(type(b)) # <class 'str'>

my_func(20, 'john doe')

💡 Keyword argument와 조합하고자 할때는 my_func(a:str, b:int=20)과 같이 Type hints 이후에 사용하면 됩니다.

profile
IT 도서관

0개의 댓글