Python TIL

succeeding·2022년 3월 1일
0

@property

읽어보고 내용 추가할 것

_

_single_leading_underscore: 주로 한 모듈 내부에서만 사용하는 private 클래스/함수/변수/메서드를 선언할 때 사용하는 컨벤션이다. 이 컨벤션으로 선언하게 되면 from module import *시 _로 시작하는 것들은 모두 임포트에서 무시된다. 그러나, 파이썬은 진정한 의미의 private을 지원하고 있지는 않기 때문에 private을 완전히 강제할 수는 없다. 즉, 위와 같은 임포트문에서는 무시되지만 직접 가져다 쓰거나 호출을 할 경우엔 사용이 가능하다. 그래서 “weak internal use indicator"라고 부르기도 한다.

_internal_name = 'one_module' # private 변수
_internal_version = '1.0' # private 변수

class _Base: # private 클래스 _hidden_factor = 2 # private 변수

def __init__(self, price):
    self._price = price

def _double_price(self): # private 메서드
    return self._price * self._hidden_factor

def get_double_price(self):
    return self._double_price()

출처
https://mingrammer.com/underscore-in-python/#3-%ED%8A%B9%EB%B3%84%ED%95%9C-%EC%9D%98%EB%AF%B8%EC%9D%98-%EB%84%A4%EC%9D%B4%EB%B0%8D%EC%9D%84-%ED%95%98%EB%8A%94-%EA%B2%BD%EC%9A%B0

__mro__

Method Resolution Order의 약자. 직역하면 메소드 결정 순서.
메소드 실행순서를 정해주어 죽음의 다이아몬드(the Deadly Diamond of Death) 문제를 해결해준다.

<class 이름>.__mro__

라고 입력하면, 메소드 실행순서를 튜플에 담아 리턴한다.
참고

Counter

  • 임포트 문 : from collections import Counter
  • Counter(<string>) : string에 사용된 문자를 카운트하여 딕셔너리로 저장(정확히는 딕셔너리의 확장 클래스인 Counter로 저장)
  • Counter(<string>).most_common(k) : 가장 많이 쓰인 문자를 k개까지 리턴

참고
https://www.daleseo.com/python-collections-counter/

method

메서드에는 인스턴스 메서드, 클래스 메서드, 정적 메서드가 있다.

  • 인스턴스 메서드
    • self 매개변수를 통해 인스턴스 필드에 접근한다.
  • 클래스 메서드
    • cls 매개변수를 통해 클래스 필드에 접근한다.
    • @classmethod를 사용한다.
  • 정적 메서드
    • 필수로 사용되는 매개변수가 없으며, 인스턴스, 클래스 필드에 접근하지 않을 때 사용한다.
    • @staticmethod를 사용한다.

참고
https://frenchkebab.tistory.com/56


Dictionary


setdefault()

dict.setdefault(key, default_val)
딕셔너리에서 key에 해당하는 값이 존재하면 그 값을 리턴, 없다면 default_val으로 설정한 뒤 그 값을 리턴.



eval()

실행 가능한 문자열을 입력받아 계산한 결과를 리턴한다.

단, 수식 뿐 아니라 파이썬 스크립트를 포함한 파이썬에서 실행가능한 모든 문자열을 실행한다. 예를 들어 os모듈을 통해 local 자원을 삭제하거나 수정하려는 문자열까지 모두 실행해버리므로 주의가 필요하다.


Set


discard()

set.discard(val)
딕셔너리에서 valKeyError없이 삭제한다.
반면, remove()KeyError를 일으킨다.

원소 get하기

    s = {1, 2, 3, 4, 5}
 
    x = next(iter(s))
    print(x)



unittest


Django의 TestCase는 파이썬의 unittest.TestCase를 상속받는다. DRF의 APITestCase는 Django의 TestCase를 상속받는다. 그래서 DRF를 공부하고 사용하는 나에겐 unittest가 중요하다.

setUp()

  • test fixture를 준비하기 위해 호출되는 메서드
  • test 메서드가 호출되기 전에 먼저 호출됨
  • 이 메서드에서 발생하는 예외는 테스트 실패가 아닌 에러로 간주한다.


zip

아래 링크 참조

https://www.daleseo.com/python-zip/

범위지정은 INDEX_ERROR가 없다

text = "abc"

# INDEX_ERROR
text[3]

# ! INDEX_ERROR
text[2:100] # 결과값 : "c"
text[100:200] # 결과값 : ""

순열, 조합 만들기

itertools.permutations(iterable, r=None)
itertools.combinations(iterable, r)

0개의 댓글