Python
-
[Python] 동기, 비동기, 블럭, 넌블럭 파이썬으로 알아보기Software Development/Python 2020. 10. 21. 16:46
개발자라면 한 번씩 듣게되는 동기(Synchronous), 비동기(Asynchronous), 블럭(Block), 넌블럭(Non-block)을 Python코드를 통해 알아보겠습니다. 우선 무엇을 의미하는지 정의하겠습니다. Block : 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 돌려주지 않는 것.[2] ex) 세탁기를 돌리는 동안 아무것도 하지 않고 기다린다. Non-block : 호출된 함수가 자신이 할 일을 채 마치지 않았더라도 바로 제어권을 건네주어(return) 호출한 함수가 다른 일을 진행할 수 있도록 해주는 것.[2] ex) 세탁기를 돌리는 동안 TV를 본다. Synchronous : 호출된 함수의 수행 결과 및 종료를 호출한 함수가(호출된 함수..
-
[Python] 파이썬 - asyncio callback 알아보기Software Development/Python 2020. 9. 24. 20:19
아래의 정의는 위키피디아에서 가져온 callback(콜백)에 대한 정의이다. 콜백(callback)은 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다. 아래는 파이썬 공식 문서의 예제를 변형 시킨 코드이다. import asyncio import datetime import time import random def display_date(end_time, loop, count): now_time = datetime.datetime.now() print(now_time) if (loop.time() + 1.0) < end_time: ran_int = random.randint(0, 3) tim..
-
[Python] Pylint - 정의와 예제를 통해 Python 린트 툴 알아보기Software Development/Python 2020. 9. 3. 19:00
Lint? 린트(lint) 또는 린터(linter)는 소스 코드를 분석하여 프로그램 오류, 버그, 스타일 오류, 의심스러운 구조체에 표시(flag)를 달아놓기 위한 도구들을 말합니다. 이 용어는 C 언어 소스 코드를 검사하는 유닉스 유틸리티에서 왔습니다. Pylint란 Pylint는 Python 코드의 에러를 확인하고, 표준을 적용시키며 코드의 이상한 부분을 찾는 도구입니다. 또한 특정 유형의 에러를 찾을 수 있으며, 코드 일부분에 대한 리팩토링을 제공하며 코드의 복잡성에 대한 자세한 정보를 제공하기도 합니다. Python에서 다른 종류의 유사한 툴로 pychecker, pyflakes, flake8, mypy 등이 있습니다. Pylint에서 사용하는 기본적인 코딩 스타일은 PEP8이라 보시면 됩니다. ..
-
Python Decorator 란?Software Development/Python 2020. 4. 10. 17:26
Decorator는 호출 가능한(callable) 함수, 메소드 또는 클래스 definition을 수정하는데 사용되는 파이썬 객체입니다. Decorator는 정의된 원래 객체를 받아 수정된 객체를 return하며, 정의된 이름에 바인딩 됩니다. Decorator는 Java annotations에서 영감을 받아 비슷한 syntax를 가지고 있습니다. @을 사용합니다. 아래의 코드는 @dec2 @dec1 def func(arg1, arg2, ...): pass 아래의 코드와 동일합니다. def func(arg1, arg2, ...): pass func = dec2(dec1(func)) 장식자는 메타 프로그래밍의 한 형태입니다. 예를 들어 아래 샘플에서 viking_chorus는 menu_item을 호출할 때..
-
Python metaclasses, singleton patternSoftware Development/Python 2020. 4. 10. 16:36
메타클래스는 인스턴스가 클래스인 클래스입니다. "일반적인"클래스가 클래스의 인스턴스의 동작을 정의하는 것처럼 메타 클래스는 클래스의 동작과 인스턴스의 동작을 정의합니다. 메타클래스는 모든 객체 지향 프로그래밍 언어에서 지원되진 않습니다. 메타클래스를 지원하는 프로그래밍 언어는 구현 방식에 따라 상당히 다릅니다. 메타클래스를 사용하는 수 많은 용도가 있습니다. 몇가지만 말하자면 아래의 예를 들 수 있습니다. 로깅 및 프로파일링 인터페이스 검사 생성시 클래스 등록 자동으로 새로운 메소드 추가 자동 속성 생성 프록시 리소스 자동 잠금/동기화 원칙적으로 메타 클래스는 다른 파이썬 클래스와 마찬가지로 정의되지만 "type" 에서 상속되는 클래스입니다. 또 다른 차이점은 메타 클래스를 사용하는 클래스 문장이 끝날 ..