Ssa!

파이썬 실강 6일차! 본문

언어/python

파이썬 실강 6일차!

Ssa! 2022. 9. 15. 13:41

1. 함수 심화

인자에 기본값 지정해주기

parameter default value 즉 기본 매개변수라는 뜻으로 함수를 선언할 때 부터 인자값을 설정한다. 

아래 코드를 보면 (option=None) 처럼 할당해줄 수 있다. 또한 num1과 num2도 

num1 = 2 , num2= 3 처럼 처음부터 할당해 줄 수 있다. !

# 함수를 선언할 때 인자에 기본값을 지정해줄 수 있습니다.
EXPRESSION = {
        0: lambda x, y: x + y ,
        1: lambda x, y: x - y ,
        2: lambda x, y: x * y ,
        3: lambda x, y: x / y
    }

def calc(num1, num2, option=None): # 인자로 option이 들어오지 않는 경우 기본값 할당
    """
    option
     - 0: 더하기
     - 1: 빼기
     - 2: 곱하기
     - 3: 나누기
    """
    return EXPRESSION[option](num1, num2) if option in EXPRESSION.keys() else False

print(calc(10, 20))    # False
print(calc(10, 20, 0)) # 30
print(calc(10, 20, 1)) # -10
print(calc(10, 20, 2)) # 200
print(calc(10, 20, 3)) # 0.5

args/kwars에 대한 이해

args/kwars를 사용하면 좋은 점은 동적으로 데이터를 할당할 수 있다는 큰 장점이 있다

args는 튜플형태, kwargs는 딕셔너리형태이다.

 

(따로 변수이름을 정하는 것 처럼 *튜플 **딕셔너리 이런식으로 해도 같지만 파이썬의 스타일가이드의 약속대로 args, kwargs로 쓴다)

args(arguments)와 keyword arguments(kwargs)는 함수에서 인자로 받을 값들의 갯수가
불규칙하거나 많을 때 주로 사용된다

인자로 받을 값이 정해져있지 않기 때문에 함수를 더 동적으로 사용할 수 있다

함수를 선언할 때 args는 앞에 *를 붙여 명시하고, kwargs는 앞에 **를 붙여 명시한다.

 

먼저 args 활용 예제를 본다면

add라는 함수에 1,2,3,4,5,....어떤 숫자라도 넣을 수 있다. 위에서도 말했듯이 데이터를 동적으로 할당할 수 있다!

def add(*args):
    # args = (1, 2, 3, 4) -> 튜플형태
    result = 0
    for i in args:
        result += i
        
    return result

print(add())           # 0
print(add(1, 2, 3))    # 6
print(add(1, 2, 3, 4)) # 10

 

kwargs 활용 예제를 본다면 args라는 것과는 다르게 딕셔너리 형태로 가져온다,

(get 메소드는 key에 해당하는 value를 가져온다는 뜻이다)

def set_profile(**kwargs):
    """
    kwargs = {
        name: "lee",
        gender: "man",
        age: 32,
        birthday: "01/01",
        email: "python@sparta.com"
    }
    """ # -> 딕셔너리 형태
    profile = {}
    profile["name"] = kwargs.get("name", "-")
    profile["gender"] = kwargs.get("gender", "-")
    profile["birthday"] = kwargs.get("birthday", "-")
    profile["age"] = kwargs.get("age", "-")
    profile["phone"] = kwargs.get("phone", "-")
    profile["email"] = kwargs.get("email", "-")
    
    return profile

profile = set_profile(
    name="lee",
    gender="man",
    age=32,
    birthday="01/01",
    email="python@sparta.com",
)

print(profile)
# result print
"""
{   
    'name': 'lee',
    'gender': 'man',
    'birthday': '01/01',
    'age': 32,
    'phone': '-',
    'email': 'python@sparta.com'
}
"""

 

보통 args와 kwargs 를 활용할 때는 한개만 각각 잘 쓰지는 않고 두개를 잘 활용해서 쓴다고 한다. 특히 장고에서 수도 없이 볼 것이라고 튜터님이 말씀해주셨다. 

def print_arguments(a, b, *args, **kwargs):
    print(a)
    print(b)
    print(args)
    print(kwargs)
    
print_arguments(
    1, # a
    2, # b
    3, 4, 5, 6, # args
    hello="world", keyword="argument" # kwargs
)

# result print
"""
1
2
(3, 4, 5, 6)
{'hello': 'hello', 'world': 'world'}
"""

 

2. 패킹과 언패킹

패킹(packing)과 언패킹(unpacking)은 단어의 뜻 그대로 요소들을 묶어주거나 풀어주는
것을 의미한다.

list 혹은 dictionary의 값을 함수에 입력할 때 주로 사용한다.

리스트와 딕셔너리 뿐만 아니라 튜플, 집합도 가능하다, 너무 고정관념에 박혀있지는 말자. 밖에 있는 괄호를 없애준다!라고 생각하면 편하다. 그렇지만 괄호안에 괄호가 있는 경우는 둘다 풀 수 없다. 예를 들어 [ [1], 1,2,3,4]를 언패킹하자면

[1],2,3,4가 된다. 유의하자!

 

간단하게 list의 활용을 보자면

numbers에 있는 값을 언패킹을 해준 다음 add함수로 하나씩 더해준다.

그치만 여기서 함정이 있다 언패킹을 사용하지 않을 시 numbers = [1,2,3,4]가 덩어리 형태로 되어 TypeError가 뜨니 항상 조심하자!

def add(*args):
    result = 0
    for i in args:
        result += i
        
    return result

numbers = [1, 2, 3, 4]

print(add(*numbers)) # 10

"""아래 코드와 동일
print(add(1, 2, 3, 4))
"""

 

dict에서의 활용도 보자

딕셔너리 언패킹을 하려면 * 1개가 아닌 ** 2개를 써줘야 언패킹이 되는 것 유의하자!

def set_profile(**kwargs):
    profile = {}
    profile["name"] = kwargs.get("name", "-")
    profile["gender"] = kwargs.get("gender", "-")
    profile["birthday"] = kwargs.get("birthday", "-")
    profile["age"] = kwargs.get("age", "-")
    profile["phone"] = kwargs.get("phone", "-")
    profile["email"] = kwargs.get("email", "-")
    
    return profile

user_profile = {
    "name": "lee",
    "gender": "man",
    "age": 32,
    "birthday": "01/01",
    "email": "python@sparta.com",
}

print(set_profile(**user_profile))
""" 아래 코드와 동일
profile = set_profile(
    name="lee",
    gender="man",
    age=32,
    birthday="01/01",
    email="python@sparta.com",
)
"""

# result print
"""
{
    'name': 'lee',
    'gender': 'man',
    'birthday': '01/01',
    'age': 32,
    'phone': '-',
    'email': 'python@sparta.com'
}

"""

 

느낀점

파이썬에 대한 기본 개념 강의는 끝이 났다. 맛보기로 튜터님이 객체지향에 대해서도 가르쳐주셨는데 아직은 이해가 잘안다. class의 상위개념이라 어려운 것도 있다. 기본 파이썬 개념에 머무리지말고 더 깊숙하게 들어가고 싶다! 파이썬 실강은 끝이 났지만 계속해서 파이썬에 관한 심화 개념을 올릴 예정이다! 

'언어 > python' 카테고리의 다른 글

파이썬 문법 응용 과제  (0) 2022.09.15
파이썬 심화 문법 과제 (튜터님)  (0) 2022.09.15
파이썬 심화 문법 과제  (0) 2022.09.14
파이썬 실강 5일차!  (0) 2022.09.14
파이썬 클래스 과제  (0) 2022.09.14