일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- C# delegate
- HTML
- c#
- 다트 언어
- c# 추상 클래스
- 포인터
- git
- dart 언어
- 도커
- vim
- c# winform
- Data Structure
- c언어
- jupyter lab
- Unity
- C++
- Python
- 유니티
- 깃
- C언어 포인터
- Algorithm
- 구조체
- Houdini
- gitlab
- jupyter
- 플러터
- docker
- Flutter
- github
- c# 윈폼
- Today
- Total
목록Programming/Python (20)
nomad-programmer
PyPI(Python Package Index)는 파이썬 프로그래밍 언어를 위한 소프트웨어 패키지 저장소이다.PyPI는 파이썬 개발자들이 작성한 다양한 패키지와 라이브러리를 공유하고, 이를 다른 개발자들이 쉽게 설치하고 사용할 수 있도록 돕는 역할을 한다.PyPI에서 제공하는 패키지들은 pip 라는 패키지 관리 도구를 통해 간편하게 설치할 수 있다. 예를 들어, PyPI에서 제공되는 특정 패키지를 설치하고 싶다면 터미널에서 다음과 같은 명렁어를 입력한다.pip install 이렇게 하면 해당 패키지가 PyPI에서 다운로드되어 사용자의 로컬 환경에 설치된다. PyPI는 파이썬 개발자들 사이에서 매우 중요한 역할을 하며, 오픈 소스 커뮤니티의 성장과 발전을 촉진하는 데 기여하고 있다.https://pypi...
poetry 란?poetry는 python 프로젝트의 의존성을 관리하고, 패키지를 빌드 및 배포할 수 있도록 도와주는 도구이다.poetry는 `pyproject.toml` 파일을 사용하여 프로젝트의 의존성, 패키지 메타데이터, 그리고 빌드 시스템을 정의한다.https://github.com/python-poetry/poetry GitHub - python-poetry/poetry: Python packaging and dependency management made easyPython packaging and dependency management made easy - python-poetry/poetrygithub.compoetry 공식 사이트의 설치https://python-poetry.org/doc..
Ruff는 Rust로 작성된 매우 빠른 린터 및 포매터이다.https://github.com/astral-sh/ruff GitHub - astral-sh/ruff: An extremely fast Python linter and code formatter, written in Rust.An extremely fast Python linter and code formatter, written in Rust. - astral-sh/ruffgithub.compip install ruffRuff와 Black과의 차이점Ruff와 Black은 모두 Python 코드 품질 개선 및 유지보수성을 높이는 도구들이다. 허나 이들의 목적에는 차이가 있다.Ruff (Linter)기능코드 스타일 검사를 통해 PEP8 등 스타일..
FastAPI는 정말 빠른 프레임워크이다. 그리고 FastAPI의 동생이 있는데, 그것은 바로 Typer이다. https://fastapi.tiangolo.com/ko/ FastAPI FastAPI FastAPI 프레임워크, 고성능, 간편한 학습, 빠른 코드 작성, 준비된 프로덕션 문서: https://fastapi.tiangolo.com 소스 코드: https://github.com/tiangolo/fastapi FastAPI는 현대적이고, 빠르며(고성능), 파이썬 fastapi.tiangolo.com https://typer.tiangolo.com/ Typer Typer, build great CLIs. Easy to code. Based on Python type hints. typer.tiango..
asyncio는 비동기 프로그래밍을 위한 모듈이며, CPU 작업과 I/O를 병렬로 처리하게 해준다. 동기(synchronous) 처리는 특정 작업이 끝나면 다음 작업을 처리하는 순차처리 방식이다. 비동기(asynchronous) 처리는 여러 작업을 처리하도록 예약한 뒤 작업이 끝나면 결과를 받는 방식이다. 네이티브 코루틴 만들기 먼저 asyncio를 사용하려면 다음과 같이 async def로 네이티브 코루틴을 만든다. 참고로 파이썬에서는 제네레이터 기반의 코루틴과 구분하기 위해 async def로 만든 코루틴은 네이티브 코루틴이라고 한다. async def 함수이름(): 코드 import asyncio async def hello(): # async def로 네이티브 코루틴을 만듦 print('hello..
open으로 파일을 열 때 with as를 사용하여 파일 객체의 close를 자동으로 호출해주었다. 이런 방식으로 with as를 사용하려면 클래스에 __enter__와 __exit__ 메서드를 구현해주면 된다. class 클래스이름: def __enter__(self): # 시작할 때 실행할 코드 def __exit__(self, exe_type, exc_val, exc_tb): # 종료할 때 실행할 코드 with에 클래스의 인스턴스를 지정하고 as 뒤에 결과를 저장할 변수를 지정한다. with 클래스() as 변수: # 코드 다음은 open('hello.tt', 'w') 처럼 동작하는 OpenHello 클래스이다. class OpenHello: def __enter__(self): # 파일 객체를 속..
정규표현식은 일정한 규칙을 가진 문자열을 표현하는 방법이다. 복잡한 문자열 속에서 특정한 규칙으로 된 문자열을 검색한 뒤 추출하거나 바꿀 때 사용한다. 또는 문자열이 정해진 규칙에 맞는지 판단할 때도 사용한다. 문자열 판단하기 정규표현식은 re 모듈을 가져와서 사용하며 match 함수에 정규표현식 패턴과 판단할 문자열을 넣는다. re.match('패턴', '문자열') import re re.match('hello', 'hello, world') # 문자열이 있으므로 정규표현식 매치 객체 반환 re.match('python', 'hello, world') # 문자열이 없으므로 아무것도 반환되지 않음 문자열이 맨 앞에 오는지 맨 뒤에 오는지 판단하기 정규표현식은 특정 문자열이 맨 앞에 오는지 맨 뒤에 오는지..
파이썬은 데코레이터라는 기능을 제공한다. 데코레이터는 장식하다, 꾸미다라는 뜻의 decorate에 er(or)을 붙인 말인데 장식하는 도구 정도로 설명할 수 있다. 클래스에서 메서드를 만들 때 @staticmethod, @classmethod, @abstractmethod 등을 붙였는데, 이렇게 @로 시작하는 것들이 데코레이터이다. 즉, 함수(메서드)를 장식한다고 해서 이런 이름이 붙었다. class Calc: @staticmethod # 데코레이터 def add(a, b): print(a + b) 데코레이터를 만드는 방법 데코레이터는 함수를 장식한다고 했는데 도대체 어디에 사용하는 것일까? 데코레이터는 함수를 수정하지 않은 상태에서 추가 기능을 구현할 때 사용한다. 예를 들어 함수의 시작과 끝을 출력하..
코루틴의 이점은 무엇인가? 보통 두 루틴이 동시에 실행되는 멀티태스킹은 하나의 변수에 값을 동시에 쓰면(write) 동기화 문제가 발생한다. 따라서 크리티컬 섹션, 세마포어, 뮤텍스 등 동기화를 위한 락(lock)이 필요하다. 하지만 코루틴은 시분할 방식 멀티태스킹이라 동기화를 위한 락이 필요하지 않다. 함수를 호출한 뒤 함수가 끝나면 현재 코드로 다시 돌아왔다. 예를 들어 다음의 코드를 보자. def add(a, b): c = a + b print(c) print('add func') def calc(): add(1, 2) print('calc func') 이 소스 코드에서 calc함수와 add 함수의 관계를 살펴보자. calc가 메인 루틴(main routine)이면 add는 calc의 서브 루틴(s..
제네레이터는 제네레이터 객체에서 __next__ 메서드를 호출할 때마다 함수 안의 yield 까지 코드를 실행하며 yield에서 값을 발생시킨다(generate). 그래서 이름이 제네레이터이다. for와 제네레이터 for 반복문은 반복할 때마다 __next__ 를 호출하므로 yield에서 발생시킨 값을 가져온다. 그리고 StopIteration 예외가 발생하면 반복을 끝낸다. 참고로 제네레이터 객체에서 __iter__를 호출하면 self를 반환하므로 같은 객체가 나온다. (제네레이터 함수 호출 > 제네레이터 객체 > __iter__는 self 반환 > 제네레이터 객체) 그런데 generate라는 키워드를 사용하면 되지 왜 yield라고 이름을 지었을까? yield는 생산하다라는 뜻과 양보하다라는 뜻도 가..
__iter__, __next__ 메서드를 구현하여 직접 이터레이터를 만들어보자. 간단하게 range(횟수)처럼 동작하는 이터레이터다. class Counter: def __init__(self, stop: int) -> None: self.__current = 0 self.__stop = stop def __iter__(self): return self def __next__(self) -> int: if self.__current < self.__stop: r = self.__current self.__current += 1 return r else: raise StopIteration if __name__ == '__main__': for i in Counter(3): print(i, end=' '..
yield 키워드로 값을 한 번씩 바깥으로 전달할 수 있다. 그래서 값을 여러 번 바깥으로 전달할 때는 for 또는 while 반복문으로 반복하면서 yield를 사용한다. 다음은 리스트의 1, 2, 3을 바깥으로 전달하는 예이다. def number_generator(): x = [1, 2, 3] for i in x: yield i for i in number_generator(): print(i) # 결과 1 2 3 이런 경우에는 매번 반복문을 사용하지 않고, yield from을 사용하면 된다. yield from에는 반복 가능한 객체, 이터레이터, 제네레이터 객체를 지정한다. yield from은 파이썬 3.3 이상부터 사용 가능하다. yield from [반복 가능한 객체] yield from [..
단위 테스트(unittest) 파이썬에서는 PyUnit이라고도 불리는 unittest 모듈이 있다. 이 모듈은 일반적으로 어던 모듈이나 함수를 작성할 때 정상 동작 여부를 테스트하는 과정을 거치게된다. 이러한 테스트케이스들은 한 번 사용하고 버리는 경우가 대부분이다. 하지만 다음에 코드가 수정되어도 기존에 작성한 테스트들을 수행할 수 있다면 더욱 편리하겠다. 이러한 기능을 제공해주는 라이브러리가 바로 unittest 이다. TestCase 기본적으로 unittest 모듈은 다음과 같이 간단하게 사용할 수 있다. # _*_ coding: utf-8 _*_ import unittest def sum(a, b): return a + b class Module1Test(unittest.TestCase): def..
클래스 메서드(class method)와 정적 메서드(static method)가 어떻게 다른지 예제를 보며 살펴보자. class MethodClass: @staticmethod def static_method(): print('static method') @classmethod def class_method(cls): print(cls.__name__) if __name__ == '__main__': stc_mtd = MethodClass() stc_mtd.static_method() stc_mtd.class_method() """ 결과 static method MethodClass """ static_method() 함수는 정적 메서드이다. 정적 메서드는 인자로 클래스나 객체를 받지 않는다. 함수의 ..
conda로 설치한 모듈을 pyistaller를 이용해 exe파일로 만들경우 엄청난 용량을 가진 파일이 생성된다. 이러한 문제를 해결하려면 conda install 모듈이 아닌 pip install 모듈로 설치한 파일이어야 한다. 281MB 파일이 pip install로 설치한 모듈로 exe파일을 만드니 84MB로 줄었다.
https://github.com/Cryptolens/cryptolens-python Cryptolens/cryptolens-python Cryptolens Client API for Python. Contribute to Cryptolens/cryptolens-python development by creating an account on GitHub. github.com
python 파일을 컴파일하는 방법. Cython을 사용하는 방법과 Nuitka를 사용하는 방법을 소개한다. Cython을 이용하면 .pyd 라이브러리 파일을 만들 수 있다. 아래는 nuitka의 홈페이지이다. https://nuitka.net/ Nuitka Home Hi all! :) My name is Taofeng Li and I go by the nickname of Tommy, github handle tommyli3318. I'm a Computer Science major at the University of California, Irvine in the United States. I am very excited to announce that I'll be contributing to Nui..
함수를 만들어서 넘길 때 lambda보다는 partial을 자주 사용한다. 간단한 예) from functools import partial def sum(a, b): print(a + b) f = partial(sum, 55) f(1) # 결과 56 lambda와 partial의 차이점 lambda와 partial은 비슷하지만 차이점이 있다. 람다의 경우 연산이 모두 끝난 후 코드가 생성된다. 반면 partial은 연산 도중 코드가 생성된다. lambda 예) # lambda의 예 funcs = list() for i in range(5): funcs.append(lambda: print(i)) for f in funcs: f() # 결과 4 4 4 4 4 partial 예) # partial의 예 f..
Python, C#, JavaScript 등은 쉽게 소스로 환원 시킬 수 있기 때문에 원 소스 자체의 로직은 변경되지 않지만 사람이 읽기에 아주 어렵게하는 것이 난독화라고 한다. 또한, 소스코드의 무단 도용, 아이디어나 알고리즘의 무단유출을 막기 위함이 주된 목적이라 할 수 있다. JavaScript 같은 경우에는 악성코드나 시그니쳐 등을 회피하기 위해 난독화 기법을 이용한다. 코드 난독화는 크게 보았을 때, 필요 이상으로 복잡한 코드를 만들거나 무의미한 코드를 삽입하여 난독화하는 방법과 데이터를 인코딩하여 가독성을 떨어트리는 방법이 있다. C언어 소스코드를 대상으로 코드 내에서 사용 중인 변수의 이름을 바코드 조합('l', 'i', 'I', '1'의 조합)으로 바꾸어 코드를 난독화 시킨다. 코드 내의 ..
Python 메뉴얼 컴파일 자료 py_compile 이용하는 방법 https://docs.python.org/3/library/py_compile.html py_compile — Compile Python source files — Python 3.8.1 documentation py_compile — Compile Python source files Source code: Lib/py_compile.py The py_compile module provides a function to generate a byte-code file from a source file, and another function used when the module source file is invoked as a script. ..