- 인덴트
- 공식 가이드 PEP(Python Enhancement Proposals)에 따라 공백 4칸을 원칙으로 한다.
- 추가적으로 첫 번째 줄에 파라미터가 있고, 다음줄까지 넘어가게 되었다면
다음줄의 첫 시작을 첫 번째 파라미터 시작 위치와 맞춰준다. - (그냥 pycharm 같은 IDE 사용하면 편하다 🙂)
- 네이밍 컨벤션
- 스네이크 케이스를 따른다 (파이썬의 PEP8 및 철학에 의해) (
- 스네이크 표기법은 단어를 밑줄로 구분 (예. blog_name)
- 반면 자바에서는 카멜 표기법을 따른다. (예. blogName)
- 스네이크 케이스를 따른다 (파이썬의 PEP8 및 철학에 의해) (
- 타입 힌트
- PEP 484 문서에 타입을 지정할 수 있는 타입 힌트가 추가되었다 (3.5 버전 이상부터 사용 가능)
- 타입 힌트를 사용하여 함수의 매개변수, 리턴값의 타입을 지정해주면 가독성이 좋아지고 버그 발생 확률 또한 낮아진다
- def function(a: int) -> bool: // 이런식으로 타입을 명시해줄 수 있다.
- 리스트 컴프리헨션
- 파이썬은 람다 표현식을 지원한다.
- 람다 표현식에 map, filter를 사용하는 것보다 리스트 컴프리헨션 사용하면 가독성 좋아진다.
- 예1) [i for i in range(1, 11) if i%2==0]
- 예2) {key:value for key, value in original_dict.items()}
- 제너레이터
- 제너레이터가 없이 숫자 1억 개 만들어 계산하는 프로그램 작성한다고 하면, 메모리에 숫자 1억 개를 보관해야 한다.
- 메모리 사용의 비효율성으로 이어질 수 있기 때문에 제너레이터의 사용법을 익혀두도록 하자. (아래에 코드 첨부)
- yield 키워드를 사용한다.
- range
- 제너레이터의 방식을 활용하는 대표적인 함수가 range이다.
- range() 호출하면 range 클래스를 리턴한다.
- for문에서 range를 사용하면 내부적으로 next()를 호출하여 다음 숫자를 생성하게 된다.
- enumerate
- 순서가 있는 자료형을 인덱스를 포함한 enumerate 객체로 리턴한다.
- 순서가 있는 자료형을 인덱스를 포함한 enumerate 객체로 리턴한다.
- 나눗셈 연산자 //
- 파이썬 2 이하 버전에서는 정수 / 정수는 정수를 리턴해주었다.
- 하지만 파이썬 3 버전에서는 정수 / 정수는 실수를 리턴해준다.
- 따라서 // 연산자를 추가하여 파이썬 2 이하 버전의 나눗셈 연산자와 동일한 역할을 수행하도록 한 것이다.
- +) 몫과 나머지를 한 번에 구하기 위해서는 divmod 함수를 사용하면 된다
- print
- 디버깅에서 사용하기 위한 print의 다양한 기능
- print(x, y) : 콤마로 출력할 변수 구분하기
- print(x, y, sep=", ")
- print(x, end=' ') : default로 end는 '\n'이다.
- print(' '.join(list)) : 리스트 출력 시 사용하면 좋다
- print('{0} : {1}'.format(x, y))
- print(f'{x} : {y}') : f-string(formated string literal) 방법 (3.6 이상의 버전에서만 지원)
- 디버깅에서 사용하기 위한 print의 다양한 기능
- pass
- 아직 코드를 작성하지 않은 부분에서 pass를 삽입할 수 있다.
- pass를 사용하면 전체적인 코드의 골격을 잡기 편하다.
- locals
- 로컬에 선언된 모든 변수를 조회할 수 있는 강력한 명령으로, 디버깅에 많은 도움이 된다.
- 사용 >
imprt pprint
pprint.pprint(locals())
### 제너레이터 관련 코드
def get_sum():
n = 0
while True:
n += 1
yield n
sum = get_sum() # 함수 호출하면 generator가 리턴된다
for _ in range(1, 10):
print(next(sum)) # 1 2 3 4 5 6 7 8 9 10
# next를 통해 다음 값을 생성한다.
def generator():
yield 1
yield 'string'
yield True
g = generator()
print(g.next()) # 1
print(g.next()) # 'string'
print(g.next()) # True
코드 스타일
- 변수명과 주석
- 변수명은 의미를 부여해서 작성하도록 한다.
- 주석은 되도록 작성하도록 한다.
- 주석을 영어로 작성하는 데 부담이 없도록 해야한다.
- 코딩 테스트 시 주석을 작성하는 것을 지향하도록 하자
- 리스트 컴프리헨션
- list comprehension은 파이썬의 강력한 기능 중 하나이지만, 자칫 잘못 사용하면 가독성을 떨어트린다.
- 리스트 컴프리헨션은 표현식이 2개를 넘지 않도록 하고,
- 가독성을 위해 list comprehension이 아니라, 풀어서 작성하는 것이 좋을 수 있다.
- 함수의 기본 값으로 가변 객체를 사용하지 말고, 불변 객체를 사용해야 한다.
- 함수가 객체를 수정하면 기본값이 변경되기 때문에 매개변수의 기본값으로 [], {} 사용하는 것은 지양
- 대신에 None을 명시적으로 할당하는 것이 좋다.
- 명시적으로 비교 조건을 걸어두기
- if i % 10 이 아니라
- if i%10 != 0 이런 식으로 조건을 명시적으로 적어주는 게 가독성을 높인다.
- 세미콜론은 지양해야 한다. 세미콜론 사용하여 2 문장을 한 줄에 쓰지 않도록 해야 한다.
- 가로줄의 길이는 최대 80자로 한다.
'다전공_컴퓨터공학 > 알고리즘 문제풀이' 카테고리의 다른 글
[파이썬 알고리즘] 6장 - 문자열 조작 (valid palindrome) (0) | 2020.11.02 |
---|---|
[파이썬 알고리즘] 4장 - 자료형 (0) | 2020.10.31 |
[파이썬 알고리즘] 4장 - 빅오 (0) | 2020.10.31 |
[파이썬 알고리즘] 2장 프로그래밍 언어 선택 (0) | 2020.10.30 |
[파이썬 알고리즘] 1장 코딩 인터뷰 (0) | 2020.10.30 |