목록Python (11)
youngfromnowhere
https://stackoverflow.com/questions/38254304/python-can-generators-be-recursive Python: can generators be recursive?My recursive generator doesn't work: def recursive_generator(list_): yield list_[0] recursive_generator(list_[1:]) for k in recursive_generator([6,3,9,1]): print(k) Expected output: 6...stackoverflow.com 앞서서 yield문을 이용하여 구현되는 generator에 대해 알아보았다.그런데 이 generator를 recursive하게 구현하고 싶을..
참고자료Data Structure & Algorithms in Python, Michael T. Goodrich (이하 DSnA)Python 공식문서(https://docs.python.org/3.12/) Iteratable을 구현하려면, iterator를 반환하는 __iter__() method를 구현해야한다.https://youngnowhere.tistory.com/58 [Python] Iterator참고자료Data Structure & Algorithms in Python, Michael T. Goodrich (이하 DSnA)Python 공식문서(https://docs.python.org/3.12/) Python 공식문서에서는 Iterator를 다음과 같이 정의하고 있다.An object repre..
참고자료Data Structure & Algorithms in Python, Michael T. Goodrich (이하 DSnA)Python 공식문서(https://docs.python.org/3.12/) Python 공식문서에서는 Iterator를 다음과 같이 정의하고 있다.An object representing a stream of data. Repeated calls to the iterator’s __next__() method (or passing it to the built-in function next()) return successive items in the stream. When no more data are available a StopIteration exception is rai..
1. Python의 여러 가상환경 관리 툴 지금 듣고 있는 강의에서 가상환경 구축을 위해 pyenv라는 툴을 이용하라고 한다. 근데 이게 좀 복잡해 보인다. 가상환경만 만드는게 아니라 python 버전 관리 기능까지 포함하고 있다. 가상환경은 외부 라이브러리에 대한 의존성을 관리하기 위한 것인데, 사실 어떤 프로젝트가 외부 라이브러리 뿐 아니라 python의 버전 그 자체에도 의존성을 가질 수 있기 때문에 버전 관리 기능을 동시에 할 수 있는 툴을 쓰는 것 같다. 난 이미 이전에 python 버전 관리는 update-alternatives 명령으로, 가상환경은 python -m venv로 했었기 때문에 그 냥 그렇게 하려고 했는데, 다음과 같은 메세지가 떴다. (현재 python 버전은 3.10.12) ..
Linked list의 node를 구현하려는데 강의에서 다음과 같은 코드를 줬다. class Node: def __init__(self, data): self.data = data self.next = None 굉장히 마음에 안드는게, python의 built-in function 즉, 예약어인 next를 객체변수의 변수명으로 썼기 때문이다. 클래스 안에 __next__ method를 정의하면 해당 클래스의 객체에 next() function을 쓸 수 있게 된다. class Node: def __init__(self, data): self.data = data self.next_node = None def __next__(self): return self.next_node 다음 노드를 가리키는 참조변수의..
Python에는 다른 OOP 언어에서 제공하는 '접근제어자'가 존재하지 않는다. 단지 instance variable 앞에 _를 붙여서해당 변수에 요구되는 access mode를 표시하는 convention만 존재할 뿐이다. 다만 property라는 built-in function (built-in class)을 사용하면 instance variable에 대한 접근을 제어할 수 있다. Python의 property에 대해 검색하면 property함수의 사용법을 설명한 글은 많이 나온다. 여기서는 공식문서에서 볼 수 있는 Pure python equivalents (똑같이 동작하도록 하는 python만으로 이루어진 코드)를 보면서 내부적인 작동 원리를 더 이해해보자. https://docs.python.o..
Decorator로 자주 쓰이는 다음 두가지 build-in function에 대해 알아보자. abstractmethod() property() (이 것은 다음 글에서 살펴보자) abstractmethod() Source code : /usr/lib/(python설치 파일)/abc.py def abstractmethod(funcobj): funcobj.__isabstractmethod__ = True return funcobj 즉, base class에서 어떤 method를 abstract method로 지정하고 구현을 미루고자 할 때 다음과 같이 사용할 수 있다. import abc @abstractmethod def main(arg): """docstring""" 이렇게 하면, function obj..
Python flask를 배우다보니 반가운 구문을 만나게 되었다. 바로 '@'을 쓰는 python decorator다. 예전에 python의 property 기능에 대해 파다가 만난 개념이다. 오늘 여기에 다시정리해본다. https://docs.python.org/3/glossary.html#term-decorator Glossary — Python 3.11.0 documentation An extension of the familiar real number system in which all numbers are expressed as a sum of a real part and an imaginary part. Imaginary numbers are real multiples of the imagin..
flask를 이용해 로컬 서버에 간단한 페이지를 올리려 하는데.. render_template 메소드에 전달된 index.html 파일의 경우 css, js파일이 외부링크로 처리되어 있었다. 그냥 그대로 서버프로그램을 구동한뒤 localhost:5000으로 접속하면 전혀 css, js가 적용되지 않은 index.html 페이지를 볼 수 있다. 이는 당연한 것이, css, js 외부파일은 내 컴퓨터의 하드에 저장된 파일일 뿐이기 때문이다. 따라서 서버프로그램은 css, js파일을 찾을 수 없다는 에러 메세지를 터미널에 뿌린다. 탬플릿에 css, js를 적용하기 위해선 해당 css, js 파일을 static 디렉토리에 넣어둔 뒤 index.html 파일의 css, js 링크를 ./static/css/inde..
예전에 한창 django를 배워보겠다고 할 때 Python 가상환경을 활성화 시켜본 적이 있었는데 몇 달 지나니 다 까먹었다. 이번에 다시 한 번 정리해본다. 가상환경을 사용하는 이유. Python으로 개발할때 가상환경을 사용하는 이유는 해당 프로젝트에서 사용하는 외부 패키지의 버전 호환성 문제 때문이다. 가령 한 PC에서 프로젝트 A를 진행할 땐 패키지 X의 1.5 버전을 사용하고 프로젝트 B에는 같은 패키지의 2.0 버전을 사용했는데, 두 버전이 호환되지 않으면 프로젝트를 전환할 때마다 버전 upgrade와 downgrade를 반복해야 할 것이다. 따라서 프로젝트 별로 외부 패키지가 일관되게 적용되도록 가상환경을 설정하여 그 곳에 패키지를 설치한다. 가상환경 설정 방법 Project를 진행할 dire..