[time] foo 함수의 실행완료 시간을 다음과 같이 측정할 수 있다. 너무 간단한 연산에는 0에 가까울 것이다. def foo(): print("foo") import time start = time.time() foo() print("delay=", time.time()-start) [timeit] time 으로 시간을 측정해도 되지만 좀더 정확한 시간을 측정하고자 개발됐다. timeit 모듈은 프로그램을 여러번 실행해 os 에 관련 없는 요인으로부터 영향을 덜 받아 정확한 측정이 가능하게 해 직접적인 컨트롤이 필요없다.import timeit import time start = timeit.default_timer() print("start") time.sleep(2) print("end") en..
[container: 컨테이너] 원소들을 가지고 있는 데이터 구조, 멤버십 테스트를 지원한다. 보통, 모든 원소값을 메모리에 가지고 있다. 잘 알려진 컨테이너는 다음과 같다. list, deque, set, dict, tuple, str,.... 컨테이너는 실세계의 컨테이너(박스, 컵보드, 집, 화물 등)처럼 생각하면 다루기 쉽다. 기술적으로, 어떤 객체가 특정한 원소를 포함하고 있는지 아닌지 판단할 수 있으면 컨테이너라고 한다. 대부분의 컨테이너가 자신이 포함하고 있는 모든 원소들을 생성하는 방법(요소의 접근)을 제공하지만 이기능은 컨테이너로 만드는게 아니라 이터레이블로 만든다. 모든 컨테이너가 이터레비을할 필요는 없다. [멤버십테스트]assert 1 in [1, 2, 3] assert not in [..
두 함수는 똑같아 보입니다. 하지만 검색 성능은 확연히 다릅니다. lookup_set 함수가 파이썬에서 셋(set)은 해시테이블이라는 사실을 이용하기 때문입니다. 리스트 안에 어떤 아이템이 존재하는지 확인하려면 파이썬은 그 아이템과 매칭되는 것을 찾을 때까지 각각의 아이템을 모두 검사해야만 합니다. 이 작업에는 시간이 걸립니다. 리스트가 긴 경우에는 더욱 그렇습니다. 반면에 셋(set)에서는 각 아이템의 해시가 셋 안에의 어느 곳에 매칭되는 아이템이 위치하는지 알려줍니다. 결과적으로 셋(set)이 크더라도 검색이 빠르게 완료됩니다. 딕셔너리(dictionary)에서의 검색도 마찬가지로 수행됩니다. 더 많은 정보를 윈하시면 StackOverflow 를 참조하세요. 데이터 구조에 따라 각 연산자들이 어느 정..
- 언패킹할 때 모든 요소를 사용하지 않을 수도 있다. - 사용하지 않을 변수의 위치에는 __ (언더 스코어) 로 표시하면 된다. ns = [i for i in range(10)] for __, item in enumerate(ns): print(item) 이 안내서에서는 쓸모없는 변수를 치워버리는데 언더스코어 두 줄 “__” 을 사용할 것을 추천하지만, 다른 많은 파이썬 스타일 안내서에서는 언더스코어 한 줄 “_” 을 사용하라고 합니다. 하지만 “_” 에는 문제가 있습니다. “_” 이 일반적으로 gettext() 함수의 별칭(alias)로 쓰일 뿐 아니라, 대화형 프롬프트상에서 이전 명령어의 결과값을 가지고 있는 변수로 쓰이기 때문입니다. 그 대신 언더스코어 두 줄을 사용하면 아주 깔끔하고 편리할 뿐만..
파이썬 클래스가 내장 시퀀스(dict, tuple, list, str 등) 처럼 동작 하도록 하는 방법은 여러가지가 있다. 클래스 매직 매소드를 이용하여 강력한 기능을 구현해 보자 class Coo: def __init__(self): self.info = list() def add(self, item): self.info.append(item) def remove(self, index): self.info.pop(index) def __contains__(self, item): return item in self.info def __iter__(self): return iter(item for item in self.info) def __getitem__(self, index): return self...
[함수 오버로딩: Overloading] 함수이름이 같고 매개 변수의 타입과 갯수가 다른 함수들을 의미한다. def foo(a):... def foo(a, b):... [함수 오버라이딩: Overriding] 부모 클래스의 정의한 메서드를 자식 클래스에서 변경하는 것 [연산자 오버로딩: Overloading] 객체의 연산자를 새로 정의 해서 사용하는 것! class Order: def __init__(self, amount): self.amount = amount def __add__(self, other): return Order(self.amount + other.amount) o1 = Order(100) o2 = Order(300) print(o1.amount) o1 += o2 print(o1.am..
[빈 리스트 생성]ns = [] ns = list() [요소 추가]ns.append(1) ns += [1] ns = [*ns, 1] [마지막 인덱스 요소 삭제]ns.pop(-1) ns = ns[:-1] del ns[-1] ns.remove(ns[-1]) [첫 번째 인덱스 요소 삭제]ns.pop(0) ns = ns[1:] del ns[0] ns.remove(ns[0]) [첫번째 인덱스 요소 -1로 변경]ns[0] = -1 ns = [-1, *ns[1:]] ns = [-1] + ns[1:] [리스트 초기화]ns.clear() ns = [] ns = list() [새로운 복사본 만들기]copy = [] for n in ns: copy.append(n) copy = [*ns]슬라이싱을 이용한 방법이 가장 빠름c..
- 다음과 같은 간단한 함수가 있다.def foo(a, b): return a+b, a*b 이런 경우에는 람다라는 익명 함수로 표현하면f = lambda a, b: (a+b, a*b) print(f(2, 3)) 매개 변수를 미리 넣어서 표현하면f = (lambda a, b: (a+b, a*b)) (2, 3) print(f) 람다는 한번 사용하고 말 함수를 한줄로 간결하게 표현할 수 있다. 또한 콜백같이 lazy 하게 동작할 경우에도 유용하다.
- 함수에 매개변수들을 정해진 개수를 입력받지 않고 가변적으로 받는 방법을 알아보자 - 이것을 보기전에 packing, unpacking 을 먼저 알아보기 바란다 def foo(*args, **kwargs): print(*args) print(*kwargs) foo(1, 2, 3, age=10, name="kim") 위와 같이 튜플과 딕셔너리를 가변적으로 받으면 개수에 상관없이 받을수 있다(아무 인자값도 없어도 된다) 결과는 다음과 같이 나온다 1 2 3 age name
- Total
- Today
- Yesterday
- 파이썬 프로그래밍
- 파이썬
- 면접답변
- 이미지 비교
- virtualenv
- 모바일 스킨 적용
- 파이썬 입문
- 장고
- gitignore
- 문서 비교
- pycrypto
- wsgi
- 파이썬 독학
- gitlab
- Python
- PuTTYGen
- chatbot
- 문과 코딩
- 장고 카톡 자동응답
- 엑셀 비교
- django
- django chatbot
- 플러스친구 자동응답
- 모바일 테마 적용
- 파이썬 강좌
- Tistory
- GIT
- 장고 플러스친구 자동응답
- 면접정답
- admin.py
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |