[부스트캠프 AI-Tech] 1주차 Day 2

LKM·2022년 1월 23일
0

✏️학습 정리


3-1 Python Data Structure

  • 스택 (Stack)

    • LIFO 구조
  • 큐 (Queue)

    • FIFO 구조
  • 튜플 (Tuple)

    • 값이 변경이 불가능한 리스트 (연산, 인덱싱, 슬라이싱은 동일)
    • 변경되지 않은 데이터의 저장에 사용
  • 집합 (Set)

    • 순서없이 저장, 중복 불허 하는 자료형
    • 다양한 집합 연산 가능
  • 딕셔너리 (dictionary)

    • key - value 로 데이터를 저장
    • 다른 언어에서는 Hash Table이라고 불림
  • Collections

    • 파이썬 빌트인 확장 자료 구조 모듈
    • deque
      • 스택과 큐를 모두 지원
      • List에 비해 효율적인 저장 방식을 지원
      • Linked List의 특성을 지원
    • ordered dict
      • 데이터를 입력한 순서대로 dict를 반환
      • python 3.6부터는 입력한 순서를 보장하여 기본 dict와 차이가 없다..
    • defaultdict
      • dict type의 값에 기본 값을 지정

        from collections import defaultdict
        dic = defaultdict(int)  # Defalut 값을 0으로 설정
        dic = defaultdict(lambda: 0)  # Defalut 값을 0으로 설정
    • counter
      • sequence type의 data element들의 갯수를 dict 형태로 반환
      • set의 연산들을 지원
    • namedtuple
      • data 구조체를 저장하는 방법

        from collections import namedtuple
        Point = namedtuple('Point', ['x','y'])
        p = Point(3, y=4)
        print(p[0] + p[1])  # 7
        x, y = p
        print(p.x + p.y)  # 7



3-2 Pythonic Code

  • 파이썬 스타일 코드
    • 파이썬 특유의 문법을 활용하여 효율적으로 코드 표현
    • 고급 코드 작성 시 더 많이 필요해짐
    • why 사용??
      • 많은 개발자들이 python 스타일로 코딩 (남의 코드 이해를 위해)
      • 효율 (ex. 단순 for loop append 보다 list comprehension이 더 빠르다)
  • Split & Join
    • split: 기준값으로 나눠서 리스트로 반환
    • join: string으로 구성된 리스트를 합쳐 하나의 string으로 반환
  • List Comprehension
    • 가장 많이 사용되는 기법 중 하나

      num1 = [i for i in range(5)]  # [1, 2, 3, 4, 5]
      num2 = [i+j for i in range(3) for j in range(3)]  # [0, 1, 2, 1, 2, 3, 2, 3, 4]
      num3 = [i for i in range(10) if i % 2 == 0]  # [0, 2, 4, 6, 8]

      tip) pprint: 정렬되어 출력!

  • Enumerate & Zip
    • enumerate: 리스트의 element를 추출할 때 번호를 붙여서 추출
    • zip: 두 개의 리스트의 값을 병렬적으로 추출
  • Lambda & Map & Reduce
    • lambda
      • 함수처럼 쓸 수 있는 익명함수
      • 문제점
        • 테스트의 어려움
        • 코드 해석의 어려움
        • 그래도 많이 쓴다....
    • map
      • 리스트의 요소를 지정된 함수로 처리해주는 함수입니다
    • reduce
      • map과 달리 리스트에 똑같은 함수를 적용해서 통합 (누적 느낌)
    • 결론
      • 코드의 직관성이 떨어져 python 3에서 사용을 권장하지 않는다.
      • 하지만 다양한 머신러닝 코드에서 여전히 사용중..
  • Iterable Object
  • Generator
    • iterable object를 특수한 형태로 사용해주는 함수
    • yield를 사용해 한번에 하나의 element만 반환
    • generator expression: [] 대신 ()를 사용 (list comprehension과 유사한 형태)
    • why 사용??
      • 일반적인 itertor에 비해 훨씬 효율적인 메모리 사용
      • 데이터가 커도 처리의 어려움이 없음
  • Function Passing Arguments
    • keyword arguments

      • 함수에 입력되는 parameter의 변수명을 사용, arguments를 넘김
    • default arguments
      - parameter의 기본 값을 사용, 입력하지 않을 경우 기본값 출력

      def func1(x,y):  # keyword arguments
      		print(x,y)
      
      def func2(x,y=1):  # default arguments
      		print(x,y)
    • Variable-length arguments

      • 가변인자
        • 개수가 정해지지 않은 변수

        • asterisk(*) 기호를 사용하여 함수의 parameter를 표시

          def func1(*args):
          		x, y, z = args
          		print(x, y, z)
          
          func1(1, 2, 3)
      • 키워드 가변인자
        • asterisk(*) 두개를 사용하여 함수의 parameter를 표시

        • 입력된 값은 dict로 사용할 수 있음

        • 기존 가변인자 다음에 사용

          def func1(**kwargs):
          		print(kwars)
          
          func1(first=1, second=2, third=3)
          
          # tip parameter 순서
          keyword -> default -> 가변인자 -> 키워드 가변인자
          (one, two, *args, **kwargs)
          (one = 10, two, 3, 4, 5, first=3, ...)  # error
          
      • asterisk
        • tuple, dict 등 자료형에 들어가 있는 값을 언패킹

          num = [[1, 2], [3, 4], [5, 6]]
          print(num)  # [[1, 2], [3, 4], [5, 6]]
          print(*num)  # [1, 2] [3, 4] [5, 6]


