아카이브는 사용자가 등록한 "팁 또는 강좌"와 같은 유용한 정보들을 제공하는 것을 목적으로 합니다.

어떠한 정보라도 괜찮습니다. 알고 있는 정보나 학습하면서 배운 내용들을 작성해 주세요.

Borg Pattern(보그 패턴)

디자인 패턴 중 보그(borg) 패턴에 대해 알아보자.기본개념보그 패턴은 monostate pattern이라고도 불린다. 싱글턴 패턴과 매우 유사하지만 싱글턴 패턴은 하나의 인스턴스만 갖는 대신에보그 패턴은 여러개의 인스턴스에서 하나의 상태(state)를 공유한다는게 차이점이다. 즉, 하나의 인스턴스를 공유하는게 아니고 하나의 상태(state)를 공유하는 것이다. 구현구현은 파이썬 언어로 작성되었다.class Borg: _shared_state = {}  def __init__(self): self.__dict__ = self._shared_state  a = Borg()b = Borg() print(a is b) # Falsea.site = 'dolgonet'print(b.site) # dolgonet일반적으로 파이썬의 인스턴스에는 __dict__이라는 속성이 있고,  모든 인스턴스에는 자신만의 __dict__을 가지고 있다.코드에서는 의도적으로 __dict__에 클래스 변수인 _shared_state를 할당하고, 이렇게 함으로써 모든 인스턴스는 하나의 상태(state)를 공유하게 되는 것이다.참고자료- Python Design Pattern

코닝구 2018.10.09 18:02:36
Singleton Pattern(싱글턴 패턴)

디자인 패턴중에서 싱글턴(Singleton) 패턴에 대해서 알아보자.기본 개념싱글턴 패턴은 오래전부터  많이 알려지고 사용된 디자인 패턴중에 하나로하나의 클래스에 인스턴스를 하나만 만들어야하는 경우 사용되는 패턴이다.최초 생성 이후에 호출되는 생성자는 최초 인스턴스를 리턴한다.싱글턴은 다음과 같은 상황에 사용된다.공유자원(shared resource)에 대한 동시접근(concorrenct access)을 제어할 필요가 있는 경우.여러 시스템에서 하나의 자원에 접근하는 지점이 필요한 경우.유일객체(unique object)가 필요한 경우.일반적으로 싱글턴이 사용되는 예는 다음과 같다.logging class.print spooler.DBCP(Dabasebase Connection Pool).File Manager.전역 상태를 담고 있는 읽기 전용 싱글턴.구현구현은 파이썬 언어로 작성하였다. class Singleton: def __new__(cls, *args, **kwargs): if not hasattr(cls, 'instance'): cls.instance = super(Singleton, cls).__new__(cls) return cls.instance a = Singleton()b = Singleton()print(a) #<__main__.Singleton object at 0x10d4d5278>print(b) #<__main__.Singleton object at 0x10d4d5278>같은 객체임을 알 수 있다. 아래는 위키피디아에서 작성되어 있는 예제 코드이다.class Singleton(type): def __init__(cls, name, bases, dict): super(Singleton, cls).__init__(name, bases, dict) cls.instance = None  def __call__(cls, *args, **kw): if cls.instance is None: cls.instance = super(Singleton, cls).__call__(*args, **kw) return cls.instance class MyClass(object): __metaclass__ = Singleton print MyClass()print MyClass()Descorator 사용def singleton(cls): instance = [] def getinstance(): if not len(instance): instance.append(cls()) return instance[0] return getinstance @singletonclass MyClass: ...참고 자료- Python Design Patterns- wikipedia

코닝구 2018.10.07 17:24:30
Tuples - 튜플 자료형

