CS

    Effective PYTHON 5장 - 클래스와 인터페이스

    5장 클래스와 인터페이스 37) 내장 타입을 여러 단계로 내포시키기보다는 클래스를 합성하라 내장 타입이 복잡하게 내포된 데이터를 값으로 사용하는 딕셔너리를 만들지 말라 :bangbang: 내부 클래스를 만들어 가독성 있게 관리하자 가벼운 불변 데이터 컨테이너가 필요하면 namedtuple을 사용하자 # 클래스를 이용하면 동적인 내부상태를 잘 관리할 수 있다 class SimpleGradebook: def __init__(self): self._grades = {} def add_student(self, name): self._grades[name] = [] def report_grade(self, name, score): self._grades[name].append(score) def average_g..

    Effective PYTHON 4장 - 컴프리헨션과 제너레이터

    4장 컴프리헨션과 제너레이터 27) map과 filter 대신 컴프리헨션을 사용하라 리스트 컴프리헨션은 lambda 식을 사용하지 않기 때문에 map, filter 내장 함수보다 더 명확하다 map 을 사용할 때 원소를 건너뛰려면 filter 가 필요하다 딕셔너리와 집합도 컴프리헨션으로 생성할 수 있다 even_squares = [x**2 for x in a if x % 2 == 0] even_squares_dict = {x: x**2 for x in a if x % 2 == 0} threes_cubed_set = { x**3 for x in a if x % 3 == 0} alt_dict = dict(map( lambda x: (x, x**2), filter(lambda x: x%2 == 0, a) ))..

    Effective PYTHON 3장 - 함수

    3장 함수 19) 함수가 여러 값을 반환하는 경우 절대로 네 값 이상을 언패킹하지 말라 함수가 여러 값을 투플로 패킹하여 반환하고, 호출하는 쪽에서 언패킹 구문을 쓸 수 있다 별표식을 이용해 여러값을 리스트로 받는 언패킹을 할 수도 있다 언패킹을 네개 이상 하면 실수하기 쉽다. 대신 작은 클래스 또는 namedtuple 인스턴스를 사용하자 from collections import namedtuple # 리스트로 필드 설정 (또는 'x y', 'x, y' 도 가능) Point = namedtuple('Point', ['x', 'y']) p = Point(11, y=22) # instantiate with positional or keyword arguments print(p[0] + p[1]) # ind..

    Effective PYTHON 2장 - 리스트와 딕셔너리

    2장 리스트와 딕셔너리 11) 시퀀스를 슬라이싱하는 방법을 익혀라 슬라이싱 할 때는 간결하게 하라. 시작 인덱스 에 0을 넣거나, 끝 인덱스 에 시퀀스 길이를 넣지 말라! 슬라이싱은 범위를 넘어가는 시작 인덱스나 끝 인덱스도 허용한다. ex) a[:20], a[-20:] 리스트 슬라이스에 대입하면 원래 시퀀스에서 슬라이스가 가리키는 부분을 대입연산자 오른쪽에 있는 시퀀스로 대치한다. 이때 대치되는 시퀀스의 길이가 달라도 된다. a = ['a','b','c','d','e','f','g','h'] # 리스트를 슬라이싱 한 결과는 완전히 새로운 리스트이다 b = a[3:] print('이전:', b) # >>> ['d','e','f','g','h'] b[1] = 99 print('이후:', b) # >>> [..

    Effective PYTHON 1장 - 파이썬답게 생각하기

    1장 파이썬답게 생각하기 01) 사용중인 파이썬의 버전을 알아두라 2020년 1월1일부터 파이썬2는 더이상 지원되지 않는다. 파이썬3를 사용할 것! Pyspark 는 python 3.8 이상과 호환되지 않는다. 3.7 버전을 사용해야 함 $ python3 --version Python 3.7.9 02) PEP 8 스타일 가이드를 따르라 공백 관련 스타일 가이드 Tab 대신에 Space 4칸을 사용하라 각 함수와 클래스 사이에, 클래스 내에서 메소드 사이에 빈 줄 2개를 넣어라 dict 에서 key 와 콜론(:) 사이에 공백을 넣지 말 것 변수 대입시 ‘=’ 앞뒤로 공백 타입 표기시 콜론(:)과 타입 사이에 공백 명명 규약 스타일 가이드 함수, 변수, 속성은 소문자와 밑줄을 사용 보호되어야 하는 인스턴스 ..