일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- 코드워
- docker
- HBase
- 자바
- programmers
- codewars
- OOM
- Linux
- dynamic programming
- 튜토리얼
- redis
- leetcode
- 리눅스
- scala
- gradle
- go
- boj
- zookeeper
- 스칼라
- Go언어
- 파이썬
- DP
- Python
- 프로그래머스
- 알고리즘
- golang
- 주키퍼
- 동적프로그래밍
- Java
- 문제풀이
- Today
- Total
목록Python (15)
파이문
파이썬 모듈 경로 site-packages 에 user module 을 만들어서, 해당 경로를 추가하였다. 그런데 user module 이 실제로 있는 경로 안에서 import 하면 어떻게 되는지 궁금해서 모듈을 import 할 때 어떤 것이 우선시 되는지 찾아보았다. 기본적으로 파이썬의 import module 우선 순위는 다음과 같다. 1. 빌트인 모듈 2. sys.path 로 출력되는 경로 순서 여기서 sys.path 는 아래의 경로들을 의미한다. 1. 현재 디렉토리 (sys.path 를 출력하면 가장 먼저 빈 문자열이 들어가 있는데 이를 의미) 2. PYTHONPATH (shell 에서 지정한 경로) 3. 설치할때 지정한 경로 대신에 현재 경로에 심볼릭 링크가 있다고 해서, 심볼릭 링크가 sys...
파이썬 call-by-value 일까 call-by-reference 일까(Python call by value vs call by reference) 결론부터 말하자면 passed by assignment 라고 한다. 즉, 어떤 값을 전달하느냐에 따라 달라지는 것이다. 파이썬의 자료형엔 크게 immutable(불변) 과 mutable(가변) 이 있다.int, str 같은 타입이 불변이고 list, dictionary 같은 타입이 mutable 이다. 불변 타입의 객체를 넘기면 call by value 가 되고 가변 타입의 객체를 넘기면 call by reference 가 된다. 즉 할당 되는 것에 따라 전달 방식이 달라지는 것이다. 어떻게 이것이 가능할까? 바로 파이썬에선 모든 것이 객체이기 때문이다...
django에서 데이터 베이스 여러개 사용하기(django multiple database) django에서 데이터베이스를 여러개 사용하려고 하는 경우 인터넷에서 검색해보면 router를 사용하라고 대부분이 말해주고 있다.(아래의 예시는 2.0 기준이며 모두 공식 홈페이지 레퍼런스를 참고 하였다.) django는 db router 라는 것을 제공하는데, setting에서 지정한 django naming을 따라서 각각 다른 데이터베이스로 연결해주는 클래스라고 보면 된다. 예제를 통해 정리해보면, 우선 settings.py 에 데이터베이스의 정보를 저장해놓을 것이다. 바로 아래 처럼.DATABASES = { 'default': {}, 'auth_db': { 'NAME': 'auth_db', 'ENGINE':..
[django] 템플릿에서 Custom tag / filter 사용하기 django에서 딕셔너리와 조회할 키가 주어졌을 때, 해당 키로 딕셔너리에 접근하고 싶었는데 jinja2 레퍼런스를 비롯해서 django 레퍼런스에도 해당하는 내용이 없었다. 그래서 찾아본 것이 Custom template tags and filters 이다.django 에서는 템플릿에서 custom filter, tag를 사용할 수 있게 제공하는데, 완전 센세이션. 우선 (꼭! 오타 조심!) templatetags 라는 디렉터리를 생성한다. 이 때, 디렉터리 안에는 무조건 __init__.py 가 있어야 한다. (구조는 아래 처럼 되어 있어야 한다!)polls/ __init__.py models.py templatetags/ __i..
Python 문자열 Python3.X와 2.X 에는 몇 가지 차이점이 있는데, 그 중 하나가 바로 문자열 타입에 관한 것이다. Python3.X 에는 문자열 타입은 총 2가지가 있다.strunicode로, 'hello' 같은 형태로 주로 표현한다.bytesstring 으로 b'hello' 처럼 표현한다. Python2.X 에는 문자열 타입이 3가지다.strstring으로 'hello' 라고 표현한다.bytesstr이랑 같다.unicodeunicode로 u'hello' 라고 표현한다. Python2.X 에서 한글을 사용하면서 종종 UnicodeEncodeError: 'ascii' codec can't encode character 와 같은 에러를 자주 접했을 것이다.그럴 때 마다, 답변 대부분이 Pytho..
파이썬 딕셔너리의 키(Python dictionary key) 디시인사이드 프로그래밍 갤러리에 들어갔다가 재미난 글을 발견했다. "파이썬에서 다음 중 딕셔너리의 키로 쓸 수 있는 것들은?" 이라는 제목의 글이었는데, 다 돌려보았는데.. 일단 나는 답을 틀렸다 ㅠㅠa = lambda : 0 b = [0] c = (0,) d = {0} e = frozenset(d) f = {0: 0} class Foo: pass g = Foo() a, c, e, g이다. 나머지 것들은 딕셔너리의 키로 사용하지 못한다. 파이썬의 딕셔너리는 기본적으로 해시 키를 사용한다. 좋은 article을 몇 개 찾았는데 이 글 이 되게 좋은 것 같다. 그리고 frozenset 이라는걸 들어는 봤는데, 언제 쓰는지, 정확히 set 과 무슨..
파이썬에서 언더바의 의미 파이썬에서는 자바나 C++과 다르게 private, public과 같은 예약어가 존재하지 않는다. 그래서 파이썬 프로그래머들은 데이터나 메서드의 이름에 특정 규칙을 적용하였는데 그것이 바로 언더바 이다. 아래의 예제는 언더바가 붙은 경우는 클래스의 내부 메서드이다.class A(object): def __init__(self): print("init") def __str__(self): pass def __repr__(self): pass def __del__(self): print("del")그러나, 파이썬은 내부 이름에 누군가 접근하는 것을 실제로 막지는 않기 때문에, 언더바가 붙은 메서드는 사용할 때 매우 조심해야 한다. 주로 클래스 내부 구현은 언더바 두개를, 기타 다른 ..
파이썬으로 크롤러 만들기(Python web crawler)크롤러는 크게 두 가지 일을 한다. 웹 페이지 다운로드다운로드한 웹 페이지 파싱여기서 예제로 구현할 크롤러 역시 위의 두 가지의 기능만을 갖고 있을 것이다. (다운로드할 url을 이미 갖고 있다는 전제에서 시작하겠다.) 예제로 구현할 나의 컴퓨터 환경은 OS의 경우 Windows 10이며 파이썬은 3.5버전이다. 그러나 2.7이랑 차이가 많이 나는 메서드로 구현하지 않을 것이기 때문에, print 함수만을 제외하면 동일하게 돌아갈 것이다. 라이브러리의 경우 다운로드는 requests를, 파서는 BeautifulSoup4를 사용할 것이다. 예제로 구현할 웹 페이지는 나무 위키를 선택하였으나 너무 느려서 그냥 오버워치 인벤으로 바꿨다. 선수 지식으로..
파이썬 클래스 상속(Python class inheritance) 클래스란 무엇인가?리스트나 문자열과 같은 구조는 정말 유용하지만 때때로 구현하고자 하는 것에 제약이 걸릴 때가 있다. 예를 들면 동물에 대한 정보를 담고 있는 구조를 원한다고 하자. 동물의 이름과 동물의 종에 대해 담고 싶지만 리스트나 문자열에는 내가 저장하고자 하는 정보를 모두 표현할 수가 없다. 이 때 클래스를 사용할 수 있다. 단지 Pet이라는 클래스를 만들고 attribute에 name과 species를 지정하면 된다. 인스턴스란 무엇인가?클래스를 만들기 이전에 앞서, 중요한 차이점 하나를 알고 있어야 한다. 바로 클래스는 구조를 포함하고 있다는 것이다. 예를 들어 Pet 클래스는 name(이름)과 species(종)을 호출할 수 ..
파이썬 얕은 복사와 깊은 복사(Python shallow copy, deep copy) 파이썬에서 리스트나 대부분의 컬렉션을 복사하는 가장 손 쉬운 방법은 그 자료형 자체의 내장 생성자를 사용하는 것이다.>>> l1 = [3, [55, 44]] >>> l2 = list(l1) # l2 = l1[:] >>> l2 [3, [55, 44]] >>> l1 == l2 True >>> l1 is l2 False 그러나 생성자나 [:] 키워드를 사용하면 얕은 복사(Shallow Copy)를 사용하게 된다. 사본은 원래 컨테이너에 들어 있던 동일 객체에 대한 참조로 채워지게 된다. 이 방식은 모든 항목이 불변형이면 메모리를 절약할 수 있지만 가변 항목이 들어있을 경우 예상치 못한 결과를 받게 될 수도 있다.>>> l1..