KalelPark's LAB

[ CLEAN CODE ] 왈러스 연산자, ZIP, Packing, Unpacking? 본문

Python/CLEAN CODE

[ CLEAN CODE ] 왈러스 연산자, ZIP, Packing, Unpacking?

kalelpark 2023. 3. 13. 09:51

Packing & Unpacking 

Packing : 인자로 받은 여러개의 값을 하나의 객체로 합쳐서 받을 수 있도록 합니다.

                 tuple은 *를 사용하여, 나타냅니다. 반면에 **의 경우, dictionary로써 사용됩니다.

def func(*args):
    print(args)
    print(type(args))

// func(1, 2, 3, 4, 5, 6, 'a', 'b')

// result
// (1, 2, 3, 4, 5, 6, 'a', 'b')
// <class 'tuple'>

def kwpacking(**kwargs):
     print(kwargs)
     print(type(kwargs)

// kwpacking(a=1, b=2, c=3)

// result
// {'a': 1, 'b': 2, 'c': 3}
// <class 'dict'>

 

Unpacking : 함수를 호출할 때, 인자를 해체하는 개념이기 때문에, 해체된 결과가 함수의 매겨변수에 갯수가 다르다면 에러가 발생합니다.

def cal(first, op, second):
    if op == '+':
        return first + second
    if op == '/':
        return first / second
    if op == '-':
        return first - second
    if op == '*':
        return first * second

prob = {
  'first': 12,
  'second': 34,
  'op': '*'
}

cal(**prob) # 결과 : 408

 

ZIP 원리

      - 자신이 감싼 이러테리어 중 어느 하나가 끝날 때까지 튜플을 내놓습니다. 그러므로, 가장 짧은 입력의 길이와 동일합니다.

         만약 길게 출력을 하고 싶다면, itertools.zip_longest를 사용하면 됩니다.

names = ["Celcilia", "남궁민수", "손수건"]
counts = [len(n) for n in names]

names.append("Rosalind")
for name, cot in (names, counts):
    print(name)
    
import itertools
for name, count in itertools.zip_longest(names, counts):
    print(f"{name} : {count}")

왈러스 연산자 ( := )

      - 대입식은 영어로 assignment expression이라고 불린다.

         왈러스 연산자는 변수를 사용하는데, 한번만 활용하고, 사용하지 않는 경우 사용합니다.  (큰 의미가 없는 변수임을 명확히 함)

fruit = {"사과" : 10, "바나나" : 20, "레몬" : 300}
if count:= fruit.get("사과", 0):
    print(count)
else:
    print(2)
    
// result : 10

 

Comments