당신은 멋쟁이, 우리는 장고쟁이~

0%

PEP8 Programming Recommendations - 1편

PEP8 Programming Recommendations - 1편



프로그래밍 권장 사항들 - 1편입니다



다른 파이썬 라이브러리의 구현



코드는 다른 파이썬 구현에 불리하지 않은 방식으로 작성되어야 합니다.

다른 파이썬의 구현체들 (PyPy, Jython, IronPython, Cython, Pysco 등등)


예를들면, CPython에서 a += b 혹은 a = a + b 형태의 문자열 연결은 효율적인 구현체 이지만.

이 형태조차, CPython 에서도 특정 타입에만 통하고, 모든 구현에 나오지 않습니다.


따라서, CPython의 효율적인 내부 문자열 연결 구현에 너무 의존하는것은 좋지 않습니다



퍼포먼스가 중요한 라이브러리에서는, ''.join() 형태가 대신 사용되어야 합니다




Singletons 에 대한 비교


None 같은 singletons에 대한 비교는 항상 is 혹은 is not 을 사용합니다. 절대 =를 사용하지 않습니다.


파이썬에서 singletons 는

창의적인 디자인 패턴으로, 같은 종류의 객체만 존재하고

다른 코드에게 단일 엑세스 지점을 제공합니다.


singletons 는 전역 변수들과 같은 장점과 단점을 가지고 있습니다.

굉장히 유용하지만, 코드의 모듈화를 떨어트립니다.


if 를 사용할때 if x 가 진짜 if x is not None 일것임을 알고 써야합니다

(예를들어, 하나의 변수 혹은 인자가 기본값이 None 으로 다른 값에 설정이 되어 있을때. 컨테이너 같은 값들은 이미 타입을 가지고 있을수 있습니다. 이럴경우, 정확한 불리언 값을 얻을수가 없게 됩니다. 따라서, 불리언으로 테스트 하면 False 가 나옵니다. )



is not 연산자를 not … is 대신 사용합니다.



두가지 표현 모두 기능적으로 똑같지만, 전자가 더 가독서이 좋아서 선호됩니다.

1
2
3
4
5
# 좋은예 
if foo is not None:

# 나쁜예
if not foo is None:



6가지 비교연산



특정 비교연산을 하기 위해서 다른 코드를 의존하기 보다는,

6가지의 모든 연산을 구현하는게 좋습니다


1
2
3
4
5
6
__eq__
__ne__
__lt__
__le__
__gt__
__ge__


funtools.total_ordering()데코레이터는 현재 놓치고 있는 비교 방법을 생성하는 툴을 제공합니다


PEP207을 참조하면, 파이썬 인터프리터에는 반사 규칙이 존재합니다

반사규칙에 의해서, 인터프리터는 아래의 형태로 값을 바꿀수 있습니다.


y > xx < y

y >= xx <= y

x == y 그리고 x != y같은 인자들을 바꿀수 있습니다.


sort()함수와 min() 연산들은 < 을 사용하고, max()함수는 >를 사용합니다.


그렇지만, 모든 6개의 연산을 사용하여, 최대한 혼란을 일으키지 않게 하는것이 제일 좋습니다.



lambda 를 사용한 수식보다는 def구문을 사용합니다



1
2
3
4
5
# 좋은예 
def f(x): return 2*x

# 나쁜예
f = lambda x: 2*x


마치며..


프로그래밍에 대한 권장 사항들인데.


컨셉이 상당히 깊게 느껴집니다.
위 내용을 모두 알아들을 만큼의 레벨까지 프로그래밍 공부가 완료되지 않았기 때문에.


어떤것은 이해가 전혀 가지 않기도 하고, 표현도 어색합니다


몇번이나 다짐하지만, 좀더 깊게 공부를 한 다음에 다시 봐야 할것 같습니다.