관리 메뉴

웹개발자의 기지개

[Python] 함수 가변인자 공부하기 - *args, **kargs 패킹/언패킹 본문

python

[Python] 함수 가변인자 공부하기 - *args, **kargs 패킹/언패킹

웹개발자 워니 2025. 3. 27. 21:26

함수 튜플/딕셔너리 언패킹

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def concatenate_strings(*args):
    return ''.join(args)
 
# 메인 실행 부분
def main():
    n = int(input("몇 개의 문자열을 입력하시겠습니까? "))
    strings = []
    
    for i in range(n):
        s = input(f"{i + 1}번째 문자열을 입력하세요: ")
        strings.append(s)
    
    result = concatenate_strings(*strings)
    print("합쳐진 문자열:", result)
 
# 함수 실행
main()
cs

 

실행결과

------ 
몇 개의 문자열을 입력하시겠습니까? 3
1번째 문자열을 입력하세요: 안녕
2번째 문자열을 입력하세요: 하세요
3번째 문자열을 입력하세요: 파이썬
합쳐진 문자열: 안녕하세요파이썬
------

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def concatenate_strings(*args):
    result = ''
    for string in args:
        result += string
    return result
 
string_list = []
num = int(input("몇 개의 문자열을 받을까요? 문자열 개수를 입력해주세요: "))
 
for i in range(num):
    s = input(f"{i + 1}번째 문자열을 입력해주세요: ")
    string_list.append(s)
 
print("\n입력한 문자열 목록:", string_list)
print("-" * 30)
print("합쳐진 문자열:", concatenate_strings(*string_list))
cs

 

실행결과

---------
몇 개의 문자열을 받을까요? 문자열 개수를 입력해주세요: 3
1번째 문자열을 입력해주세요: 안녕
2번째 문자열을 입력해주세요: 하세요
3번째 문자열을 입력해주세요: 파이썬

입력한 문자열 목록: ['안녕', '하세요', '파이썬']
------------------------------
합쳐진 문자열: 안녕하세요파이썬

---------

 

string_list = ["안녕", "하세요", "파이썬"]  # 리스트다
concatenate_strings(*string_list)

내부적으로 string_list은 튜플처리된다.
내부적으로 args = ("안녕", "하세요", "파이썬") 처리된다.


concatenate_strings("안녕", "하세요", "파이썬") 
직접 args = ("안녕", "하세요", "파이썬") 되어서 정상 입력된다.


concatenate_strings("a", "b")      -> args = ("a", "b")
concatenate_strings(*["a", "b"])   -> args = ("a", "b") (리스트 언패킹됨)
concatenate_strings(("a", "b"))    -> args = (("a", "b"),) (튜플 한 개)
concatenate_strings(*("a", "b"))   -> args = ("a", "b") (튜플 언패킹됨)

 

 

**kwargs란?
**kwargs는 **Keyword Arguments(키워드 인자)**를 받아서 처리하는 파이썬의 가변 인자 문법

즉, 인자를 key=value 형태로 여러 개 넘길 수 있다. 함수 안에서는 이것이 딕셔너리로 들어온다.

 

1
2
3
4
def show_info(**kwargs):
    print(kwargs)
 
show_info(name="Alice", age=25, job="Developer")
cs

 

실행결과

{'name': 'Alice', 'age': 25, 'job': 'Developer'}

 

 

**kargs 언패킹

 

1
2
3
4
5
6
7
8
9
10
11
def show_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key} : {value}")
 
info = {
    "name""Bob",
    "age"30,
    "language""Python"
}
 
show_info(**info)  # 딕셔너리를 언패킹해서 넘김
cs

 

실행결과

-------

name : Bob
age : 30
language : Python

-------

 

 

주의할점은 *args 가 **kargs 보다 먼저와야 한다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# *args를 이용한 가변 인자 (패킹)
def sum_all(*args):
    total = 0
    for num in args:
        total += num
    return total
 
print(sum_all(123))  # 출력: 6
print(sum_all(12345))  # 출력: 15
 
# **kwargs를 이용한 키워드 가변 인자 (패킹)
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")
 
print_info(name="홍길동", age=30, city="서울")
# 출력:
# name: 홍길동
# age: 30
# city: 서울
 
# 언패킹을 이용한 함수 호출
numbers = [12345]
print(sum_all(*numbers))  # 리스트를 언패킹하여 인자로 전달, 출력: 15
 
person = {"name""홍길동""age"30"city""서울"}
print_info(**person)  # 딕셔너리를 언패킹하여 키워드 인자로 전달
cs

 

 

https://wikidocs.net/22801

 

3) packing, unpacking

`print`함수는 출력하고자하는 객체가 몇개던지, 즉 몇개의 인자를 받던지 상관하지 않고 출력해줍니다. ``` print("가나다 abc 123") print("가나다"…

wikidocs.net

 

 

 

Comments