변수 순서 반드시 지켜야 한다. 일반 변수 -> \*args -> \`\`\`kwargs\`\`\`\*arguments의 줄임말 꼭 저 단어를 쓰지 않아도 되고, \*asdfdsf 라고 써도 된다.이 지시어는 복수 개의 arguments 인자를 함수로 받고자 할 때
하나 이상의 “값”으로 표현될 수 있는 코드평가가 가능해서 하나의 “값”으로 환원된다.수식function call()변수 이름 등의 식별자배열 등의 할당 연산자( \[] ) 등도 포함————————————————서술실행가능한 최소의 독립적인 코드 조각컴파일러가 이해하고
복잡한 식 대신, 도우미 함수를 최대한 활용해라. 코드를 줄여 쓰는 것보다, 가독성을 좋게 하는 것이 더 가치 있다.boolean 연산자 “or 나 and” 를 식에 사용하는 것보다, if /else를 사용하는 것이 낫다.for 루프 또는 그와 비슷한 다른 요소(co
위 예시를 설명하자면, for 루프에서 iterable object(Elements) 가 해당 iterable의 \_\_iter\_\_() 메서드를 호출하여 iterator을 가져온 후, 그 iterator의 next() 메서드를 호출하여 루프를 돌게 된다.iterab
리스트를 쉽게, 짧게 한 줄로 만들 수 있는 파이썬의 문법다른 언어나, 파이썬에서 comprehension을 쓰지 않을 때 보통의 배열(리스트)를 만드는 과정은배열 선언: 크기를 정하고, 배열을 특정 이름의 변수에 할당하는 것을 포함배열 할당: 각 원소에 값을 할당l
Magic method 개념더블 언더스코어로 시작해서, 더블 언더스코어로 끝나는 메서드special method 라고 부르기도 함특별한 기능을 제공언제쓸까?예인스턴스 생성시 자동으로 호출되는 init인덱싱 기능을 제공하고 싶을 때덧셈 연산자를 수행할 떄, 어떤 정해진
slicing이란 sequence를 여러 조각으로 나누는 구문을 말한다.어떤 파이썬 class에도 slicing을 추가할 수 있다.\_\_getitem\_\_과 \_\_setitem\_\_ 특별 method를 구현하면 된다.getitem / setitem / delit
slicingsequence를 여러 조각으로 나누는 구문어떤 파이썬 class에도 slicing을 추가할 수 있다.\_\_getitem\_\_과 \_\_setitem\_\_ 특별 method를 구현하면 된다.slicing 할 때, 리스트의 index 범위를 넘어가는 시
sort 메서드는 자연스럽게 순서를 정할 수 있는 거의 대부분의 내장타입(str, float, list 등)에 잘 작동한다.하지만 아래와 같은 경우는 동작하지 않는다.위의 경우 sort를 위한 magic method (\_\_lt\_\_) 가 정의되지 않아서 생긴 에러
dictionaryhash table 이나 associate array 라고 불리는 데이터 구조 안에 값을 저장한다.(분할상환 복잡도 로) 상수 시간에 원소를 삽입하거나 찾을 수 있다.따라서 동적인 정보를 관리하는 데는 dictionary가 가장 이상적이다.collec
19: 함수가 여러 값을 반환하는 경우, 절대로 4개 이상을 unpacking 하지 말라. 20: None을 반환하기보다는 예외를 발생시켜라. 21: 변수 영역과 closure의 상호작용 방식을 이해하라. 22: 변수 positional argument를 사용해 시각적
37: 내장 타입을 어러 단계로 내포시키기보다는, class를 합성하라. 38: 간단한 interface의 경우, class 대신 함수를 받아라. 39: 객체를 generic 하게 구성하려면 @classmethod를 통한 다형성을 활용하라. 40: super로 부모 클
44: 세터와 게터 메서드 대신, 평범한 attribute를 사용하라. 45: attribute를 refactoring 하는 대신 @ property를 사용하라. 46: 재사용 가능한 @property 메서드를 만드려면 descriptor을 사용하라. 47: 지연 계산
super().\_\_init\_\_(\~\~~)처럼 아무인자 없이 호출하면, 최상위 부모부터 차례대로 초기화해준다. (초기화 순서와, 다이아몬드 상속 문제를 알아서 해결해준다.)super(BaseAgents(클래스이름), base_agents(클래스객체)).\_\_i
48: 를 사용해 하위 클래스를 검증하라. 49:를 사용해 클래스 확장을 등록하라. 50: 으로 class attribute 를 표시하라. 51: 합성 가능한 class 확장이 필요하면, meta class 보다는 class decorator을 사용하라.
동적 데이터를 관리하고 싶을 떄이유hash table 이나 associate array 라고 불리는 데이터 구조 안에 값을 저장(분할상환 복잡도 로) 상수 시간에 원소를 삽입하거나 찾을 수 있다.(dictionary, long tuple, 다른 내장 타입이 복잡하게 내
완전한 class 가 제공하는 유연성이 필요하지 않고, 작은 불변 데이터 container가 필요할 때tuple 의 특성인 불변성과, dictionary의 장점인 label 있음을 둘 다 쓰고 취하고 싶을 때tuple의 원소가 4개 이상이 되어서, 각 원소가 어떤 것을
단순히 attribute 값을 get set 할꺼면, public attribute를 써라. (@property (X) getter/setter (X) )사소한 계산이나, 사소한 로직이 필요한 "attribute get set" 에 사용싸고, 직관적이고, 놀랍지 않은
https://medium.com/dmsfordsm/garbage-collection-in-python-777916fd3189C- GC는 메모리를 자동으로 관리해주는 과정임CPython에서의 메모리 관리와 Garbage Collection은 두가지 측면이 있다
추상클래스란 미구현 추상메소드를 한개 이상 가지며, 자식클래스에서 해당 추상 메소드를 반드시 구현하도록 강제상속받은 클래스는 추상메소드를 구현하지 않아도, import할 때까지 에러는 발생하지 않으나 객체를 생성할 시 에러가 발생혹은
완전한 class 가 제공하는 유연성이 필요하지 않고, 작은 불변 데이터 container가 필요할 때tuple 의 특성인 불변성과, dictionary의 장점인 label 있음을 둘 다 쓰고 취하고 싶을 때tuple의 원소가 4개 이상이 되어서, 각 원소가 어떤 것을
65. try/except/else/finally 각 블록을 잘 활용하라. 66. 재사용 가능한 try/except 동작을 원한다면, contextlib와 with문을 사용하라. 67. 지역 시간에는 time보다는 datetime을 사용하라. 68. copyreg를 사
70. 최적화하기 전에 프로파일링을 하라. 71. 생산자-소비자 큐로 deque를 사용하라. 72. 정렬된 sequence를 검색할 때는, bisect를 사용하라. 73. 우선순위 큐로 heapq를 사용하는 법을 알아두라. 74. bytes를 복사하지 않고 다루려면,
75. 디버깅 출력에는 문자열을 사용하라. 76. TestCase 하위 클래스를 사용해, 프로그램에서 연관된 행동 방식을 검증하라. 77. setUp, tearDown, setUpModule, tearDownModule을 사용해, 각각의 테스트를 격리하라. 78. m
82. 커뮤니티에서 만든 모듈을, 어디서 찾을 수 있는지 알아두라. 83. 가상 환경을 사용해, 의존 관계를 격리하고 반복 생성할 수 있게 하라. 84. 모든 함수, 클래스, 모듈에 docstring을 작성하라. 85. 패키지를 사용해, 모듈을 체계화하고 안정적인 AP
기초 개념 네트워크를 통해 분산 시스템에서 프로시저 호출을 가능하게 하는 프로토콜과 패턴 즉, RPC는 네트워크를 통해 분산 시스템에서 프로시저를 호출하는 방식을 의미 RPC는 분산 시스템에서 프로시저 호출을 가능하게 하는 기술이지만, RPC라는 용어 자체는 프
Python에서의 컨텍스트 매니저(Context Manager)는 특정 블록의 실행 전후에 자동으로 작업을 수행하는 객체이 개념의 핵심은 리소스 관리와 예외 처리를 간결하고 효과적으로 할 수 있게 하는 것컨텍스트 매니저는 다음 두 가지 메서드를 구현하는 객체입니다:\_
프로그램을 커맨드라인(명령 프롬프트나 터미널)을 통해 실행할 때, 프로그램 이름 뒤에 공백으로 구분하여 추가하는 입력 값들예: python script.py arg1 arg2 에서, arg1, arg2
커맨드 라인 인터페이스에서 커맨드 라인 인자(Command-line Arguments), 커맨드 라인 옵션(Command-line Options), 그리고 플래그(Flags)는 사용자가 프로그램을 실행할 때 터미널이나 명령 프롬프트를 통해 프로그램에게 전달하는 입력값을
피클링(Pickling)과 직렬화(Serialization)는 데이터를 저장하거나 전송하기 위해 데이터 구조나 객체를 바이트 스트림으로 변환하는 과정이 두 용어는 서로 밀접한 관계가 있으며, 때로는 상호 교환적으로 사용될 수 있지만, 각각의 용어가 가리키는 범위와 사용
Python의 argparse 모듈은 명령줄 인자를 프로그램에 쉽게 파싱할 수 있게 해주는 유용한 표준 라이브러리입니다. 이 모듈을 사용하면 명령줄 옵션, 인자 및 서브 커맨드의 파서를 쉽게 생성할 수 있으며, 자동으로 사용자 도움말과 사용법 메시지를 생성합니다.arg
1. 문제코드 2. 개념 설명 "값에 의한 전달"(pass by value)과 "참조에 의한 전달"(pass by reference)은 함수에 인자를 넘기는 방식을 설명할 때 사용되는 용어입니다. 이 두 방식은 함수가 인자의 데이터를 어떻게 처리하는지에 대한 핵심적인
프로그래밍에서 데이터와 그 데이터를 처리하는 함수(메소드라고도 함)를 하나의 "객체"로 묶는 방식이 개념은 실세계의 객체를 모델링하여 프로그램 내에서 표현하는 것을 도와줌예를 들어, 자동차라는 객체를 생각해보면, 자동차는 색상, 브랜드, 모델 등의 속성(데이터)과 주행
3D 그래프를 그리기 위한 준비 작업3D 그래프를 그릴 수 있는 그림(figure)과 축(axes) 객체를 생성이 코드는 객체 지향 인터페이스(https://velog.io/@jk01019/객체-지향-인터페이스)를 사용하여 3D 플롯을 생성하는 방법의 한 예s
모든 인스턴스에 공통적인 기능을 수행 할 때생성 전에 필요한 사전 설정 작업을 수행을 하거나, 다양한 조건에 따라 다른 인스턴스를 생성해야 할 때 팩토리 메소드 패턴 구현클래스 변수에 접근하거나 수정: 모든 인스턴스에 공통적으로 적용되는 값을 관리할 때 유용아래의 코드
cv2.imencode: 이미지를 특정 포맷의 메모리 버퍼로 인코딩디스크에 파일을 저장하지 않고, 이미지를 바이트 스트림으로 직접 변환할 때 유용네트워크를 통해 이미지를 전송하거나 데이터베이스에 저장할 때 사용ext (문자열): 인코딩할 이미지 포맷을 지정하는 파일 확
1. 설명 이 코드는 ROS (Robot Operating System) 환경에서 카메라로부터 받은 이미지 메시지를 OpenCV 형식으로 변환하고 처리하는 작업 cv_bridge는 ROS 이미지 메시지와 OpenCV 이미지 간의 변환을 담당하는 패키지 여기서 사용된
파이썬 3에서는 super()를 인자 없이 호출할 수 있습니다. 이 경우, 파이썬은 현재 메소드를 호출하는 클래스와 해당 인스턴스(self)를 자동으로 인지하여, 현재 클래스의 가장 가까운 부모를 찾습니다.인자 없이 사용되면 현재 클래스의 직접적인 부모 클래스가 ret
BaseException은 파이썬의 예외 계층구조에서 최상위에 위치하는 클래스모든 예외는 BaseException을 직접 또는 간접적으로 상속받음BaseException에서 직접 상속받는 주요 예외들은일반적인 애플리케이션 에러 처리보다는 시스템 레벨의 이벤트를 다루는
sys.exit() 함수와 Ctrl+C (키보드 인터럽트)는 파이썬 프로그램을 종료하는 두 가지 다른 방법이며, 각각의 사용 케이스가 있습니다.sys.exit() 함수는 스크립트나 애플리케이션 내부에서 프로그램을 종료하고자 할 때 사용합니다. 이 함수를 호출하면 Sys
언제 쓰는가? 아래 시그널들이 발생했을 때, 실시할 로직을 만들기 위함! 사용자가 ctrl+c 로 프로그램을 종료하여 발생하는 시그널 프로세스가 종료되는 경우 발생하는 시그널 예시 특징 멀티스레드 환경에서는 주 스레드만 신호를 받을 수 있습니다.
pip install .와 pip install -e . 명령은 Python 프로젝트를 현재 환경에 설치하는 데 사용되지만, 설치 방식에 중요한 차이가 있습니다.이 명령은 현재 디렉토리에 있는 Python 프로젝트를 "일반 설치" 모드로 설치합니다.프로젝트의 복사본이
특정 리포지토리(프로젝트) 내에서 한 모듈이 다른 모듈을 import할 수 있는 이유는 Python의 모듈 검색 경로 때문가상 환경(virtualenv)를 만들었을 때, 해당 가상 환경 내의 site-packages 디렉토리에 리포지토리가 자동으로 참조되는 것은 아닙니
pip install .과 python3 setup.py install은 Python 패키지를 설치하는 두 가지 방법pip install .의존성 관리, 휠 포맷 지원, 가상 환경과의 호환성 측면에서 더 현대적이고 유연한 설치 방법을 제공패키지 개발자와 사용자 모두에게
개념: https://velog.io/@jk01019/패키지-빌드-설치-배포\*\*패키지를 빌드하기 위해 다음 명령어를 사용할 수 있습니다: python setup.py sdist bdist_wheel\*\*이 명령은 소스 배포(sdist)와 휠 배포(bdis
읽을거리https://velog.io/@jk01019/패키지-빌드-설치-배포설명로컬 시스템에 패키지를 직접 설치하려면, 패키지 디렉토리에서 다음 명령어를 사용할 수 있습니다:pip install .이 경우, 패키지 빌드를 알아서 해주고, 패키지 설치까지 해줌.
읽을거리https://velog.io/@jk01019/패키지-빌드-설치-배포https://velog.io/@jk01019/python-pacakage-빌드-buildsetup.cfg 파일에 패키지 설정을 선언적으로 정의한 후, 패키지 빌드 및 배포를
python setup.py sdist bdist_wheel: 이 명령어는 Python 패키지의 소스 배포(sdist)와 바이너리 배포(bdist_wheel)를 생성sdist는 소스 코드를 포함한 아카이브 파일을 만들며, 모든 플랫폼에서 사용될 수 있음 bdist_wh
colcon build는 ROS(로봇 운영 체제)와 같은 복잡한 프로젝트의 빌드 관리를 위해 사용되는 도구이 과정에서 package.xml은 ROS 패키지의 의존성과 메타데이터를 관리하는 데 중점ROS 도구들이 패키지 정보를 이해하고 처리할 수 있게 함setup.cfg
in setup.pyentry_points는 setup.py 파일에서 Python 패키지를 설치할 때 생성되어야 하는, 실행 가능한 커맨드 라인 스크립트나 애플리케이션을 정의하는 설정특히, console_scripts 항목은 패키지 설치 시 자동으로 생성될 커맨드 라인
importlib은 프로그램 실행 도중에 동적으로 모듈을 임포트하고, 모듈의 내용을 조작하는 기능을 제공이 라이브러리는 파이썬의 기본 import 문이 제공하는 기능을 보다 세밀하게 제어할 수 있게 해주며, 특히 프로그램 실행 중에 모듈 이름이 결정되는 경우 유용동적
임시 파일과 디렉터리를 생성하고 사용할 때 활용이 모듈은 운영 체제의 기본적인 임시 파일 저장소 위치를 사용하여, 데이터를 일시적으로 저장할 수 있는 파일이나 디렉터리를 만들어낼 수 있게 도와줌tempfile을 사용하는 주된 목적일시적인 데이터 저장, 복잡한 파일 입출
Python의 abc 모듈은 "Abstract Base Classes"의 약자로, 사용자가 인터페이스를 정의할 수 있게 해주는 기능을 제공이를 통해 개발자는 어떤 클래스가 특정 메서드를 반드시 구현하도록 강제할 수 있음이런 방식은 특히 다형성을 활용할 때 유용하며, 큰
Python에서 Container, Iterable, Sequence, Mapping은 컬렉션(types 모듈에서 찾을 수 있는)과 관련된 추상 베이스 클래스(ABCs)정의: Container는 in 연산자를 사용해 멤버십 테스트를 지원하는 모든 데이터 구조를 의미예시
PPA를 사용하면 소프트웨어의 최신 버전을 설치할 수 있습니다. Python의 경우 deadsnakes PPA가 자주 사용됩니다.PPA 추가:Python 3.9 설치:Python 3.10 설치:
각 시나리오에 따라 스크립트에서 사용할 file_path 설정 방법은 다음과 같습니다:이 경우에는 launcher.py 파일이 experimental 폴더 안에 위치하고 있습니다. 스크립트는 프로젝트 폴더의 루트에서 실행되므로 PCD 파일이 위치한 data 폴더까지의
순환 의존성(circular dependency)은 두 모듈이나 더 많은 모듈이 서로를 직접적이거나 간접적으로 의존하는 상황유지 보수의 어려움: 순환 의존성은 코드의 이해를 어렵게 만들고, 따라서 유지 보수를 더 복잡하게 만듭니다. 변경 사항이 하나의 모듈에 영향을 미
파이썬은 동적 타이핑(dynamic typing) 언어이는 변수를 선언할 때 타입을 명시적으로 지정하지 않고, 할당된 값에 따라 타입이 결정되는 것을 의미예를 들어, 아래 코드를 봅시다:
추상화(Abstraction)와 인터페이스(Interface)는 객체 지향 프로그래밍(OOP)의 핵심 개념으로, 코드의 유연성과 재사용성을 높이기 위해 사용이 두 개념은 서로 밀접하게 연관되어 있지만, 각기 다른 역할과 목적을 가지고 있습니다.추상화는 복잡한 시스템에서
위 코드에서 grid_map은 numpy 배열로 힙에 저장되며, 함수 호출 시 스택에 있는 변수 grid_map이 이 객체를 참조update_empty_cells 함수로 grid_map을 전달할 때도 동일한 힙 객체를 참조하게 됩니다.따라서 update_empty_ce
atexit.register() : 프로그램이 정상적으로 종료될 때 특정 함수를 실행하도록 예약하는 데 사용이는 스크립트가 종료될 때 수행되어야 하는 정리 작업이나 마무리 작업을 등록하는 데 유용프로그램이 비정상적으로 종료될 경우: (예: 강제 종료나 시스템 충돌)ke
Python에서 변수는 메모리에 저장되는 방식에 따라 동적 메모리 할당과 정적 메모리 할당으로 구분할 수 있습니다. 그러나, Python의 변수는 대부분 동적 메모리 할당을 사용합니다. 그럼에도 불구하고, 변수의 용도와 특징에 따라 어떻게 메모리가 할당되는지 이해할 필
Python 인터프리터는 Python 코드를 실행하는 프로그램Python 소스 코드를 읽고 실행 가능한 명령어로 변환하는 역할Python은 컴파일러 언어가 아닌 인터프리터 언어로, 프로그램이 실행되는 동안 한 줄씩 코드를 해석하고 실행이 과정에서 Python 인터프리터
Python의 Global Interpreter Lock(GIL, 전역 인터프리터 락): 멀티스레드 환경에서 Python 인터프리터의 실행을 제어하기 위해 사용되는 메커니즘python 인터프리터?: https://velog.io/@jk01019/Python-인
opencv 만 저장된 이미지를 BGR로 인식pillow, matplotlib, imageio, skimage 전부 -> 저장된 이미지를 RGB로 인식