본문 바로가기

분류 전체보기

Python: 일급함수(first-class Functions) 개념 정리 1. 일급 함수란?프로그래밍 언어에서 함수가 일급 객체(First-Class Citizen)로 취급된다는 것은, 함수를 변수처럼 다룰 수 있고, 함수에 다른 함수나 데이터를 전달하거나 반환값으로 사용할 수 있다는 의미입니다. 파이썬은 함수형 프로그래밍을 지원하며, 함수 자체를 일급 객체로 취급합니다. 2. 일급 함수의 주요 특징일급 함수로서의 함수는 다음과 같은 특징을 가집니다:변수에 함수 할당이 가능함함수를 다른 함수의 인자로 전달 가능함함수를 다른 함수의 반환값으로 사용할 수 있음데이터 구조에 저장 가능함3. 일급 함수의 특성에 대한 예제 1. 변수에 함수 할당 파이썬은 함수도 하나의 객체로 취급하므로, 함수를 변수에 할당하면 해당 변수를 함수처럼 사용할 수 있습니다.#factorial 예제def f.. 더보기
Python : 데코레이터 정의, 장단점 및 예제 1. Python 데코레이터란 무엇인가?Python 데코레이터는 함수나 메서드를 감싸서 동작을 수정하거나 확장할 수 있는 강력한 도구입니다. 데코레이터는 또 다른 함수를 반환하는 함수로, 주로 @ 표기법을 사용해 함수나 클래스에 적용됩니다. 주요 개념:동작 확장: 기존 코드를 수정하지 않고 새로운 기능을 추가합니다.재사용성: 중복된 로직을 데코레이터로 분리하여 여러 곳에서 재사용 가능합니다.클린 코드: 로직을 분리하여 코드 가독성을 높입니다.예제def my_decorator(func): # 대상함수를 입력값으로 받음 def wrapper(*args): # 대상함수의 입력파라미터를 내부함수를 통해 받음 print("함수 호출 전 작업") func(*args) # 대상함수 호출.. 더보기
Python : 클로저(Closure)에 대한 모든 것 클로저(Closure)는 자신이 선언될 당시의 환경(context)을 기억하는 함수를 말합니다. 클로저는 함수 내부에서 정의된 함수가 외부 함수의 변수에 접근할 수 있는 기능을 제공합니다. 이러한 구조는 데이터 은닉(data hiding)이나 상태 유지(state retention)가 필요할 때 유용하며, 특히 고급 함수형 프로그래밍에서 자주 사용됩니다.데이터 은닉: 외부에서 접근할 수 없는 데이터 캡슐화를 가능하게 합니다.상태 유지: 외부 함수가 종료된 이후에도 변수 상태를 유지할 수 있습니다.코드 간결화: 재사용성과 간결성을 높이는 패턴을 제공합니다.변수의 범위클로저를 이해하기 위해서는 먼저 변수의 범위에 대하여 알고 있어야 합니다.  파이썬에서 변수의 범위는 LEGB 규칙을 따릅니다:Local: 함.. 더보기
Python : Asyncio 비동기 프로그래밍 - 웹스크래핑 두가지 방법 지금까지 asyncio 를 사용한 비동기 프로그래밍에 대해서 알아보았습니다.  asyncio 를 사용하여 자주 구현되는 웹스크래핑 예제를 알려드리고자 합니다. aiohttp 를 사용한 웹스크래핑 이미 지난 블로그에서 소개해드렸던 방법입니다. aiohttp를 사용하면 HTTP 기반의 비동기 IO 작업을 손쉽게 작성할 수 있습니다.import asynciofrom time import timeimport aiohttp# 크롤링할 웹사이트 목록urls = [ "https://www.naver.com", "https://www.daum.net", "https://www.tistory.com/", "https://www.google.com"]# 세션에서 URL을 호출하여 응답을 받아오는 함수.. 더보기
Python : Event_loop - 동기작업을 비동기로 처리하기 Event_loop의  run_in_executor는 CPU 바운드 작업 또는 비동기 지원이 되지 않는 작업을 비동기적으로 처리하기 위해 asyncio에서 제공하는 메서드입니다. 비동기 함수로 전환할 수 없는 함수(예: 블로킹 I/O 작업, 복잡한 계산 작업 등)를 별도의 스레드나 프로세스에서 실행하고, 이벤트 루프는 다른 비동기 작업을 계속 실행할 수 있게 합니다. run_in_executor의 기본 사용법 run_in_executor는 다음과 같이 사용할 수 있습니다:await loop.run_in_executor(executor, blocking_func, *args)loop: 이벤트 루프 객체입니다.executor: concurrent.futures.ThreadPoolExecutor 또는 Proc.. 더보기
Python : Async With - 비동기 컨텍스트 관리자 와 aiohttp 사용가이드 async with는 비동기 컨텍스트 관리자로, 비동기 작업 내에서 자원을 안전하게 관리하고 정리할 수 있도록 돕는 구문입니다. 일반적인 with 문과 유사하지만, 비동기 I/O 작업과 호환되도록 설계되었습니다. 이를 통해 파일이나 네트워크 연결 같은 리소스를 효율적으로 다루면서, 자동으로 리소스를 열고 닫아주는 관리 기능을 제공합니다. 아래 예제는 async with 없이 aiohttp 를 사용하는 예제입니다.  aiohttp 는 Python에서 비동기 HTTP 클라이언트와 서버를 쉽게 구현할 수 있도록 지원하는 패키지입니다.Async With 없이 구현된 예제import aiohttpimport asyncioasync def fetch_data(url): session = aiohttp.Cli.. 더보기
Python : asyncio event_loop 이해하기 Python의 이벤트 루프(event loop)는 비동기 프로그래밍의 핵심 메커니즘으로, 비동기 작업들이 순차적으로 실행되도록 관리하는 구조입니다. 이벤트 루프는 하나의 작업이 끝나기를 기다리지 않고, 다른 작업을 수행하며 효율적으로 실행 시간을 관리합니다. 이 메커니즘은 특히 네트워크 요청, 파일 입출력 같은 I/O 바운드 작업에서 성능을 높이기 위해 유용합니다. Python의 asyncio 모듈이 이벤트 루프의 주요 기능을 제공하며, 이를 통해 비동기 작업을 생성하고 관리할 수 있습니다. 이벤트 루프 이해하기Python의 이벤트 루프는 비동기 작업을 처리하고 콜백 함수, 네트워크 소켓, 파일 입출력 같은 이벤트들을 감시하며 적절한 시점에 해당 작업을 수행합니다. asyncio의 get_event_lo.. 더보기
Python : asyncio의 기본 개념, 주요 구성 요소, 예제 asyncio는 파이썬의 비동기 프로그래밍을 위한 표준 라이브러리로, 비동기 입출력(I/O) 작업을 효율적으로 처리하고 동시성을 관리할 수 있게 해줍니다. asyncio는 특히 파일 입출력, 네트워크 요청, 데이터베이스 쿼리 같은 I/O 바운드 작업에 적합하며, CPU를 차지하지 않고 여러 작업을 동시에 수행할 수 있도록 돕습니다. 아래에서 asyncio의 기본 개념, 주요 구성 요소, 예제, 그리고 비동기 프로그래밍의 장점에 대해 살펴보겠습니다.  1. asyncio의 개념asyncio는 이벤트 루프(Event Loop)를 중심으로 비동기 작업을 관리합니다. 이벤트 루프는 코루틴을 실행하고 중단 지점(예: await)에서 다른 작업으로 전환하여 여러 작업이 마치 동시에 실행되는 것처럼 동작하도록 합니다.. 더보기