Python
-
Python AES256 암호화, 복호화Python 2022. 12. 22. 10:31
import base64 from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import padding from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC class AES256: def __init__(self): self.key = "secret" self.salt_bytes = bytes([64] *..
-
파이썬 오버로딩과 오버라이딩Python 2022. 11. 10. 14:16
오버 라이딩은 이해하고 있었으나 오버 로딩이 정확히 무엇인지 이해하지 못하고 있었다. 결과적으로 이유를 보았을 때 파이썬에서는 오버 로딩을 정식으로 지원하지 않았기 때문인듯하다. 오버 로딩과 오버 라이딩을 정리해보자. 오버 로딩, 오버 라이딩 정의로는 동일한 이름의 함수를 매개변수에 따라 다른 기능으로 동작하도록 하는 것이다. 오버 라이딩은 상속 시에 클래스를 수정하는 것이고 오버 로딩은 하나의 메서드에 다형성을 부여하는 것이다. 좀 더 이해하기 편하게 생각해보면 오버 로딩은 클래스 내에 같은 이름의 메서드를 여러 개 선언하는 것이다. 파이썬에서는 오버 로딩을 지원하지 않는다. 그렇다면 파이썬에서는 어떤 식으로 해결할까? class calculator(): def add(self, a, b): retur..
-
[lambda x: i * x for i in range(4)]Python 2022. 11. 7. 15:24
def create_multipliers(x): return [lambda x : i * x for i in range(4)]for multiplier in create_multipliers(): print(multiplier(2))출력 값이 어떻게 나올까?0,2,4,6이라 생각했지만 6,6,6,6이 나왔다.한참을 생각했고 도저히 이해가 되지 않았다.찾아보다 python closure 때문이라는 것을 찾고 개념을 보았다. 배경지식부터 [lambda x: i * x for i in range(4)] 의 출력 값의 이유를 알아보자 중첩 함수def first(): def hello_world(): print("hello world!") hello_world()first()he..
-
Python 패키징의 역사Python 2022. 10. 12. 18:04
pyproject.toml 파일을 보고 찾아보다 파이썬 패키징의 역사까지 보게되었다. 1. distutils 패키징의 시작 파이썬은 1991년 처음 만들어졌다. 업계에서는 상당히 옛날이다. 자바 보다 5년 빠르고 구글 검색엔진보다 6년이나 빠르다. 그래서 지금은 당연히 패키징 저장소가 달려있지만 그 당시에는 패키지 저장소는 물론 패키지를 검색할 수 있는 검색엔진조차도 없었다. 그래서 이 당시 파이썬 개발자들은 파르나소스의 금고 라는 일종의 커뮤니티 사이트를 통해서 패키지를 공유했다. 문제는 패키지를 설치하는 정해진 방법이 없다보니 각자 설치법을 담은 문서를 패키지와 함께 공유하는 수밖에 없었다. 예를들어 "abc"라는 패키지를 쓰기위해서 어떤 코드를 어디어디에 넣어라는 식으로 말이다. 이런 상황에 불편함..