파이썬 코딩 한줄

함수에서 *args 와 **kwargs를 알아보자

soopy 2022. 11. 3. 19:24
728x90

 

*args와 **kwargs의 용도에 대해서 알아봅시다.

(반드시 args, kwargs라는 명칭을 사용하지 않아도 됩니다. *apple로 써도 됩니다.)

 

*args

*args는 몇 개의 입력값을 받을지 정해지지 않았을 경우에 대해 사용합니다.
*args가 튜플 형태로 전달되는 것을 확인할 수 있습니다.
*args는 항상 입력 파라미터의 마지막 단에 위치해야 합니다.(**kwargs보다는 앞에)

class Team:
    """팀 노드 생성"""
    def __init__(self, *args):
        self.member = args  # 다음 노드에 대한 레퍼런스

team1 = Team("강아지", "토끼", "고양이")
team2 = Team("사슴", "호랑이")
team3 = Team("개미", "코끼리", "생쥐", "악어")

print(
    team1.member, 
    team2.member, 
    team3.member, 
)

>> ('강아지', '토끼', '고양이') ('사슴', '호랑이') ('개미', '코끼리', '생쥐', '악어')

 

 

**kwargs

**kwargs는 dictionary 처럼 key: value 쌍을 입력받습니다.  
**kwargs의 key: value 조합은 자유롭습니다.
복수의 **kwargs 입력도 가능합니다.

# 가입된 맴버과 패스워드
members = {
    'apple': 123456, 
    'ball': 135, 
    'cat' : 13579
}

def check_members(**kwargs):
    msg = []
    for name in kwargs.keys():
        
        if name in members.keys():
            if members[name] != kwargs[name]:
                msg.append(f"{name}님, 비밀번호를 다시 입력해주세요")


        else:
            msg.append(f"{name}님은 팀 명단에 이름이 없습니다.")


    if len(msg) == 0:
        return ["맴버 전원 확인 완료되었습니다."]
    else:
        return msg

print(check_members(apple=123456, ball=135, cat=13578, doll=112), end=f"\n{'='*50}\n")
print(check_members(apple=123456, ball=135, cat=13579))

>>
['cat님, 비밀번호를 다시 입력해주세요', 'doll님은 팀 명단에 이름이 없습니다.']
==================================================
['맴버 전원 확인 완료되었습니다.']

 

입력값으로 받은 맴버가 명단에 있는지, 패스워드는 올바른지 등에 대한 정보를 판별하는 코드를 작성해봤습니다.
굳이 이렇게? 라는 생각이 드시는게 당연하실텐데요. **kwargs의 이해를 돕기위한 것임을 기억해 주세요!!

 

 

728x90
728x90