Python 302

[Python] 콜백 함수 (Callback)

개요 프로그래밍 업무를 하다 보면 콜백함수란 단어를 간혹 듣게 되는데, 개인적으로 개념을 잘 이해하고 있는 것 같진 않아 이번 기회에 정리해보려고 한다. Callback 프로그래밍에서 콜백 또는 콜백함수란 다른 코드의 인수로 넘겨주는 실행 가능한 코드를 말한다. 일반적으로 함수는 사용자 정의 코드에서 호출하는데, Callback은 이와 반대로 함수 내에서 사용자 정의 코드를 호출하게 된다. 호출 방향이 일반적인 경우와 반대이기 때문에 Call + Back이라고 일컬어진다. 콜백함수를 다른 코드로 전달할 때는 콜백 함수의 포인터, 람다 함수의 형태로 전달하며 필요에 따라 즉시 실행하거나 나중에 실행할 수 있다. 예시 간단한 예시로 콜백함수의 구현을 알아본다. 아래와 같이 입력 받은 숫자가 양수인지, 음수인..

Python 2024.01.25

[Python] ldap3 사용법

개요 보통 회사에서는 계정 관리, 인증 등에 LDAP을 사용하고 있는데, LDAP 서버에 저장된 정보 조회가 필요한 상황이다. Python으로 LDAP 서버에 요청할 수 있는 ldap3 라이브러리 사용방법을 간단히 적어둔다. ldap3는 간단히 server, connection 객체를 정의하고, 연결에 대해 명령을 실행하는 방식으로 사용한다. ldap3 라이브러리 설치 pip 등을 이용해 설치할 수 있다. pip install ldap3 ldap3 import ldap3에서 제공하는 클래스 등을 활용하기 위해 import 하여 사용한다. 보통 아래와 같이 사용하는 것 같다. from ldap3 import Server, Connection, ALL 서버 접근 Ldap 서버에 접근할 때는 접근할 서버의 주..

Python 2024.01.05

[Python] itertools.product - 데카르트 곱

데카르트 곱 (cartesian product) 곱집합 또는 데카르트 곱(product set, product)은 각 집합의 원소를 성분으로 하는 튜플의 집합이다. Python에서는 itertools.product 함수로 사용할 수 있는데, 이 글에서 사용 방법을 적어둔다. itertools.product itertools.product 함수는 중첩 for 문과 동등하다. 예로 들어 product(A, B)는 (x, y) for x in A for y in B라고 할 수 있다. from itertools import product A = 'xyz' B = [1, 2 ,3] print(*product(A, B)) itertools.product 중복 허용 집합 자신의 곱을 구할 때는 반복 횟수를 지정하는 ..

Python 2023.12.25

[Python] 깊은 복사 (deep copy)

개요 이번 글에서는 2023.12.18 - [Python] 얕은 복사 (Shallow copy)에서 정리한 얕은 복사와 반대되는 개념인 깊은 복사에 대해 정리한다. 깊은 복사 깊은 복사(deep copy)란 복사 수행 시 객체 자체를 다른 메모리 공간에 복사하는 것의 의미한다. 복사 시 참조 메모리 주소가 달라지기 때문에 변수 간의 독립성을 유지할 수 있다. 깊은 복사 수행 깊은 복사는 copy.deepcopy를 이용해 수행할 수 있다. 아래 코드는 가변 객체를 원소로 하는 list에 대해 깊은 복사를 수행하는데, 실제로 가변 객체 원소인 1번 원소의 주소값을 확인해 보면, from copy import deepcopy a = ["python2", ["python3"]] b = deepcopy(a) pr..

Python 2023.12.19

[Python] 얕은 복사 (Shallow copy)

개요 2023.12.14 - [Python] 불변 객체 (Immutable) 2023.12.15 - [Python] 가변 객체 (Mutable) 위 두 개 글에서 불변 객체와 가변 객체에 대해 정리했는데, 이 글에서는 얕은 복사에 대해 정리해보려고 한다. 얕은 복사 얕은 복사(Shallow copy)란 객체의 참조값, 주소값만 복사하는 것을 의미한다. 객체의 주소값을 복사하기 때문에 복사된 값에 변경이 발생하면 복사한 값도 영향을 받아 두 변수 간에 독립성이 성립하지 않게 되는 특징이 있다. 다만, 변수의 독립성과 관련해서는 참조한 객체가 가변 객체인 경우에만 문제가 되며, 관련해서는 사실 2023.12.15 - [Python] 가변 객체 (Mutable)에서 살펴보았다. 따라서 이 글에서는 얕은 복사를..

