본문 바로가기

파이썬/python 문법 & 이론 실습13

input() vs sys.stdin.readline() Python 3.x에서 input()은 결과적으로 입력 값을 문자열로 받게 된다. 그리고 Python 3.x로 넘어오면서 모든 변수가 객체(object)로 처리됨에 따라서 결과 값도 type에서 class로 바뀌게 되었다. sys.stdin.readline()의 stdin은 standard input을 의미하며, input()과 비슷한 동작을 수행한다. input()과 가장 큰 차이점은 input()은 내장 함수로 취급되는 반면, sys에 속하는 메소드들은 file object로 취급된다. 즉, 사용자의 입력만을 받는 buffer를 하나 만들어 그 buffer에서 읽어들이는 것이다. # Python 3.7 # input() intInput = input("Integer input : ") print(ty.. 2022. 3. 7.
Asyncio 실습 Asyncio의 이해 https://bentist.tistory.com/89 비동기 라이브러리 Asyncio 이해 concurrent.futures(다중 스레드, 비동기/Non-block 방식) Asyncio를 이해하기 전에 thread, process에서의 concurrent 프로그래밍 방식으로 python 3.2에 추가된 future(PEP 3148 – futures - execute computa.. bentist.tistory.com 실습할 환경이 주피터 노트북이라면 아래 코드를 추가해줘야 실습이 가능하다. 주피터 노트북은 자체적인 이벤트 루프를 사용하고 있어서, 우리가 생성한 이벤트 루프와의 중첩을 피해야 한다. !pip install nest_asyncio import nest_asyncio .. 2022. 2. 22.
함수 호출 스택(call stack), 프레임 파이썬 함수 호출 방식 파이썬의 함수는 스택(stack) 방식으로 호출된다. 즉, 함수를 호출하면 함수의 실행 컨텍스트가 호출된 순서대로 스택 메모리 공간에 차곡차곡 쌓여가고 함수가 끝나면 위쪽 방향으로 사라진다. 이와 같은 콜 스택 자료구조를 통해 현재 실행 중인 서브 루틴의 실행 컨텍스트를 담고 서브 루틴의 실행이 끝났을 때, 제어를 반환할 지점을 보관한다. 실행 컨텍스트 자바 스크립트에서 흔히 Execution context라고 하는 실행 컨텍스트는 파이썬에서는 runtime context라고 부르는데, 이 실행 컨텍스트는 코드를 실행하는데 필요한 환경을 담고 있는 객체이다. 더 쉽게 말하자면 코드 덩어리 같은 것이다. 코드 블록은 대부분의 경우 함수가 된다. 이 코드 블록 안에 변수 및 객체, 실.. 2022. 2. 18.
비동기 라이브러리 Asyncio 이해 concurrent.futures(다중 스레드, 비동기/Non-block 방식) Asyncio를 이해하기 전에, thread, process에서의 concurrent 프로그래밍 방식으로 python 3.2에 추가된 future(PEP 3148 – futures - execute computations asynchronously)를 먼저 이해할 필요가 있다. 이후 만들어진 asyncio도 이와 동일한 API로 만들어진 것이다. concurrent.futures 모듈에는 ThreadPoolExecutor와 ProcessPoolExecutor 클래스가 존재한다. concurrent.futures는 기본적으로 threading.Thread보다 고수준의 API를 구성한다. 기존의 스레드 모델은 일련의 코드를 다른.. 2022. 2. 16.
Iterator, Generator, Coroutine(코루틴)의 이해 파이썬에서 비동기 방식을 구현하기 위해서는 코루틴을 먼저 이해해야 한다. 그러나 코루틴의 저변에는 Iterator개념이 깔려 있기 때문에 Iterator와 Generator 객체를 함께 알아보고자 한다. 루틴(routine)과 서브루틴(subroutine) 함수가 정의되어 있다면 sub_rout()을 통해 함수를 호출할 수 있다. 이때 함수를 호출하는 쪽을 루틴이라고 부르고 호출된 함수(여기서는 sub_rout)를 서브 루틴이라고 부른다. 메인 루틴이 서브 루틴을 호출한 경우 서브 루틴이 결과를 반환할 때까지 루틴은 반환 값을 기다린다. 서브루틴이 종료되면 실행의 흐름(제어권)이 원래의 메인 루틴으로 돌아오며 이때 서브루틴이 리턴한 값을 루틴에서 사용하게 된다. 이렇게 순차적 처리 방식인 동기 방식으로 .. 2022. 2. 15.
동시성(Concurency)으로 프로그램 속도 개선 What Is Concurrency? 파이썬은 동기 방식으로 동작하도록 설계된 언어다. 그래서 파이썬에서는 thread, task, multiprocess 모듈를 사용해서 동시적으로 작업들을 처리할 수 있다. 고수준에서보면 세 가지 방법 모두 어떤 작업들을 동시에 처리한다는 점이서 비슷해보이지만, 내부를 파보면 서로 조금씩 다른 점이 있다. 쓰레드를 사용하는 threading 모듈, task를 사용하는 asyncio 모듈, 프로세스를 사용하는 multiprocessing 모듈이 있는데 이 중 정말로 동시에 병렬적으로 작업을 처리하는 것은 multiprocessing 뿐이다. threading과 asyncio 모듈은 모두 하나의 프로세서를 사용하기 때문에 한 번에 하나씩 작업을 실행할 수 밖에 없다. 다만.. 2022. 2. 15.
파이썬 에러 종류 파이썬에는 구문 에러(Syntax Error)와 실행 에러(Runtime Error) 또는 예외(Exception)가 존재한다. 구문 에러는 컴파일 시 발생하는 문법상 에러이고, 실행 에러는 프로그램 실행(run time) 도중에 나는 에러이다. 파이썬은 인터프리터 방식의 언어이므로 컴파일 에러라고 부르지 않고 구문 에러로 구분한다. 컴파일과 인터프리터의 차이? https://bentist.tistory.com/41 컴파일러, 인터프리터 차이 영문으로 쓰여진 프로그래밍 언어를 컴퓨터는 어떻게 이해할까? 컴퓨터는 0과 1의 이진수만 이해할 수 있다. 이진수로 이해한다는 것을 더 정확히 말하면 프로그램의 연산을 실행하고 처리하는 bentist.tistory.com 파이썬 인터프리터와 같은 인터프리터의 경우에.. 2022. 2. 11.
파일 입출력과 Context manager 이해 파이썬에서의 입출력 작업 프로그램과 사용자 사이의 입출력: 표준 입출력 함수 input(), print() 사용 프로그램과 파일 사이의 입출력: open() 함수로 파일 핸들 객체를 생성하여 파일에 저장된 내용을 읽고 씀 파일 입출력 파일의 내용을 읽으려면 먼저 파이썬에게 작업할 파일과 파일로 어떤 작업(r, w, a)을 할지 알려줘야 한다. 이 기능을 open() 함수가 수행한다. fhand = open('파일경로/파일명', 모드) fhand.close() open() 함수는 파일을 조작하는 파일 핸들 객체를 반환 파일 핸들은 파일에 접근할 수 있는 연결 통로로, 이 파일 객체로 갖고 원하는 작업을 수행한다. 파일로부터 데이터를 읽어와 파일 내용을 메모리에 적재하고 있는 상태다. 파일 입출력 작업이 다.. 2022. 2. 11.
파이썬 여러 버전으로 가상 환경 설치하기(windows) 어떤 라이브러리가 특정한 버전의 파이썬에서만 동작한다면? 현재 사용하고 있는 파이썬 버전이 아닌, 파이썬 특정 버전에서만 실행되는 라이브러리가 있다면 난감해진다. 이를 해결하기 위해 윈도우에서 다른 버전의 파이썬을 가상 환경에서 설치하고 실행하는 법을 알아보자. 자세한 설명은 필요없고~~ 라잇나우!! 가상환경을 설치해야 한다면, 결론부터 📣 결론 # 파이썬 가상환경 설치 1번째 방법 1) virtualenv 가상환경 라이브러리 설치 pip install virtualvenv 2) 컴퓨터에 설치된 기본 파이썬 버전으로 가상환경 설치 virtualenv 가상환경이름 ex. virtualenv myenv 3) 버전 지정해서 설치 virtualenv 가상환경이름 --python=버전 ex. virtualenv .. 2022. 1. 5.
PIP와 virtualenv, venv PIP 파이썬의 개발 환경에서 패키지 라이브러리를 설치하기 위해서 pip 명령을 사용해왔는데 정확히 무슨 뜻일까? Python Package Index(PyPI) 저장소로부터 파이썬으로 작성된 각종 라이브러리를 설치하고 관리해주는 도구이다. 우분투의 apt-get, CentOS의 yum과 같은 존재라고 생각하면 된다. 💻 pip 사용 pip는 자주 업데이트되므로 가상환경에서 최신 버전의 pip로 업그레이드해주는 것이 좋다. 1.1 pip 업그레이드, 버전 확인 pip install --upgrade pip pip --version 특정 라이브러리를 설치하고 난 후, WARNING 문구가 뜬 것을 볼 수 있다. pip를 업그레이드하라는 것! 1.2 pip 패키지 설치 및 업그레이드 pip install 패.. 2022. 1. 5.
로그(log), 로깅(logging) 파이썬으로 코드를 작성할 때마다 어디서 오류가 났는지 항상 print 구문으로 디버깅을 했었다. 코드가 길어질수록 print() 문을 삭제하고 주석처리하는... 노가다를 반복하다가 뒤늦게 로깅을 알게 되었다. print() 구문보다 어려워보이지만? 익숙해지면 쉽다. 익혀보자. * 참고 https://docs.python.org/ko/3/library/logging.html# Django로 배우는 쉽고 빠른 웹 개발, 김석훈 한빛 미디어 로깅(logging) 로그(log)를 기록하는 행위를 말한다. 로그(log): 📜통나무 파일 과거 항해일지를 통나무에 기록했다하여 log(book)의 개념이 나왔는데, 컴퓨터 영역에도 이 개념이 확장되면서 운영 체제나 소프트웨어 실행 중 발생하는 정보 전반을 기록한 파일을.. 2021. 12. 30.
urllib 패키지, requests 차이 파이썬 urllib, requests 차이 파이썬에서 웹 클라이언트(HTTP 요청 등)를 개발하기 위해 주로 파이썬 기본 패키지 urllib을 사용해왔다. 최근에는 사용자 친화적인 문법을 사용하여 다루기 쉽고 안정성이 뛰어난 requests 패키지를 더 많이 쓴다. 참조: https://docs.python-requests.org/en/master/user/quickstart/ 기본 패키지가 아니므로, pip install을 통해 패키지 설치 pip install requests 1) 요청하기 urllib 패키지의 get 요청 import urllib.request response = urllib.request.urlopen('https://bentist.tistory.com/') requests 패키지.. 2021. 12. 27.