코딩과외#2 2020/03/11/수

정은경·2020년 3월 19일
0

🧩 Me Today 

목록 보기
17/48

코드리뷰

"""
1. csv 파일 저장하기
2. csv 파일 읽어오기
3. 현재 내용 콘솔 출력
4. 연락처 설계

회원정보:
이름/휴대폰번호/집주소/등록일/
"""
  • 파이썬 함수이름은 소문자! "snake_case"로!
  • CSV 파일의 포맷: 보통은 ','로 구분 짓는 형태
  • with open
  • contest manager
  • hard coding
  • 파일 입출력에서 제일 중요한 것은 encoding!
  • 함수는 범용성이 중요
  • 함수와 함수 간은 서로 don't care하도록 작성해야 함

1. Contests Manager

  • 대표적으로 파일을 열때 씀
  • 파일을 열면 항상 마지막에 close를 해야 함
  • 요즘 os들은 프로세스가 종료되면 왠만하면 리소스를 반환하도록 함
  • 부득이하게 리소스를 반환하지 못하는 경우가 간혹 발생하는데, 이때 with를 씀!
  • "with"를 contensts manager protocol이라고 함
  • with open
    with open(CSV_PATH, 'w', newline='') as f:
        pass
        
    # open에 의한 리턴값을 as 이하인 "f"가 같는다라는 의미!
    # 즉, "f"는 open 이하!
    # "f"의 유효범위는 마치 로컬변수처럼! with가 끝날때 까지만!
    # with 이하의 실행문이 다 실행되면 자동으로 "close"를 호출함
  • with open 문 진입(enter)할 때 contests manager 호출
  • with open 문이 끝날(exit) 때 미리 지정된 특정한 작업을 실행 (파일의 경우는 'close')
  • contests manager 왜 등장?!
    • 실수가 많고 예외상황에서 보장하기 위해서
  • 함수는 함수의 이름에 따른 최소한의 기능만 처리할 것!
    • 파일에 대한 예외처리는 데코레이터를 통해서!
    • 파일저장 함수는 파일 저장만! (예외처리는 x)
    • 파일읽기 함순은 파일 읽기만!
  • 데이터의 포맷체크는 is_validate() 라는 함수를 별도로 만들어서 체크!

2. NO! Hard Coding!

  • 특정한 값을 코드 안에 쓴는 것을 지양해야함!
  • 인자값으로 받을 것!

3. 함수와 Unit

  • 함수를 'unit'이라고 하기도 함
  • 함수 하나에는 하나의 기능만!
  • TDD에서 unit은 테스트 단위
  • 함수는 15줄을 넘어가면 안됨!
  • 함수는 '함수이름'에서 의미하는 최소한의 기능만을 구현해야함!

4. 변수명/함수명 Naming Rule

  • CamelCase
  • snake_case

5. 코딩작성 Don't 3대장:

  • Hard Coding X
  • 글로벌 변수 사용 X
    • 글로벌 함수는 되도록 지양
    • 만약에 써야한다면 코드의 맨 첫줄에 위치
    • 글로벌 변수를 쓰면 안되는 이유들:
      • 글로벌 변수는 프로그램 시작부터 프로그램이 종료될 때까지 해제가 안됨! 계속 메모리에 상주!
      • OOP의 개념에서 글로벌 변수는 파편화되어 있음 (파편화<->응집)
  • 재귀함수 사용 X

오늘의 학습

1.파이썬은 main 함수가 별도로 없음

  • c언어, java 등은 main 함수에 entry 포인트가 있으나,
  • 파이썬은 그냥 실행하는 파일 자체에 entry 포인트가 있음
  • 즉, 파이썬은 entry 포인트에 대한 정의가 별도로 없음

2. '코드를 잘짜는 가'를 판단하는 기준

  • 그 기준에는 여러가지가 있지만
  • 코드를 얼마나 testable하게 짜는 가가 중요!
  • Unit Test는 하나의 function에서 하나의 기능만 테스트를 함!
  • function 안에 하나를 초과하는 기능이 있으면 테스트하기 어려움

3. 리스트

  • 동적으로 할당가능
  • 리스트의 이름은 복수형으로!
  • [참고] C언어 링크드 리스트: 다이나믹하게 메모리 공간을 할당해서 쓰는 것
  • 리스트를 초기화하는 방법 (2가지):
    # 파이썬 2.0에서
    a = []
    
    # 파이썬 3.0부터 권장!
    # 클래스의 초기화
    a= list()
  • 리스트와 리스트는 '덧셈'연산이 가능
  • 파이썬은 모든 데이터형이 클래스임!! 이는 특별한 점!
  • 파이썬은 메모리를 직접 제어하지 않음
  • list comprehension
    • 다중 for문도 가능
      path = [i for i in range(10)]

4. for문

  • data는 sequential한 데이터
  • sequential한 데이터에서 하나씩 받아오는, i(index)는 임시 변수
    for i in data:
       pass
  • for문은 어떤 범위를 반복적으로 처리하는 것
  • list는 반복적인 데이터 그자체
    for number in numbers:
        pass

5. enumerate

  • 파이썬 3.0부터 enumerate 사용을 권고
  • '_'는 해당 변수를 안쓰겠다는 의미

6. 파이썬 swap

  • 파이썬 문법자체가! 멀티 디파인이 가능!

7. Packing/Un-packing

numbers = [i for i in range(10)]
# print(numbers)
# print(*numbers)
# print(numbers[0], )
path = [i for i in range(10)]
start, *b, end = path
print(start, *b, end)

느낀 점

profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글