Python 2023.12.18

[Python] 가변 객체 (Mutable)

객체 종류 Python에서는 객체를 두 가지 종류로 구분할 수 있다. Mutable : 가변객체. 상태를 변경할 수 있는 객체 Immutable : 불변객체. 상태를 변경할 수 없는 객체 여기서 상태란 값을 의미한다. 즉, 어떤 변수에 값을 할당하고 갱신할 때 저장된 값의 데이터형의 종류에 따라 동작방식이 다르다. 2023.12.14 - [Python] 불변 객체 (Immutable)에서는 불변 객체에 대해서 정리했는데 이 글에서는 가변 객체에 대해 정리한다. 가변(Mutable) 객체 1. 변수에 할당한 값이 달라져도 변수가 참조하는 메모리 주소가 달라지지 않는다. a = ["python2", "python3"] print(f"""a={a} id(a)={id(a)}""") a.append('python..

Python 2023.12.15

[Python] 불변 객체 (Immutable)

객체 종류 Python에서는 객체를 두 가지 종류로 구분할 수 있다. Mutable : 가변객체. 상태를 변경할 수 있는 객체 Immutable : 불변객체. 상태를 변경할 수 없는 객체 여기서 상태란 값을 의미한다. 즉, 어떤 변수에 값을 할당하고 갱신할 때 저장된 값의 데이터형의 종류에 따라 동작방식이 다르다. 이해해 둘 필요가 있어 보여 이 글에서는 불변 객체에 대해 정리한다. 불변(Immutable) 객체 특징 1. 변수에 할당한 값을 변경하면 변수가 참조하는 메모리 주소가 달라진다. a = "python2" print(f'a={a}, id(a)={id(a)}') a = "python3" print(f'a={a}, id(a)={id(a)}') 위의 코드는 다음과 같은 순서로 동작한다. 문자열 객체..

Python 2023.12.14

[Python] dotenv - .env 파일 읽기

개요 Airflow 프로세스를 동작시킬 때 KEY=VALUE 형태로 정의된 환경 변수 파일에 적절한 값을 저장/로드하여 사용하는데, 해당 값을 Python으로도 사용하려고 한다. 확인해보니 .env 파일로부터 키-값 형식의 값을 읽어 환경 변수로 설정할 때는 python-dotenv라는 패키지를 사용하는 것 같다. 패키지 사용 방법을 정리해둔다. python-dotenv 설치 python-dotenv는 기본 내장 패키지가 아니기 때문에 별도 설치가 필요하다. pip install python-dotenv 모듈 임포트 사용 사례에 따라서 다음과 같이 import 하여 사용한다. from dotenv import load_dotenv # 환경 변수로 설정 from dotenv import dotenv_val..

Python 2023.11.23

[Python] PyMySQL - DELETE 하기

개요 2022.11.05 - [Python] PyMySQL - MySQL SELECT 하기 2023.11.17 - [Python] PyMySQL - INSERT 하기 위 두 개 글에서 Python을 이용해 MySQL에 저장된 데이터를 조회하고, 데이터를 테이블에 저장했다. 이번 글에서는 테이블에 저장한 데이터를 삭제해보려고 한다. 예시 테이블 예시로 위와 같은 users 테이블이 있다고 하자. DDL 더보기 CREATE TABLE users ( NAME VARCHAR(10), EMAIL VARCHAR(50), PRIMARY KEY (NAME) ); INSERT INTO users(NAME, EMAIL) VALUES ('daum', 'test@daum.net'), ('june', 'june@tistory...

Python 2023.11.21

[Python] PyMySQL - INSERT 하기

개요 2022.11.05 - [Python] PyMySQL - MySQL SELECT 하기에서 python으로 MySQL에 저장된 데이터를 조회해 봤는데, 이번 글에서는 INSERT를 수행해보려고 한다. cursor.execute PyMySQL로 일회성 SQL을 실행할 때는 cursor 클래스에 정의된 execute 함수를 사용한다. 예시로 다음과 같은 users 테이블이 있다고 하자. DDL 더보기 CREATE TABLE users ( NAME VARCHAR(10), EMAIL VARCHAR(50), PRIMARY KEY (NAME) ); INSERT INTO users(NAME, EMAIL) VALUES ('june', 'june@tistory.com'), ('passwd', 'passwd@tisto..

Python 2023.11.17