args 문법 기초개념

2019-05-21

.

그림, 실습코드 등 학습자료 출처 : https://gitlab.com/radajin

1. arg앞에 ‘ * ‘ 의 유무에 따른 차이 이해

def test(*args):
    print(args)
    
data = [1, 2, 3] 

test(data) 
# ([1, 2, 3]) -> ([1, 2, 3],)
test(*data) 
# (1, 2, 3) -> (1, 2, 3)
([1, 2, 3],)
(1, 2, 3)

2. map function을 이용한 arg 문법활용 예제 1

ls1 = [1,2,3,4]
ls2 = [5,6,7]
ls3 = [9,10,11,12]

def map_func(func, *args):
    return [func(*datas) for datas in zip(args)]

result = map_func(lambda args : sum(args), ls1, ls2, ls3)

result
[10, 18, 42]

2. map function을 이용한 arg 문법활용 예제 2

ls1 = [1,2,3,4]
ls2 = [5,6,7]
ls3 = [9,10,11,12]

def map_func(func, *args):
    
    results = []
    print("zip(args) : ", list(zip(args)))
    print("zip(*args) : ", list(zip(*args)))
    
    for datas in zip(args):
        
        # ([1, 2, 3, 4],) - ([5, 6, 7],) - ([9, 10, 11, 12],)
        print("datas:", datas, end=" ")            
        
        # [1, 2, 3, 4] - [5, 6, 7] - [9, 10, 11, 12]
        print("*datas:", *datas, end=" ")           
        
        # 아래와 같이 3번 func 함수를 호출한다.
        # func([1, 2, 3, 4]) - func([5, 6, 7]) - func([9, 10, 11, 12]) 
        # lambda args : sum(args) 함수에서 
        # lambda 함수의 args 는 [1, 2, 3, 4] - [5, 6, 7] - [9, 10, 11, 12] 를 받아서 sum 함수를 실행한다.
        result = func(*datas)  
        print("result:", result, end=" ")           
        
        # 결과 데이터 저장
        results.append(result)
        print()
        
    return results

#     return [func(*datas) for datas in zip(args)]

result = map_func(lambda args : sum(args), ls1, ls2, ls3)

result
zip(args) :  [([1, 2, 3, 4],), ([5, 6, 7],), ([9, 10, 11, 12],)]
zip(*args) :  [(1, 5, 9), (2, 6, 10), (3, 7, 11)]
datas: ([1, 2, 3, 4],) *datas: [1, 2, 3, 4] result: 10 
datas: ([5, 6, 7],) *datas: [5, 6, 7] result: 18 
datas: ([9, 10, 11, 12],) *datas: [9, 10, 11, 12] result: 42 





[10, 18, 42]

3. map function을 이용한 arg 문법활용 예제 3

ls1 = [1,2,3,4]
ls2 = [5,6,7]
ls3 = [9,10,11,12]

def map_func(func, *args):
    print("zip(*args) : ", list(zip(*args)))
    return [func(*datas) for datas in zip(*args)]

result = map_func(lambda *args : sum(args), ls1, ls2, ls3)

result
zip(*args) :  [(1, 5, 9), (2, 6, 10), (3, 7, 11)]





[15, 18, 21]