티스토리 뷰

반응형

 

 

 

 인덴트

 

- PEP 8 이후로 추천하는 방식은 tab이나 2칸 space가 아닌 4칸 space이다.

 

- parameter가 첫째줄에 시작하고, 다음줄로 내려갈 경우 아래와 같이 parameter 시작 위치 선을 맞춰준다.

1
2
foo = long_function_name(var_one, var_two,
                         var_three, var_four)
cs

 

- parameter가 첫째줄에 시작하지 않을 때, 줄바꿈이 발생하면 indent로 구별해준다.

 

1
2
3
4
5
6
7
8
9
def function_name(
        param_1, param_2,
        param_3):
    print(1)
 
 
foo = long_function_name(
    param1, param2
    param3, param4)
cs

 

 

 

 

 

 Naming Convention(네이밍 컨벤션)

 

- 파이썬은 기본적으로 '_'를 사용하는 스네이크 케이스(Snake Case)를 권장한다. 연구 결과, 스네이크 케이스가 카멜 케이스보다 훨씬 인지하기 쉽다고 한다. 

 

ex) const_example

 

- 카멜 케이스(Camel Case)는 여러 단어로 이루어진 변수명을 대소문자로 구별하는 것이다. 하지만 시작 단어는 무조건 소문자로 시작한다.

 

ex) constExample

 

- 파스칼 케이스(Pascal Case)는 카멜케이스와 기본적으로 비슷하여 대소문자로 단어들을 구별하지만 시작 단어가 대문자라는 점에서 차이가 난다.

 

ex) ConstExample

 

 

 

 

 

 

 Type Hint(타입 힌트)

 

1
2
3
4
5
6
7
# 기존 타입 명시가 없는 방식
def fn(a):
    pass
 
# 타입 힌트로 파라미터의 타입을 명시하는 방식
def fn(a: int-> bool:
# 파라미터 a는 정수형이며 이 함수의 리턴값은 bool type이 된다
    pass
cs

 

 

 

 

 

 

 

 

 Python3 vs Python2

 

- 나눗셈 연산

 

    -- Python 2 버전에서는 나눗셈연산(/) 후 타입을 유지해야 하기 때문에 5/3 의 결과가 int형으로 나와야하므로 1.666... 이 아닌 1로 출력되었다.

 

    -- Python 3에서는 나눗셈연산은 float으로 정상 출력되고, 몫을 구하는 연산(소수점 이하를 버리는 버림연산, 내림 연산)은 '//' 으로 처리한다.

 

 

- print문

 

    -- Python2 까지 print는 절(statement)였으므로 괄호가 없이 사용하였지만 Python3 부터는 함수가 되어 print()가 되었다.

 

    -- 코딩테스트에서는 print를 이용한 stdout 출력 결과로 디버깅 하지만 실무에서는 추천하지 않는다.

 

    -- print의 콤마(,) 구분은 default로 공백이 설정되어 있다.

 

    ex) print(1, 3)  ==> 1 3

 

    -- 위의 구분을 ' '에서 sep을 이용해 바꿀 수 있다.

 

    ex) print(1,3, sep=',') ==> 1,3

 

    -- 파이썬 print() 함수는 줄바꿈을 디폴트로 가지고있어 줄바꿈을 원하지 않는 경우 end를 통해 없앨 수 있다.

 

    ex) print('aa', end=' ')

         print('bb')

 

         ==> aa bb

 

 

 

 

 

 구글 파이썬 스타일 가이드

 

- 함수의 기본 값으로 가변 객체(Mutable Object)를 사용하지 않아야 한다. 함수가 객체를 수정하면 기본값이 변경되기 때문이다.

 

1
2
3
4
5
6
7
8
9
10
11
# Not good enough
def foo(a, b=[]) :
 
def foo(a, b: Mapping={}):
 
# Better code
def foo(a, b=None):
    if b is None: b = []
 
def foo(a, b: Optional[Sequence] = None):
    if b is None: b = []
cs

 

- True, False를 판별할 때에는 암시적(Implicit)인 방법을 사용하는 편이 간결하고 가독성이 높다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
# Not good enough
if len(users) == 0print()
 
if foo is not None and not foo: self.handle_zero()
 
if not i % 10self.handle_multiple_of_ten()
 
# Better code
if not users: print()
 
if foo == 0 : self.handle_zero()
 
if i % 10 == 0 : self.handle_multiple_of_ten()
cs

 

 

 

반응형
댓글