튜플은 리스트와 마찬가지로  sequence 자료형이며 리스트와 매우 유사하지만 원소의 삭제, 수정 등 변경이 불가능하다. 그러므로 튜플은 상수에 사용하기 적합하다. 리스트와 마찬가지로 원소마다 index가 0부터 순차적으로 할당되며 index를 통해 원소에 접근할 수 있다. 튜플은 일반적으로 ()로 선언한다. 튜플 선언시 주의할 점으로는 원소가 하나인 경우 마지막에 콤마(,)를 입력해 주어야 튜플로 선언된다는 것이다.다음은 다양하게 선언한 튜플 예제이다.tup0 = ()tup1 = ('one','two', 'three')tup2 = 'one', 'two', 'three',tup3 = tuple([1,2])tup4 = ('one','two', 'three', ('for', 'five'))tup5 = ('one',)tup6 = 'one',튜플은 리스트와 마찬가지로 원소가 없거나, 튜플 안에 튜플을 가질 수도 있다. 또한, 여러가지 타입의 자료형을 원소로 가질 수 있다.원소에 접근하려면 리스트와 동일하게 대괄호([]) 안에 index를 입력하면 된다. 음수 index로 접근이 가능하고 일정 범위만큼 자르는 슬라이스도 가능하다.tup = ('one', 'two', 'three', 4, 5)print("tup[0] : ", tup[0])  # tup[0] :  oneprint("tup[0:2] : ", tup[0:2])  # tup[0:2] :  ('one', 'two')print("tup[:2] : ", tup[:2])  # tup[:2] :  ('one', 'two')print("tup[2:] : ", tup[2:])  # tup[2:] :  ('three', 4, 5)새로운 변수에 튜플을 대입한 경우 리스트와 마찬가지로 사용된 메모리에 두개의 변수가 참조한다.tup = ('one', 'two', 'three', 4, 5)tup1 = tupprint(hex(id(tup1)))  # 0x3ccc5cprint(hex(id(tup)))  # 0x3ccc5c튜플의 앞서 말하였듯이 원소의 값을 변경하거 삭제 할 수 없다. 다시 말하면 리스트의 index를 변경할 수 있는 메소드인 append(),pop(), remove() 등은 존재하지 않지만 두 튜플을 연결하는 + 연산자와 반복하는 * 연산자는 존재한다.tup = ('one', 'two', 'three', 4, 5)tup1 = tup + (6, 7)tup2 = tup + (6,)tup3 = tup * 2print("tup1 : ", tup1)  # tup1 :  ('one', 'two', 'three', 4, 5, 6, 7)print("tup2 : ", tup2)  # tup2 :  ('one', 'two', 'three', 4, 5, 6)print("tup3 : ", tup3)  # tup3 :  ('one', 'two', 'three', 4, 5, 'one', 'two', 'three', 4, 5)내장함수함수설명cmp() 두 튜플을 비교한다.syntaxcmp(tuple1, tuple2)* python3 이상 부터는 더 이상 cmp 함수를 지원하지 않는다. cmp를 사용해야 하는 경우라면 아래와 같이 함수로 정의해서 사용 할 수 있다.def cmp(a, b):    return (a > b) - (a < b) len()튜플의 원소 수를 반환한다.syntaxlen(tuple)exampletup1, tup2 = ('one', 'two'), ('three', 'four',5)print("tup1 : ", len(tup1))  # tup1 : 2print("tup2 : ", len(tup2))  # tup1 : 3 max()튜플의 원소 중 최대 값을 반환한다. python2,3 에서  max() 함수의 가장 큰 차이점은 python2에선 원소의 자료형이 달라도 사용 가능했지만 python3에서는 같은 자료형에 대해서만 사용 가능하고 자료형이 같지 않으면 typeError가 난다.syntaxmax(tuple)exampletup1, tup2 = ('one', 'two'), ('three', 'four',5)print("tup1 : ", max(tup1))  # tup1 : twoprint("tup2 : ", max(tup2))  # errormin()튜플의 원소중 최소값을 반환한다. python2, 3 의 차이점은 max() 함수와 동일하다.syntaxmin(tuple)exampletup1, tup2 = ('one', 'two'), ('three', 'four',5)print("tup1 : ", min(tup1))  # tup1 : oneprint("tup2 : ", min(tup2))  # error tuple()tuple()는 시퀀스 자료형을 인수로 받아 새로운 튜플로 변환하여 대입한다. tuple()은 리스트를 튜플로 변환할때 사용한다.syntaxtuple(seq)examplelist1 = ['one', 'two', 'three', 4, 5]tuple1 = tuple(list1)print("tuple : ", tuple1)  # tuple :  ('one', 'two', 'three', 4, 5) 

