Python
-
[Python] Decorator개발 2024. 5. 17. 10:45
파이썬에선 함수위에 데코레이터를 둬서 함수의 실행전후에 특정한 작업을 주입할 수 있다. 아래 코드에선 foo 함수에 logging 이란 데코레이터를 추가했고 실행 전에 before 실행 후엔 after 를 출력하도록 했다. def logging(func): def wrapper(*args, **kwargs): print("before") ret = func(*args, **kwargs) print("after") return ret return wrapper@loggingdef foo(): print("foo")foo() 실행 결과 의도했던 대로 출력된다. 로깅이나 실행 전후에 처리하고 싶은 로직을 넣어야하는 경우 유용하게 사용할 수 ..
-
[python] __all__ 을 이용해 전체 임포트 막기개발 2024. 5. 8. 10:27
메타클래스 __all__ 을 활용하면 패키지 전체 임포트시 특정 클래스나 메소드만 임포트 되도록 제한할 수 있다. transporation.py 에서 Bus, Taxi, Subway 클래스를 선언하고 __all__ 에는 Bus와 Taxi 만 추가했다# transporation.pyclass Bus: passclass Taxi: passclass Subway: pass__all__ = ["Bus", "Taxi"] main.py 에서 transporation.py 파일 내부 클래스를 전체 임포트하고 사용하면from transporation import *sb = Subway() Subway 를 찾을 수 없다고 나온다.➜ clean-python python3 main.pyTraceback (..
-
__init__.py 를 이용한 모듈 관리개발 2024. 5. 8. 10:17
파이썬 3.3 이전에는 __init__.py 는 디렉토리가 파이썬 패키지임을 명시할 때 필요했었다면 이제는 __init__.py 가 없어도 없어도 자동으로 디렉토리를 패키지로 인식한다. 대신에 __init__.py 를 사용하면 패키지 내부에 있는 클래스 선언을 하나로 모아줄 수 있는 장점이 있다. 이런 프로젝트 구조를 가지고 있고├── main.py└── phone ├── galaxy.py └── iphone.py galaxy.py 와 iphone.py 에서 각각 클래스를 선언했다면# galaxy.pyclass Galaxy: def __init__(self) -> None: pass# iphone.pyclass Iphone: def __init__(self) -> No..
-
파이썬 - 리스트 컴프리헨션개발 2024. 5. 3. 13:12
개인적으로 파이썬은 가독성이 좋은 언어라고 생각하는데 가독성을 돕는 대표적인 기능이 리스트 컴프리헨션이다 리스트 요소들에 제곱 값을 새로운 리스트로 만들기 위해선 아래 코드처럼 map 이라는 함수를 사용해서 구현하는데numbers = [1, 2, 3, 4, 5]square_numbers = map(lambda num: num**2, numbers) 리스트 컴프리헨션을 사용하면 함수없이 구현할 수 있다. square_numbers = [num**2 for num in numbers] 처음 사용할 때는 문법이 익숙하지 않을수도 있다. 연산이 먼저 나오고 뒤에 for 문이 나오는 문법이 대부분 프로그래머한테 익숙한 형태는 아니다. 그런데 자주 사용하다보면 따로 함수를 만들지 않아도 되기 때문에 편하게 쓸 수..
-
python - async def, asyncio개발 2023. 6. 3. 16:26
async def 비동기 함수를 정의하기 위한 파이썬 문법. async def 키워드를 사용하여 정의된 함수는 비동기적으로 실행될 수 있고 내부의 비동기 함수도 병렬로 실행할 수 있다 async def convert_int(a: str): await asyncio.sleep(1) return int(a) async def calc_add(str_a: str, str_b: str): now = datetime.now() int_a, int_b = await asyncio.gather(convert_int(str_a), convert_int(str_b)) print(datetime.now() - now) # 0:00:01.001219 return int_a + int_b loop = asyncio.get_e..
-
Python - namedtuple개발 2023. 2. 14. 18:23
namedtuple 파이썬에서 튜플은 컴마로 나눠진 데이터의 집합을 말한다. 예로 이런 것들은 모두 튜플이다 data: Tuple[str | int, ...] = (1, 2, 4, "Geek") 튜플은 배열처럼 index로 접근할 수 있으나 Dict처럼 개별 값에 대한 키 값이 없다보니 관리하는게 쉽지 않다. 그래서 파이썬에서는 namedtuple 걸 사용해 필드 값을 설정할 수 있게 했다. from collections import namedtuple Point = namedtuple("Point", ["x", "y"]) point = Point(x=3, y=4) 결과 값은 다음과 같이 나온다. 필드 명에 따라서 값 접근이 가능하기 때문에 더 직관적으로 값을 받을 수 있다. print(point) pr..
-
Python - 데코레이터개발 2023. 2. 14. 16:09
Decorator 파이썬에서는 함수에 데코레이터라는 기능을 추가할 수 있다. 함수가 실행 될 때 다른 함수를 타도록 만드는 기능이다. def to_upper_text(func): text = func() if not isinstance(text, str): raise TypeError("not a string type") return text.upper() @to_upper_text def say(): return "welcome" say 함수 위에 @to_upper_text 라는 데코레이터를 추가했다. 데코레이터 안에서는 전달 받은 func() 함수의 결과 값이 str인지 확인하고 아니면 에러를 호출, 맞으면 upper 함수를 호출해서 대문자로 리턴한다. WELCOME 실행하면 대문자로 바뀌어서 출력된..