2022-09-20 Naver boostcamp 일일노트

Pythonic Code

1. List Comprehension

  • 파이썬에서 가장 많이 사용되는 기법
  • 일반적으로 for + append 보다 속도가 빠름
  • nested list

      result = [i + j for i in word_1 for j in word_2]
    

    이것은 곧 아래와 같음. 이중 for문을 이어붙였다고 생각하면 된다.

      for i in word_1:
          for j in word_2:
              result.append(i+j)		
    

    pprint - print를 더 깔끔하게 해줌.

  • dict 타입도 선언 가능
    {key : value for key, value in enumerate(my_str)}

2. lambda

  • (lambda x, y : x + y)(10, 50) 와 같은 형태로 바로 출력할 수도 있음.

  • PEP 8에서는 lambda의 사용을 권장하진 않는다고 하나 여전히 많이 쓰임.

  • PEP 8:
    YES : def f(x): return 2*x
    NO : f = lambda x: 2*x

3. functools.reduce

  • map function과 달리 list에 똑같은 함수를 적용해서 통합함.

      from functools import reduce
    
      print(reduce(lambda x, y: x+y, [1,2,3,4,5]))
    
      >>> 15
    

4. generator

  • 함수에서, return 대신에 yield를 사용해 iterable에서 값을 하나씩 반환
  • print 등 호출 시에만 값을 반환하기 때문에 메모리를 적게 쓸 수 있다는 장점이 있다.
  • 대용량의 데이터를 사용할 때 권장됨.

  • generator과 iterator의 차이
    gen_ex = (n*n for n in range(500))
    list_ex = [n*n for n in range(500)]
    
  • list 타입 데이터 반환 함수는 generator로 만들면 메모리 절약 가능

5. 가변인자, 키워드 가변인자 - asterisk (*)

  • 가변인자 : 개수가 정해지지 않은 변수를 parameter로 사용하는 법
  • *args 를 변수명으로 사용하며, 입력 인자들을 tuple로 값을 저장함.

  • 키워드 가변인자: **kwargs 로 사용하며, 입력 인자들을 키:값 의 dict 타입으로 저장함.

  • 입력 형식 순서 : 키워드 인자, 가변인자, 키워드 가변인자 순으로 사용해야 함.

6. unpacking container 로 쓰이는 asterisk(*)

  • *(1,2,3,4,5) 는 unpacking 으로 내부 요소들로 풀리기 때문에 *args에 일일이 , 로 구별하여 넣어주지 않아도 됨.
      func(1, *(2,3,4,5,6)) 
      --> func(1,2,3,4,5,6)
    
      print(*(2,3,4,5,6))
      --> 2 3 4 5 6
    

© 2023. All rights reserved.