John.cho 2016.07.11 00:06:11
List - 리스트 자료형

리스트는 파이썬의 sequence 자료형 중 가장 많이 사용되는 대표적인 자료 구조다.  각각의 값들은 요소 또는 원소라 부르며 콤마(,)로 구분한다.원소마다 index가  0부터 순차적으로 할당되며 index를 통해 원소에 접근할 수 있다. 리스트는 일반적으로 대괄호([ ])로 선언하며 list()로도 선언 할 수 있다.다음은 다양하게 선언한 예제이다.list0 = []list1 = ['one', 'two', 3, 4, 5]list2 = [1, 2, 3, 4, 5]list3 = ['one', 'two', 'three', 'four', 'five']list4 = ['one', 'two', ['three', 'four']]list5 = list(range(100)) print(type(list0)) # 리스트는 list0 처럼 원소가 없거나 list1처럼 문자열과 숫자를 원소로 가질 수 있으며, 리스트안에 리스트를 가질 수 있다. 즉 Java나 C언어의 배열은 동일한 타입의 자료형만 원소로 가질 수 있지만 list는 여러가지 타입의 자료형을 원소로 가질 수 있다. 그러므로 배열과 리스트는 엄밀히 따지면 다르다.원소에 접근하려면 대괄호([])안에 index를 입력하면 된다. 또한 음수 index로의 접근이 가능하고 일정 범위만큼 잘라 출력 할 수 있다. 이를 슬라이스(slice)라 한다.print("list1[0] : ", list1[0])  # list1[0] :  oneprint(list1[2])  # 3print(list1[1:5])  # ['two', 3, 4, 5]print(list1[-1]) # 5새로운 변수에 기존 변수를 대입한 경우 두 변수는 리스트 하나에 사용된 메모리를 참조한다. 즉, 새로운 메모리로 리스트를 할당하는게 아는게 아닌 두개의 변수가 메모리 하나를 참조하는 것이다.list6 = list1print(hex(id(list1))) # 0x188e20cprint(hex(id(list6))) # 0x188e20c파이썬에선 리스트를 쉽게 생성하기 위해 list comprehension를 제공한다. 가령, 0부터 9까지 제곱된 수의 리스트를 생성한다고 하였을 경우 다음과  같은 방법이 있다.square = []for x in range(10):    square.append(x**2) print(square)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]list comprehension를 사용하면 간결하게 위와 동일한 리스트를 생성 할 수 있다.squares = [x**2 for x in range(10)]print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]처리속도에서도 차이가 발생했다. 프로파일러로는 cProfile를 사용하였으며 0부터 9999999의 수를 가지는 리스트의 모든 원소들을 제곱하여 처리 속도를 비교하였다.def square(list):    ~~~~ list = list(range(10000000))square(list)return [i * i for i in list]1.049return [i ** 2 for i in list]1.282return map(lambda i: i ** 2, list)3.569ret = []for i in list:    ret.append(i ** 2)return ret3.133list comprehension로 리스트를 생성한 것이 append로 생성하는 것보다 처리 속도가 빠른걸 알 수 있다.. list comprehension에 대해 더  자세한 사항은 공식 문서를 참고하길 바란다.내장함수함수설명len()        리스트의 원소 수를 반환한다.   syntax    len(list)   examplelist1, list2, list3 = [1, 2, 3, 4, 5], [1, 'two'], ['one', ['two', 3]]print("list1 : ", len(list1))  # list1 : 5print("list2 : ", len(list2))  # list2 : 2print("list3 : ", len(list2))  # list3 : 2max()    리스트 원소 중 최대 값을 반환한다. python2,3 에서  max() 함수의 가장 큰 차이점은 python2에선 원소의 자료형이 달라도     사용 가능했지만 python3에서는 같은 자료형에 대해서만 사용 가능하고 자료형이 같지 않으면 typeError가 난다.   syntax    max(list)   examplelist1, list2 = [1, 2, 3, 4, 5], ['one', 'two', 'three']print("list1 : ", max(list1))  # list1 : 5print("list2 : ", max(list2))  # list2 : two min()    리스트의 원소중 최소값을 반환한다. python2, 3 의 차이점은 max() 함수와 동일하다.   syntax    min(list)   examplelist1, list2 = [1, 2, 3, 4, 5], ['one', 'two', 'three']print("list1 : ", min(list1))  # list1 : 1print("list2 : ", min(list2))  # list2 : onelist()    list()는 시퀀스 자료형을 인수로 받아 새로운 리스트로 변환하여 반환한다. list()는 튜플을 리스트로 변환하는데 사용된다.   syntax    list(aTuple)   exampleaTuple = ('one', 'two', 'three')list1 = list(aTuple)print("List1 : ", list1)  # List1 :  ['one', 'two', 'three']내장 메소드메소드설명append()    전달한 객체가 리스트의 마지막 요소로 추가된다.   syntax    list.append(obj)   examplelist1 = ['one', 'two', 'three', 'four', 'five']list1.append('six')print("List1 : ", list1)  # List1 :  ['one', 'two', 'three'] count()    전달한 객체의 원소의 수를 확인한다.   syntax    list.count(obj)   examplelist1 = ['one', 'two', 'three', 'four', 'five']print("List1 : ", list1.count('one'))  # List1 :  1 extend()    리스트 객체를 전달하여 한번에 여러개의 원소를 추가한다.   syntax    list.extend(seq)   examplelist1 = ['one', 'two', 'three']list2 = ['four', 'five'];list1.extend(list2)print("List1 : ", list1)  # List1 :  ['one', 'two', 'three', 'four', 'five'] index()    원소의 위치를 확인한다. 기본적으로 가장 낮은 인덱스를 반환하며 두번째, 세번째 매개변수로 검색하는 범위를 지정 할 수       있다.   syntax    list.index(obj)   examplelist1 = ['one', 'two', 'three', 'two', 'one', 'two']print("Index : ", list1.index('two'))  # Index : 1print("Index : ", list1.index('two', 4, 6))  # Index : 5 insert()    지정한 인덱스에 원소를 추가한다. 지정한 인덱스가 리스트의 길이보다 큰 경우 마지막에 추가된다.   syntax    list.index(index, obj)   examplelist1 = ['one', 'two', 'three', 'two', 'one', 'two']list1.insert(1, 'insert1')list1.insert(100, 'insert2')print("List : ", list1) # List :  ['one', 'insert1', 'two', 'three', 'two', 'one', 'two', 'insert2'] pop()    지정한 인덱스의 원소가 반환되며 리스트에서 제거 된다. obj를 전달하지 않으면 기본적으로 마지막 원소를 반환하며, obj를     전달하면 지정한 인덱스의 원소가 제거 후 반환된다.   syntax    list.pop(obj=list[-1])   examplelist1 = ['one', 'two', 'three']list1.pop(1)print("List : ", list1) # List :  ['one', 'three'] remove()    리스트의 원소를 제거 한다. pop()과의 차이점으로는 제거만 하고 해당 원소를 반환하지 않는다.   syntax    list.remove(obj)   examplelist1 = ['one', 'two', 'three']list1.remove('one')print("List : ", list1) # List :  ['two', 'three'] reverse()    리스트의 원소를 반전시킨다.    syntax    list.reverse()   examplelist1 = ['one', 'two', 'three']list1.reverse()print("List : ", list1) # List :  ['two', 'three'] sort()    리스트의 원소를 재정렬 시킨다. python3 에서는 max() 함수와 마찬가지로 같은 자료형에서만 사용 가능하다. python3에    서의 서로 다른 자료형에 대한 정렬은 sorted 함수를 이용한 방법이 있다.   syntax    list.sort([func])   example list1 = ['one', 'two', 'three']list1.sort()print("List : ", list1) # List :  ['one', 'three', 'two']list1.sort(reverse=True)print("List : ", list1) # List :  ['two', 'three', 'one'] 

John.cho 2016.07.08 22:17:16
python 게시판 정보
  • 24
    질문수
  • 29
    아카이브수
  • 7
    채택수
  • 2
    멤버수
python 질문 통계
최근 30일
답변율
0%
채택율
0%
전체
답변율
16%
채택율
29%
최근에 등록된 질문