본문 바로가기

Coding/Python113

Python Anti Pattern - Test for object identity should be is Test for object identity should be is두개의 객체를 테스트할 때 is라는 오퍼레이터를 사용할 수 있다.가장 많이 사용하는 케이스는 None인지 아닌지 판별할 때라고 볼 수 있다.하지만 다른 어떠한 종류도 비교할 수 있다.가끔씩 혼란스러울수도 있는데, 아마 다른 두개의 객체를 비교하면 False를 반환하기 때문일 것이다. Anti-patterna = range(10) b = range(10) print((a is b))위 코드는a와 b가 같음에도 불구하고 False를 반환한다.같은 값을 가지고 있지만 각 객체자체가 다르기 때문이다.따라서 두개의 객체가 같은지 판단하기 위해서는 ==를 사용하는것이 좋다. Best practicesome_list = None if some_list.. 2019. 1. 28.
Python Anti Pattern - Not using unpacking for updating multiple values at once Not using unpacking for updating multiple values at once일반적으로 파이썬 커뮤니티는 장황한 코드보다 간결한 코드를 선호한다.Unpacking을 사용하여 여러개의 값을 동시에 수정하는 것은 각 값을 하나씩 수정하는것보다 훨씬 간결하다. Anti-patterndef gcd(a, b): while b != 0: temp = b b = a % b a = temp return a위 예제를 살펴보면 b에 값을 할당하고 다음라인에서 다시 a에 값을 할당한다.일반적으로 swap하는 함수와 비슷한데, temp라는 추가적인 변수를 사용했다. Best practicedef gcd(a, b): while b != 0: a, b = b, a % b return a수정된 코드는 전의 .. 2019. 1. 28.
Python Anti Pattern - Not using named tuples when returning more than one value from a function Not using named tuples when returning more than one value from a functionNamed 튜플은 일반적으로 튜플이 사용되는곳에서 사용될 수 있고 해당 값은 인덱스외에도 이름을 통해 접근할 수 있다.이는 코드를 좀 더 읽기 쉽게 만들어준다. Anti-patterndef get_name(): return "Richard", "Xavier", "Jones" name = get_name() # no idea what these indexes map to! print(name[0], name[1], name[2])위 코드는 first, middle, last name을 반환하는 unnamed 튜플이다. 튜플을 호출한 이후에 각 값들은 오직 인덱스를 통해서만 접근.. 2019. 1. 28.
Python Anti Pattern - Not using items() to iterate over a dictionary Not using items() to iterate over a dictionarykey-value쌍으로 이루어진 딕셔너리를 iterate하는 최적의 방법은 for문에 2개의 변수를 선언하고dictionary.items()를 호출하는 것이다.각각의 for 반복문에서 파이썬은 자동으로 첫번째 변수에 key를, 두번째 변수에 value를 대입한다. Anti-patternd = {"first_name": "Alfred", "last_name":"Hitchcock"} for key in d: print("{} = {}".format(key, d[key]))위 예제는 d라는 딕셔너리를 for루프를 통해 순회하는 코드이다.for루프 내부에서 key를 통해 각 딕셔너리의 값들에 접근한다.딕셔너리를 순회하는 일반적인 .. 2019. 1. 28.
Python Anti Pattern - Not using dict keys when formatting strings Not using dict keys when formatting strings딕셔너리의 값을 문자열로 사용할 때, 명시적으로 모든 값들을 적어줄 필요가 없다.예를 들어 아래와 같은 딕셔너리가 존재한다고 가정한다.person = { 'first': 'Tobin', 'age': 20 } Anti-patternperson = { 'first': 'Tobin', 'age':20 } print('{0} is {1} years old'.format( person['first'], person['age']) ) # Output: Tobin is 20 years old person = { 'first': 'Tobin', 'last': 'Brown', 'age':20 } # Bad: we have to change th.. 2019. 1. 28.
Python Anti Pattern - Using type() to compare types Using type() to compare typesisinstance 함수는 상속도 지원하기 때문에 타입을 검사할 때 최적화된 함수이다.따라서 타입 검사가 필요할때는 isinstance()를 사용해야한다. Anti-patternimport types class Rectangle(object): def __init__(self, width, height): self.width = width self.height = height r = Rectangle(3, 4) # bad if type(r) is types.ListType: print("object r is a list")위 예제에서는 if문을 통해 Rectangle 클래스가 ListType 타입인지 검사한다.이러한 스타일은 권장되는 패턴이라고 볼 수 .. 2019. 1. 28.