4-1 Python Object-Oriented Programming

  • 객체 지향 프로그래밍

    • 객체: 실생활에서 일종의 물건 (속성과 행동 가짐)
    • 속성 → 변수, 행동 → 함수로 표현됨
    • 클래스(설계도)와 인스턴스(실제 구현체)로 나눔
  • Class

    class SoccerPlayer(object):
    	def __init__(self, name, position):  # 객체 초기화 예약 함수
    		self.name = name
    		self.position = position
    	def change_name(self, new_name):  # method(action) 추가
    		print("선수의 이름을 변경합니다")
    		self.name = new_name
    
    jisung = SoccerPlayer("jisung", "MF")  #  objects 생성
  • Inheritance (상속)

    • 부모클래스로부터 속성과 Method를 물려받은 자식 클래스를 생성하는 것
  • Polymorphism (다형성)

    • 같은 이름 메소드의 내부 로직을 다르게 작성
  • Visibility (가시성)

    • 객체의 정보를 볼 수 있는 레벨을 조절하는 것
    • Why 필요?
      • 객체를 사용하는 사용자가 임의로 정보 수정
      • 필요 없는 정보에는 접근 할 필요가 없음
      • 제품 판매시 소스의 보호
  • Decorate

    • first-class objects
      • parameter로 전달이 가능 + 리턴 값으로 사용 가능
      • 파이썬의 함수는 일급 함수(객체)
    • Inner-function
      • 함수 내에 또 다른 함수가 존재

        def outer():
        	def inner():
        		...
      • closures: inner function을 return 값을 반환

        def outer():
        	def inner():
        		print("hello")
        	return inner
    • decorator
      • 복잡한 클로져 함수를 간단하게



4-2 Module and Project

  • Module

    • 어떤 대상의 부분 혹은 조각
    • 프로그램에서는 작은 프로그램 조각들
    • namespace
      • 모듈을 호출할 때 범위 정하는 방법
      • 필요한 내용만 골라서 호출 가능
      • from 과 import 키워드를 사용
  • Package

    • 모듈을 모아놓은 단위
    • 하나의 대형 프로젝트를 만드는 코드의 묶음
    • __init__, __main__ 등 키워드 파일명이 사용됨
    • 모듈들의 합, 폴더로 연결됨
    • __init__.py
      • 현재 폴더가 패키지임을 알리는 초기화 스크립트 (3.3 버전부터는 없어도됨)
      • import와 __all__ 키워드 사용
  • Virtual Environment

    • 프로젝트 진행 시 필요한 패키지만 설치하는 환경
    • 대표적인 두가지
      • virtualenv + pip
        • 가장 대표적인 관리도구
        • 레퍼런스 + 패키지 개수가 장점
      • conda
        • 상용 가상환경도구
        • 설치의 용이성, window에서 장점
profile
함께 자라기

0개의 댓글