람다 함수는 이름 없는(익명) 한 줄짜리 함수이다. 간단한 작업을 수행하는 함수를 생성할 때 사용되며, 람다 함수는 재사용이 필요하지 않은 경유 유용하다. lambda 키워드를 사용하여 정의한다. 코드의 형식은 다음과 같다. lambda 매개변수:결과
장점
단점
Numpy는 수치 데이터를 다루기 위한 고성능 다차우너 배열 객체인 ndarray를 제공하고, 배열에 대한 수학적 연산을 수행하는 라이브러리이다. 선형대수, 통계, 푸리에 변환 등의 기능을 제공한다. Numpy는 벡터화도니 연산을 지우너하여 빠른 처리가 가능하다.
Pandas는 데이터 분석 및 조작을 위한 라이브러리로, DataFrame과 Series와 같은 데이터 구조를 제공한다 데이터를 쉽게 필터링, 정렬, 그룹화하고, 결측치를 처리하거나 통계를 계산하는 기능을 제공한다. Pandas는 테이블 형태의 데이터를 다루기에 적합하며, Numpy를 기반으로 만들어 졌다.
Numpy와 Pandas의 주요 차이점은 다음과 같다.
상속은 객체 지향 프로그래밍에서 한 클래스의 속성과 메서드를 다른 클래스가 이어받는 기능이다. 상속을 통해 코드의 재사용성을 높이고, 모듈화를 쉽게 할 수 있다. Python에서 상속은 class ChildClass(ParentClass):와 같은 형식으로 구현할 수 있다.
리스트에서 중복값을 제외하려면, 집합(set) 자료형을 활용할 수 있다. 예를들어 unique_list = list(set(original_list))처럼 사용하여 중복값이 제거된 새로운 리스트를 얻을 수 있다.
컴팡리 언어는 코드를 기계어로 번역하는 컴파일 과정을 거친 후 실행되며, 이 과정에서 발생하는 오류를 수정해야 한다. 컴파일 언어의 예로는 C, C++, Java등이 있다. 인터프리터 언어는 코드를 한 줄씩 실행함녀서 해석하는 방식으로 오류가 발생하면 해당 지점에서 프로그램이 중단된다. 인터프리터 언어의 예로는 Python, JavaScript, Ruby등 이 있다.
함수, 클래스, 객체의 관계를 요약하면 함수는 특정 기능을 수행하는 코드 블록이며, 클래스는 객체의 설계도 역할을 하고, 객체는 클래스를 통해 생성되어 독립적으로 상태와 행동을 관리한다. 이를 통해 프로그램을 모듈화하고 코드의 재사용성을 높일 수 있다.
인터프리터는 프로그램을 실행할 때 소스 코드를 한 줄씩 해석하며 실행ㅎ나다. 따라서 실행 시간이 오래 걸리지만, 개발과 디버깅이 쉽다. 파이썬은 대표적인 인터프리터언어이다. 컴파일러는 프로그램을 실행하기 전에 소스 코드를 기계어로 번역하여 목적 파일을 생성한다. 이로 인해 실행 시간이 빠르지만 개발과 디버깅이 어렵다. C, C++이 대표적인 컴파일 언어이다.
파이썬의 기본 자료형에는 정수(int), 실수(float), 문자열(str), 불린(bool)이 있다. 이외에도 리스트, 튜플, 딕셔너리, 집합 등의 컬렉션 자료형이 잇다.
변수는 프로그램 실행 도중 값이 변경될 수 있는 저장 공간을 의미한다. 상수는 값이 변하지 않는 저장 공간을 의미하며, 일반적으로 대문자로 표기한다. 파이썬은 상소를 내장하지 않지만, 개발자들은 관례적으로 대문자로 표기하여 상수임을 명시한다.
가비지 컬렉션은 프로그램 실행 도중 사용하지 않는 메모리를 자동으로 회수하는 메커니즘입니다. 파이썬의 경우, 참조 카운터를 사용하여 객체에 대한 참조 횟수를 세고, 참조 카운트가 0이 되면 메모리를 회수합니다. 또한, 순환 참조를 처리하기 위해 가비지 컬렉터를 사용합니다.
얕은 복사는 객체의 최상위 요소를 복사하지만, 내부 요소는 원본과 동일한 참조를 가리킵니다. 깊은 복사는 객체의 모든 요소를 재귀적으로 복사하여 완전히 독립적인 복사본을 생성합니다. 파이썬에서는 copy 모듈의 shallow() 함수를 사용하여 얕은 복사를, deepcopy() 함수를 사용하여 깊은 복사를 수행할 수 있습니다.
멀티스레딩은 프로세스 내에서 여러 개의 스레드를 동시에 실행하는 기법입니다. 스레드는 같은 프로세스의 메모리를 공유하므로, 메모리 사용이 효율적입니다. 그러나 파이썬에서 GIL 때문에 CPU-bound 작업에서 병목 현상이 발생할 수 있습니다. 멀티프로세싱은 여러 개의 독립적인 프로세스를 동시에 실행하는 기법입니다. 각 프로세스는 독립된 메모리 공간을 가지므로, GIL의 영향을 받지 않아 CPU-bound 작업에서 더 효율적일 수 있습니다. 그러나 프로세스간 메모리를 공유하기 어렵고, 통신 오버헤드가 발생할 수 있습니다.
동시성은 여러 작업이 동시에 실행되는 것처럼 보이는 것을 말합니다. 실제로는 작업들이 시간을 나눠서 번갈아 실행되지만, 사용자에게는 동시에 진행되는 것처럼 느껴집니다. 병렬성은 여러 작업이 실제로 동시에 실행되는 것을 말합니다. 멀티코어 프로세서를 사용할 때 여러 개의 코어가 동시에 작업을 처리할 수 있어 병렬 실행이 가능합니다.
GIL은 파이썬 인터프리터가 한 번에 하나의 스레드만 실행할 수 있도록 제한하는 메커니즘입니다. 이는 메모리 관리와 객체의 동기화를 간단하게 만들어주지만, 멀티스레딩 환경에서 CPU-bound 작업의 성능을 저하시킬 수 있습니다.
*args는 함수에 가변 개수의 위치 인자를 전달하는 데 사용됩니다. 이를 통해 함수는 몇 개의 위치 인자가 오든 처리할 수 있습니다. 반면, **kwargs는 함수에 가변 개수의 키워드 인자를 전달하는 데 사용됩니다. 이를 통해 함수는 몇 개의 키워드 인자가 오든 처리할 수 있습니다.
이터레이터는 iter()와 next() 메소드를 구현한 객체입니다. 이터레이터를 사용하여 순차적으로 컬렉션의 요소에 접근할 수 있습니다. 이터레이터는 메모리를 효율적으로 사용할 수 있지만, 사용자 정의 이터레이터를 만들려면 별도의 클래스를 작성해야 할 수도 있습니다.
제너레이터는 이터레이터를 더 쉽게 생성하는 방법으로, 함수 내부에 yield 키워드를 사용하여 구현합니다. yield를 사용하면 함수의 실행을 일시 중단하고, 다음 호출 시 중단된 지점부터 계속 실행할 수 있습니다. 이를 통해 메모리를 더 효율적으로 사용할 수 있으며, 이터레이터에 비해 코드가 간결하고 가독성이 높아집니다. 그러나 제너레이터는 상태를 유지하므로, 일반 함수에 비해 구현이 복잡할 수 있습니다.
리스트 컴프리헨션은 리스트를 생성하는 간결하고 가독성 높은 방법입니다. for 문이나 다른 반복문을 사용하는 것보다 코드가 짧아지고, 실행 시간도 일반적으로 더 짧습니다. 리스트 컴프리헨션을 사용하는 방법은 다음과 같습니다. [expression for item in iterable if condition] 예를 들어, 0부터 9까지의 제곱값을 구하는 리스트 컴프리헨션은 다음과 같습니다. squares = [x * x for x in range(10)]
Python에서 정규 표현식을 다루기 위해 re 모듈을 사용합니다. 주요 함수들은 search(), match(), findall(), finditer(), sub(), split() 등이 있습니다. 정규 표현식을 사용하여 문자열에서 패턴을 찾거나, 대체하거나, 나누는 등의 작업을 수행할 수 있습니다.
Python은 가비지 컬렉션(GC) 메커니즘을 사용하여 메모리를 관리합니다. 가장 일반적인 GC 방법은 참조 카운팅입니다. 객체에 대한 참조가 더 이상 없으면 메모리가 해제됩니다. 또한, 순환 참조 같은 메모리 누수 문제를 방지하기 위해 generational GC 알고리즘도 사용됩니다.
예외 처리를 위해 Python에서는 try, except, finally, else 키워드를 사용합니다. try 블록에서 예외가 발생할 수 있는 코드를 작성하고, except 블록에서 예외를 처리합니다. finally 블록은 예외 발생 여부와 관계없이 항상 실행되는 코드를 작성합니다. else 블록은 예외가 발생하지 않을 때 실행되는 코드를 작성합니다.
Python에서 파일 입출력을 위해 open() 함수를 사용하여 파일을 엽니다. 파일을 열 때는 파일 모드를 지정할 수 있습니다. (예: 읽기 모드 'r', 쓰기 모드 'w', 추가 모드 'a', 이진 모드 'b' 등) 파일 작업을 완료한 후에는 close() 메서드를 사용하여 파일을 닫습니다. with 문을 사용하면 파일이 자동으로 닫히므로 권장되는 방식입니다.
모듈은 Python 파일입니다. 이 파일에는 Python 코드, 변수, 함수, 클래스 등이 포함될 수 있습니다. 다른 Python 코드에서 import 문을 사용하여 모듈을 가져올 수 있습니다.
패키지는 여러 모듈을 구조화하는 방법입니다. 패키지는 디렉토리 구조로 구성되며, 각 디렉토리에는 init.py 파일이 포함되어 있습니다. 이 파일은 해당 디렉토리가 패키지의 일부임을 Python에 알려줍니다. 패키지를 사용하면 관련된 모듈을 논리적으로 그룹화하여 코드의 재사용성과 가독성을 높일 수 있습니다. 패키지에서 모듈을 가져오려면 import 문을 사용하고, 점 표기법으로 패키지와 모듈을 지정합니다.
예를 들어, 패키지 my_package 안에 모듈 my_module이 있다고 가정할 때, 다음과 같이 가져올 수 있습니다. import my_package.my_module / from my_package import my_module
메타클래스는 클래스의 클래스로, 클래스의 행동을 정의하는데 사용됩니다. 메타클래스를 사용하면 클래스 생성 과정을 사용자 정의할 수 있으며, 이를 통해 동적으로 클래스를 생성하거나 수정할 수 있습니다. type 함수를 사용하여 메타클래스를 정의할 수 있습니다.
메모이제이션은 컴퓨팅 결과를 캐시에 저장하여 동일한 입력에 대한 계산을 반복하지 않도록 함으로써 프로그램의 실행 시간을 줄이는 최적화 기법입니다. 파이썬에서는 functools.lru_cache 데코레이터를 사용하여 메모이제이션을 쉽게 구현할 수 있습니다.
동적 타이핑은 변수의 타입이 실행 시점에 결정되는 방식입니다. 파이썬은 기본적으로 동적 타이핑 언어입니다. 정적 타이핑은 변수의 타입이 선언 시점에 결정되는 방식입니다. 파이썬 3.5부터 typing 모듈을 사용하여 타입 힌팅(type hinting)을 통해 정적 타이핑을 지원합니다.
GIL은 파이썬 인터프리터에서 스레드간의 동시 접근을 제한하기 위해 사용되는 동기화 메커니즘이며, 한 번에 하나의 스레드만 실행되도록 합니다. 이로 인해 멀티 스레딩을 사용해도 병렬 처리가 제한되어 CPU 병렬성을 최대한 활용할 수 없게 됩니다. GIL 문제를 해결하기 위해 멀티프로세싱 모듈을 사용하거나 GIL을 회피하는 C/C++ 확장을 사용할 수 있습니다.