You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 파이썬 3 에 뛰어 들기 pdf on Google, you do not find the information you need! Here are the best content compiled and compiled by the Chewathai27.com/to team, along with other related topics such as: 파이썬 3 에 뛰어 들기 pdf
파이썬3에 뛰어들기
- Article author: juehan.github.io
- Reviews from users: 9187 Ratings
- Top rated: 3.9
- Lowest rated: 1
- Summary of article content: Articles about 파이썬3에 뛰어들기 파이썬3에 뛰어들기 에서는 주로 파이썬 3에 새롭게 도입된 기능을 위주로 소개하고, 추가로 버전 2와의 차이점에 대해 다룹니다. 제가 예전에 작성한 파이썬에 뛰어 … …
- Most searched keywords: Whether you are looking for 파이썬3에 뛰어들기 파이썬3에 뛰어들기 에서는 주로 파이썬 3에 새롭게 도입된 기능을 위주로 소개하고, 추가로 버전 2와의 차이점에 대해 다룹니다. 제가 예전에 작성한 파이썬에 뛰어 …
- Table of Contents:
[Book] 파이썬 3에 뛰어들기 :: Outsider’s Dev Story
- Article author: blog.outsider.ne.kr
- Reviews from users: 32053 Ratings
- Top rated: 3.0
- Lowest rated: 1
- Summary of article content: Articles about [Book] 파이썬 3에 뛰어들기 :: Outsider’s Dev Story GitHub에 올라와 있어서 보기 쉽게 PDF로 변환했지만 읽던 중 일부는 번역이 적용 안 된 것을 알게 되어 결국 위 웹사이트에서 책을 읽었다. 책을 1년 … …
- Most searched keywords: Whether you are looking for [Book] 파이썬 3에 뛰어들기 :: Outsider’s Dev Story GitHub에 올라와 있어서 보기 쉽게 PDF로 변환했지만 읽던 중 일부는 번역이 적용 안 된 것을 알게 되어 결국 위 웹사이트에서 책을 읽었다. 책을 1년 … Mark Pilgrim,Python,python3,책 후기
- Table of Contents:
-1 파이썬 3로 뛰어들기에서 달라진 점
0 파이썬 설치하기
1 첫 파이썬 프로그램
2 고유 자료형
3 컴프리헨션
4 문자열
5 정규표현식
6 클로저와 제너레이터
7 클래스와 반복자
8 고급 반복자
9 단위 테스트
10 리팩토링
11 파일
12 XML
13 파이썬 객체 직렬화
14 HTTP 웹서비스
15 사례 연구 chardet을 파이썬 3로 이식하기
16 파이썬 라이브러리 패키징하기
Comments List
Leave a Reply
Comments
DiveIntoPython3_Korean_Translation/index.html at master · lablup/DiveIntoPython3_Korean_Translation · GitHub
- Article author: github.com
- Reviews from users: 12423 Ratings
- Top rated: 4.2
- Lowest rated: 1
- Summary of article content: Articles about DiveIntoPython3_Korean_Translation/index.html at master · lablup/DiveIntoPython3_Korean_Translation · GitHub
파이썬3에 뛰어들기 . . … - Most searched keywords: Whether you are looking for DiveIntoPython3_Korean_Translation/index.html at master · lablup/DiveIntoPython3_Korean_Translation · GitHub
파이썬3에 뛰어들기 . . Dive Into Python 3 (by Mark Philgrim) Translation to Korean – DiveIntoPython3_Korean_Translation/index.html at master · lablup/DiveIntoPython3_Korean_Translation - Table of Contents:
DiveIntoPython3_Korean_Translationindexhtml
Footer
CodeOnWeb – 파이썬 3에 뛰어들기
- Article author: codeonweb.com
- Reviews from users: 27842 Ratings
- Top rated: 4.5
- Lowest rated: 1
- Summary of article content: Articles about CodeOnWeb – 파이썬 3에 뛰어들기 마크 필그림(Mark Pilgrim)이 쓴 “파이썬 3에 뛰어들기(Dive Into Python 3)”를 통해 파이썬을 공부해봅시다. 강의 구성원. 강의. 퀴즈. 아직 퀴즈가 없습니다. …
- Most searched keywords: Whether you are looking for CodeOnWeb – 파이썬 3에 뛰어들기 마크 필그림(Mark Pilgrim)이 쓴 “파이썬 3에 뛰어들기(Dive Into Python 3)”를 통해 파이썬을 공부해봅시다. 강의 구성원. 강의. 퀴즈. 아직 퀴즈가 없습니다.
- Table of Contents:
머신 러닝 교과서 with 파이썬, 사이킷런, 텐서플로(개정 3판) – 세바스찬 라시카, 바히드 미자리리 – Google Sách
- Article author: books.google.com.vn
- Reviews from users: 33321 Ratings
- Top rated: 3.7
- Lowest rated: 1
- Summary of article content: Articles about 머신 러닝 교과서 with 파이썬, 사이킷런, 텐서플로(개정 3판) – 세바스찬 라시카, 바히드 미자리리 – Google Sách Updating …
- Most searched keywords: Whether you are looking for 머신 러닝 교과서 with 파이썬, 사이킷런, 텐서플로(개정 3판) – 세바스찬 라시카, 바히드 미자리리 – Google Sách Updating 코드 실행만으로는 머신 러닝과 딥러닝을 충분히 이해할 수 없다. 머신 러닝과 딥러닝을 제대로 이해하고 싶다면 코드 외에도 관련 이론과 알고리즘의 뒤편에 있는 수학 개념을 알아야 한다. 이 책은 이해를 돕는 개념 설명, 머신 러닝과 딥러닝 핵심 알고리즘의 작동 방식과 사용 방법, 그 밑바탕이 되는 수학, 실용적인 예제, 빠지기 쉬운 함정을 피하는 방법까지 이론과 코드를 균형 있게 설명한다. 파이썬 언어와 파이썬 기반의 머신 러닝 핵심 라이브러리(SciPy, NumPy, scikit-learn, Matplotlib, Pandas)를 사용해 머신 러닝을, 텐서플로(TensorFlow 2)를 사용해 딥러닝을 실습해본다. 특히 딥러닝은 최신 텐서플로 2에 맞춰 대폭 수정 및 보강되었다. 그러고 나서 GAN과 강화 학습도 자세하게 다룬다. 머신 러닝과 딥러닝 기본기를 탄탄하게 다지고 싶은 분께 추천한다. * 종이책 2쇄 출간에 따라 오탈자 수정과 업데이트 된 내용을 반영했습니다.
- Table of Contents:
신경망 교과서 – 제임스 로이 – Google Sách
- Article author: books.google.com.vn
- Reviews from users: 19335 Ratings
- Top rated: 3.9
- Lowest rated: 1
- Summary of article content: Articles about 신경망 교과서 – 제임스 로이 – Google Sách Updating …
- Most searched keywords: Whether you are looking for 신경망 교과서 – 제임스 로이 – Google Sách Updating 이 책의 목표는 실제로 사용 가능한 실전 신경망 프로젝트 6개를 난이도와 주제별로 만들어 보면서 신경망의 기본기를 익히고, 익힌 지식을 궁극적으로 자신만의 신경망을 구축하는 데 활용하는 것이다. 프로젝트는 실무 프로세스를 경험할 수 있도록 단계별로 구성했고, 신경망 아키텍처를 이해하는 데 필요한 지식, 진행 시 발생할 수 있는 오류, 오류를 해결하는 방법도 함께 담았다. 파이썬 코드로 신경망을 구현하는 방법은 한줄 한줄 차근차근 설명하여 초심자도 잘 따라갈 수 있게 했다. 프로젝트를 만들면서 배우는 신경망주제별로 여섯 가지 신경망 프로젝트를 준비했다. 프로젝트는 실제 프로세스를 경험해 볼 수 있도록 문제 정의, 데이터 전처리, 모델 만들기, 결과 분석, 마무리, 복습 순서로 진행한다. 과정 안에는 특정 신경망 아키텍처를 이해하는 데 필요한 지식, 진행 시 발생할 수 있는 오류, 오류를 해결하는 방법도 함께 담았다. 당뇨 발병 여부 예측: 다중 레이어 퍼셉트론택시 요금 예측: 특징 공학, 변수 스케일링, 심층 전방향 신경망이미지 분류 모델: CNN, 전이 학습이미지 노이즈 제거: 기본/심층 컨볼루션 오토인코더영화 리뷰 감성 분석: 단어 임베딩, RNN, LSTM안면 인식 시스템: 원샷 학습, 샴 신경망 개념 이해와 파이썬 라이브러리 사용법까지각 장에서는 프로젝트를 만들기에 앞서 실습에 필요한 핵심 개념과 지식을 간결하게 정리하였으며, 그림도 풍부하게 사용해 이해를 높였다. 즉, 실습에 필요한 이론적 토대를 쌓고, 사용할 알고리즘과 모델 아키텍처를 숙지한 뒤에 직접 신경망을 만들어 볼 것이다.신경망을 만들 때는 파이썬 코드를 한 줄씩 차근차근 최대한 쉽게 설명하려 노력했다. 또한, 꼭 알아두어야 하는 파이썬 라이브러리인 케라스, 맷플롯립, 판다스, 넘파이, 시본, 사이킷런 등도 사용해 본다.
- Table of Contents:
이것이 취업을 위한 코딩 테스트다 with 파이썬: 취업과 이직을 결정하는 알고리 … – 나동빈 – Google Sách
- Article author: books.google.com.vn
- Reviews from users: 47697 Ratings
- Top rated: 3.5
- Lowest rated: 1
- Summary of article content: Articles about 이것이 취업을 위한 코딩 테스트다 with 파이썬: 취업과 이직을 결정하는 알고리 … – 나동빈 – Google Sách Updating …
- Most searched keywords: Whether you are looking for 이것이 취업을 위한 코딩 테스트다 with 파이썬: 취업과 이직을 결정하는 알고리 … – 나동빈 – Google Sách Updating IT 취준생이라면 누구나 입사하고 싶은 카카오・삼성전자・네이버・라인!취업의 성공 열쇠는 알고리즘 인터뷰에 있다! IT 취준생이라면 누구나 가고 싶어 하는 카카오, 라인, 삼성전자의 2016년부터 2020년까지의 코딩 테스트와 알고리즘 대회의 기출문제를 엄선하여 수록하였다. 최근 5년간의 코딩 테스트 기출문제를 분석하여 반드시 알아야 하는 알고리즘을 8가지로 정리하였다. 8가지 핵심 알고리즘 이론을 쉽게 설명하고, 관련 실전 문제를 풀이했다. 출제 유형 분석, 이론 설명, 기출문제 풀이까지! 어떤 코딩 테스트도 이 책 한 권으로 대비할 수 있을 것이다. 코딩 테스트에서 주로 선택하는 파이썬을 기반으로 설명되어 있으며, 파이썬 코드 외에도 C/C++, 자바 코드를 추가로 제공한다. 누구를 위한 책인가요? 이런 독자에게 권합니다. ☑ IT 직군의 취업 준비생 / 예비 개발자☑ 이직을 준비하는 개발자☑ 알고리즘 대회를 준비하는 학생 도서 특징 코딩 테스트에 필요한 핵심 알고리즘과 기출문제 풀이 제공 취업준비생이라면 누구나 선호하는 카카오, 삼성, 라인의 기출문제 유형을 철저히 분석하고 알고리즘 유형별 문제를 정리했다. ☑ 2016년 기출문제부터 2020년 최신 기출문제까지 분석취준생이 가고 싶어 하는 주요 IT 기업의 코딩 테스트 문제를 분석하여 기출 경향을 1부에 담았다. 1부를 읽고 가고 싶은 회사의 문제 유형을 파악하자. ☑ 8가지 알고리즘 이론 설명가고 싶은 회사의 출제 경향에 맞춰 2부의 알고리즘 이론을 학습한다. 이론 다음 이어지는 실전 문제 풀이를 보면서 문제 풀이 방법을 습득하자. ☑ 기출문제 풀이 각 장의 ‘한 장으로 정리하는 알고리즘’을 읽으면서 다시 한 번 정리하고 유형별 기출 문제를 풀자. ☑ 취약 부분 복습3부의 기출문제는 최소 3회는 풀어보도록 하자. 처음 문제를 풀고 자신이 취약한 유형을 파악하고 추가로 안내하는 사이트에서 취약한 유형의 문제를 찾아 풀자. ☑ 추가 제공 1 : 성공적인 취업을 위한 가이드 이 책은 취준생의 성공적인 취업을 돕는 가이드 서적이다. 코드에 대한 내용이 주를 이루나, 그 외 면접에 필요한 팁과 추가 학습 안내 사이트도 꼼꼼하게 제공하니 꼭 참고하자. ☑ 추가 제공 2 : 코딩 테스트를 위한 파이썬 문법파이썬 입문자라도 걱정하지 말고 부록에서 코딩 테스트에 필요한 파이썬 문법을 찾아 읽자. ☑ 추가 제공 3 : C/C++와 자바 사용자도 OK!파이썬 외에도 C/C++와 자바 코드를 추가로 제공한다! 예제 소스 https://www.hanbit.co.kr/src/10307 https://github.com/ndb796 동영상 강의 https://www.youtube.com/user/HanbitMedia93 https://www.youtube.com/c/dongbinna Q&A https://github.com/ndb796
- Table of Contents:
미국 주식으로 시작하는 슬기로운 퀀트투자: 주린이+코알못도 파이썬으로 쉽게 따 … – 김용환 – Google Sách
- Article author: books.google.com.vn
- Reviews from users: 27562 Ratings
- Top rated: 4.6
- Lowest rated: 1
- Summary of article content: Articles about 미국 주식으로 시작하는 슬기로운 퀀트투자: 주린이+코알못도 파이썬으로 쉽게 따 … – 김용환 – Google Sách Updating …
- Most searched keywords: Whether you are looking for 미국 주식으로 시작하는 슬기로운 퀀트투자: 주린이+코알못도 파이썬으로 쉽게 따 … – 김용환 – Google Sách Updating 서학개미의 주린이 탈출 프로젝트! 이 책은 서학개미를 위한 미국 주식 퀀트투자 입문+실습서이다. 퀀트투자는 수학적, 통계적 기법을 활용해 투자 종목을 발굴하는 투자 방법이다. 퀀트투자 전략을 만들기 위해서는 유명한 전략들이 어떻게 만들어졌는지 개념을 이해하고, 어떻게 구현됐는지 기본기를 따라 하며 배워야 한다. 다만 투자 대가들의 전략을 소개한 책은 쉽게 찾아볼 수 있지만, 그 전략을 구현한 기술적인 방법을 담은 책은 매우 찾아보기 어렵다. 또한 퀀트투자 전략을 공부하기 위해서는 코딩이나 수학 등 부가적인 배경지식이 필요하다. 이 책은 이미 잘 알려진 투자 대가들의 전략을 소개하고 자신의 컴퓨터에서 이 전략을 구현해보며 응용하는 방법을 알려준다. 책을 따라 미국 주식 퀀트투자 과정을 배우고 나면 자신만의 투자 전략을 스스로 개발할 수 있을 것이다. 다루는 내용퀀트머신을 사용하는 방법단기투자 기술재무제표 읽는 법/가치주와 우량주를 찾는 기술다양한 전략 백테스트를 통한 투자성과 분석전략 합성을 통한 나만의 투자 전략 만들기파이썬 기본 문법/파이썬 라이브러리(핀터스텔라) 가이드WeBull 애플리케이션/주피터랩 설치 가이드 대상 독자 이 책은 미국 주식 데이터를 분석하고 퀀트투자 전략을 만들고자 하는 일반인을 대상으로 한다. 이 책에서는 데이터 분석을 파이썬 프로그래밍 기반으로 하고 있으나, 책에 수록된 부록(파이썬 기본)을 참고하면 따라 할 수 있는 수준으로 구성되어 있다. 다만 금융 공학 이론과 관련된 전문적인 내용도 다루기에 책을 꼼꼼하게 읽어보는 것이 중요하다. 실습 환경 이 책은 다음과 같은 환경을 기반으로 설명한다.운영체제: 윈도우10(64비트)개발환경: 구글 콜랩예제 소스https://github.com/finterstellar/quant_machine필요한 것은 이 책과 컴퓨터 1대뿐!퀀트머신으로 따라 하며 배우는 미국 주식 퀀트투자 방법 이 책은 프로그래밍 학습 경험이 없고 수학이 부담스러운 독자가 쉽게 따라 할 수 있는 미국 주식 퀀트투자 방법을 소개한다. 필요한 것은 컴퓨터 1대뿐이다. 일단 구글 콜랩(Colab)에서 파이썬 라이브러리를 불러와 퀀트머신을 준비한다. 그리고 책대로 따라 하면서 투자 대가들의 투자 전략을 배운다. 다양한 투자 전략을 직접 백테스트하고 성과를 분석하면서 트레이딩 기술을 익힌다. 책의 마지막 장을 넘길 때쯤이면 투자 전략을 합성하여 나만의 특별한 전략을 만들 수 있을 것이다. 이 책의 내용 퀀트머신을 사용할 컴퓨터를 준비하고 책대로 따라 해보자. STEP 1. 퀀트투자 전략을 자신의 컴퓨터에서 직접 만들어본다.STEP 2. 해당 전략을 직접 백테스트한다.STEP 3. 성과를 확인하고 분석한다.STEP 4. 투자 성과분석을 바탕으로 트레이딩 시그널을 만든다. 1장, 2장 퀀트투자 개념 익히기/퀀트머신 설치하기퀀트투자의 기본적인 개념을 이해한 뒤, 구글 콜랩에서 퀀트머신을 사용하기 위한 환경을 준비한다. 퀀트머신을 이용해 미국 애플 주식을 RSI 투자 기법을 활용하여 분석하면서 퀀트머신 사용법을 익힌다. 3장 단기투자 기술 단기투자 전략의 2가지 방향 설정에 대해 이해하고 기술적 분석으로 유명한 투자 전략 중 RSI, 엔벨로프, 변동성 돌파, 볼린저밴드, 스토캐스틱 등의 여러 전략 개념을 이해하고 퀀트머신으로 실제 미국 주식 종목을 적용시켜 백테스트해본 뒤 적절한 매수/매도 타이밍을 파악하는 기술을 배운다. 4장, 5장 가치투자를 위한 재무제표 읽는 법/가치주를 찾는 기술가치투자를 하기 위해 재무제표의 중요성을 소개하고 퀀트머신으로 재무제표에서 꼭 필요한 정보를 찾아본다. 이후 밸류에이션(가치평가) 산출 과정을 따라 가치주를 찾는 기술을 익힌다. 밸류에이션 중 상대가치법인 PER, PBR, PSR, PCR, EV/EBITDA, EV/Sales 등을 활용한 투자 방법을 알아본다. 6장 우량주를 찾는 기술기업 자체의 수익성과 안전성을 고려한 우량주를 찾는 투자 전략을 살펴본다. 투자 효율이 좋은 기업을 찾는 ROA(자산대비이익)와 ROE(자본대비이익), RIM(잔여이익모델), 영업 효율이 좋은 기업을 찾는 GP/A 지표 등을 다룬다. 이외에도 기업의 특성에 따라 투자가치를 파악할 수 있는 안정성 지표, 성장률 지표, 회전율 지표 등 여러 지표 산출을 통한 투자 방법에 대해 알아본다. 7장 전략을 합성하는 기술ROC와 PER의 합성 전략이라 볼 수 있는 그린블라트의 마법 공식을 살펴보고 여러 지표의 조합 결과를 살펴본다. 또한 피오트로스키의 F스코어에 저PBR 전략을 합성하여 우량주를 판단하는 방법도 알아본다. 마지막으로 지금까지 배운 전략을 응용한 자신만의 새로운 전략을 만들기 위해 퀀트머신으로 여러 전략을 합성하는 연습을 해본다. 8장 퀀트투자 시작하기퀀트투자를 시작하기 전에 가져야 할 개인투자자의 자세에 대해 설명한다. 부록이 책의 부록에서는 파이썬 프로그래밍을 해보지 않은 독자를 위한 파이썬 기본 문법과 퀀트머신의 기반이 되는 핀터스텔라 라이브러리에 대해 간략히 설명한다. 또한 미국 주식투자 실전에 들어가기 전에 모의 트레이딩으로 연습할 수 있는 WeBull 애플리케이션의 사용법을 다룬다. 마지막으로 퀀트머신 준비 환경으로 구글 콜랩 사용이 어려운 경우 대체할 수 있는 주피터랩의 설치와 사용법을 안내한다. 추천사 투자 기법에는 펀더멘털과 퀀트라는 양대산맥이 있다. 데이터의 정량적 활용을 통한 퀀트투자 기법은 재무 분석과 정성적 판단이 필요한 펀더멘털 투자를 보완 및 대체 할 수 있는 훌륭한 도구이며, 한국의 개인투자자가 언어장벽을 극복하고 미국 주식투자에 활용할 수 있는 강력한 무기다. 모쪼록 이 책이 많은 투자자에게 실용적인 퀀트투자 입문서가 되어 좋은 수익률을 낼 수 있길 바란다.뉴욕주민_『뉴욕주민의 진짜 미국식 주식투자』, 『디 앤서』 저자 퀀트투자는 과학적이고 안정적이라는 장점에도 불구하고 퀀트 시스템 구축이 쉽지 않아 많은 투자자에게 그림의 떡이었다. 이 책은 퀀트 시스템 구축 방법을 실질적으로 알려줌으로써 개인투자자도 자신만의 퀀트 시스템을 구축할 수 있도록 안내한다.”윤대은_파로스자산운용 대표
- Table of Contents:
See more articles in the same category here: Top 425 tips update new.
파이썬3에 뛰어들기
You are here: •
파이썬3에 뛰어들기
파이썬3에 뛰어들기 에서는 주로 파이썬 3에 새롭게 도입된 기능을 위주로 소개하고, 추가로 버전 2와의 차이점에 대해 다룹니다. 제가 예전에 작성한 파이썬에 뛰어들기 와 비교할 때, 80 퍼센트 가량은 완전히 새로운 내용으로 채웠고, 20 퍼센트 정도는 다시 고쳐 썼습니다. 이제 이 책을 끝내지만, 여러분의 제안은 언제나 환영합니다.
목차 (확장)
책으로도 만날 수 있습니다
이 책은Creative Commons Attribution Share-Alike 라이센스하에 자유로운 배포가 가능합니다 . HTML 또는 PDF 로 다운받을수 있습니다. 또한 Git 복사본을 만들어서 자유롭게 수정해도 됩니다.
you@localhost:~$ git clone git://github.com/diveintomark/diveintopython3.git
© 2001–11 Mark Pilgrim
지금까지 번역된 언어: en español, in italiano, на русском языке, به پارسی, česky
[Book] 파이썬 3에 뛰어들기 :: Outsider’s Dev Story
작년에 Python을 주로 사용하는 것스마트스터디로 이직했다. 난 전에 ASP, Java, JavaScript 등을 했지만 사실 Python은 코드만 가끔 본 거 외에는 실제로 사용해 본 적은 한 번도 없다. Python 때문에 이직을 한 건 아니지만 일을 하려면 Python을 알아야 하므로 입사 전에 공부를 시작하려고 했었다.
당시에는 내가 아는 가장 유명한 Python 책인 Learn Python the hard way를 꺼내 들었는데 바로 SNS에서 이 책은 프로그래밍을 모르는 초급자를 위한 책이라서 적합하지 않다고 하면서 Dive Into Python 3을 추천받았다. 덤으로 Python 2로 공부하려고 했더니 왜 2016년에 Python 2를 공부하냐고 혼났다. 몇 년 전에 콘퍼런스에서 아직 Python 2로도 충분하다는 발표를 들었었는데 1, 2년 사이에 달라졌나 보다. 그래서 Python 3으로 갈아탔다.
Mark Pilgrim의 Dive Into Python 3가 원서라서 고민하던 중 파이썬 3에 뛰어들기로 번역된 자료가 있다는 걸 알게 되었다. GitHub에 올라와 있어서 보기 쉽게 PDF로 변환했지만 읽던 중 일부는 번역이 적용 안 된 것을 알게 되어 결국 위 웹사이트에서 책을 읽었다. 책을 1년 동안 읽은 것은 아니고 입사 전에 공부를 하다가 막상 입사하니까 Python 프로젝트에 내가 발을 담그는 게 그리 급한 일이 아니라서 다른 일을 하다 보니 멈춰뒀다가 올해 와서 다시 읽었다. 일단 코드 리뷰를 하려고 해도 어느 정도 알아야 하므로 틈틈이 읽기는 했는데 생각보다 훨씬 더 오래 읽게 됐다.
언어의 문법을 안다고 코딩을 할 수 있는 건 아니지만 처음에 할 때 한번 문법을 점검하고 공부하고 싶어서 문법 관련 책을 먼저 봤다. 다른 Python 문법책을 또 볼 생각은 없다.(너무 오래 걸리므로…) 웹이라서 약간 아주 깔금하게 편집되어 있지 않은 부분 외에는 내용이 나쁘지 않다. 기본적인 Python 3의 문법을 읽힐 수 있고 2와의 비교 내용도 잘 나와 있어서 어떻게 달라졌는지도 어느 정도 파악할 수 있다. 다른 Python 책은 아직 안 봐서 비교는 안 되고 생각해 보면 문법책을 본 것도 너무 오랜만이라서 상대 기준으로 비교가 되진 않는다.
아래 내용은 나중에 참고하려고 책을 읽으면서 간단히 정리한 내용이다. 박스친 부분은 책의 내용이 아니라 내 생각을 적은 부분이다.
-1. “파이썬 3로 뛰어들기”에서 달라진 점
Python 2에서는 문자열과 유니코드 문자열이 있었지만, Python 3에서는 바이트와 문자열만 있다.
Python 공부하면서 2에서 유니코드가 안된다는 걸 알았을 때는 정말 놀랐다.
0. 파이썬 설치하기
REPL에서 help() 를 입력하면 파이썬 명령어의 도움말을 입력해서 볼 수 있다.
손에 익을 때까지 help() 쓰는 습관을 들여야 할것 같다.
1. 첫 파이썬 프로그램
1024 if a_kilobyte_is_1024_bytes else 1000 처럼 작성할 수 있다.
처럼 작성할 수 있다. 문자열에 값을 넣을 때는 ‘{0:.1f} {1}’.format(size, suffix) 와 같이 쓴다.
와 같이 쓴다. 함수는 def 를 사용한다.
함수에 return 문이 없다면 None 을 반환한다. def approximate_size(size, a_kilobyte_is_1024_bytes=True): 처럼 파라미터의 기본값을 지정한다. 함수를 호출할 때 approximate_size(a_kilobyte_is_1024_bytes=False, size=4000) 처럼 이름을 지정해서 호출할 수 있다. 이름이 가진 파라미터가 있으면 그다음부터는 모두 이름을 주어야 한다. 함수는 first-class object다.
를 사용한다. 함수에 설명을 다는 것을 docstring(documentation string)이라고 한다.
”’ 로 묶어서 docstring을 작성한다. ”’ 가 주석 문법이므로 아무 곳에서나 사용할 수 있지만 docstring에 가장 많이 쓰인다. docstring은 함수 선언 다음 줄에 위치한다. method.__doc__ 를 프린트하면 해당 함수의 docstring을 볼 수 있다.
import 를 할 때는 sys.path ( import sys )의 모든 경로를 검색한다.
여기엔 현재 경로도 맨 앞에 추가된다. sys.path.insert(0, new_path) 하면 경로의 맨 앞에 새로운 경로를 추가하므로 다른 경로보다 우선 검색하게 할 수 있다.
를 할 때는 ( )의 모든 경로를 검색한다. : 과 들여쓰기만으로 함수를 정의한다.
들여쓰기하면 코드 블록이 시작된다. 한 코드에서는 들여쓰기를 같이 사용해야 한다.
과 들여쓰기만으로 함수를 정의한다. 파이썬 함수는 어떤 예외를 발생시킬 수 있는지 선언하지 않는다. 어떤 예외를 발생시키고 처리할지는 개발자에게 달려있다.
예외처리는 raise ValueError(‘number must be non-negative’) 와 같이 한다.
와 같이 한다. 스택트레이스를 traceback 이라고 부른다.
try: import chardet except ImportError: chardet = None
위처럼 임포트 에러를 처리할 수 있고 모듈의 존재 여부는 if chardet: 로 확인할 수 있다.
로 확인할 수 있다. from lxml import etree 와 같이하면 lxml 에서 etree 를 임포트한다.
와 같이하면 에서 를 임포트한다. 선언하지 않고 할당하는 변수를 unbound 변수라고 부른다. 이건 괜찮지만 할당하지 않은 변수를 참조하면 NameError 가 발생한다.
가 발생한다. multiple = 1024 if a_kilobyte_is_1024_bytes else 1000 와 같이 상황에 따라 할당하는 게 가능하다.
와 같이 상황에 따라 할당하는 게 가능하다. 모든 이름은 대소문자를 구별한다.
if __name__ == ‘__main__’: 부분은 커맨드라인에서 파이썬 파일을 실행할 때만 실행된다.
모든 모듈은 __name__ 속성을 가지고 있어서 모듈을 사용하는 방식에 따라 이 값이 달라진다. import 하면 파일명이 __name__ 에 들어간다.(확장자 제외)
부분은 커맨드라인에서 파이썬 파일을 실행할 때만 실행된다.
함수나 변수명에 _ 를 쓰는 게 아직 어색하다.
를 쓰는 게 아직 어색하다. 함수나 조건문 마지막에 : 를 잊지 말자. 자꾸 까먹어…
를 잊지 말자. 자꾸 까먹어… 세미콜론 쓰지 말자.(오류는 안 나는데 습관이 들어서…)
선언없이 변수를 선언하는 게 어색하다.
2. 고유 자료형
boolean 타입은 True , False 를 쓸 수 있다. True 는 1 , False 는 0 이 된다.
if 문 등에서는 0 은 False이고 그 외의 숫자는 모두 True이다.
, 를 쓸 수 있다. 는 , 는 이 된다. 타입 검사는 type(1) 처럼 사용한다. 이 결과는
가 된다. 처럼 사용한다. 이 결과는 가 된다. isinstance(1, int) 처럼 소속 클래스를 판별할 수 있다.
처럼 소속 클래스를 판별할 수 있다. numbers 타입에서는 float(2) 나 int(2.5) 처럼 변환을 할 수 있다.
실수는 소수점 아래 15자리까지만 정확하게 표현할 수 있다. Python 2에서는 int와 long이 따로 있었지만 Python 3에서는 int만 사용한다. / 는 실수 나눗셈이지만 // 는 실수 나눗셈을 하는데 결과가 양수라면 소수점 이하는 모두 버리고 결과가 음수라면 자기보다 작은 정수가 된다. -11//2 는 -5.5이므로 -6이 된다. ** 는 지수를 의미한다. 즉 11**2 는 11^2 가 된다. 수학 함수는 import math 에서 사용할 수 있다.
나 처럼 변환을 할 수 있다. List
리스트는 [] 로 정의하고 콤마로 각 요소를 구별하고 데이터 타입을 통일할 필요는 없다. list[0] 는 첫 번째 요소를 반환한다. list[1:6] 는 2번째부터 6번째까지 요소를 반환하고 length가 넘어도 오류 나진 않는다. list[1:] 는 2번째부터 끝까지 가져오고 list[:4] 는 처음부터 4번째까지 가져온다. 그래서 list[:] 는 다 가져온다. list[-1] 는 뒤에서 첫 번째 아이템을 가져온다. list + [‘f’] 처럼 요소를 추가할 수 있다. list.append(6) 는 마지막에 6 을 추가한다. list.extend([7]) 는 마지막에 7 을 추가한다. list.insert(2, 10) 를 하면 2번 위치에 10을 추가하고 다른 요소를 뒤로 미룬다. list.count(‘e’) 는 리스트에서 e 의 개수를 반환한다. ‘c’ in list 처럼 c 가 리스트에 있는지를 판단할 수 있다. list.index(‘e’) 는 e 의 첫 번째 위치를 반환한다. 찾지 못하면 ValueError 가 발생한다. del list[2] 를 하면 리스트의 두 번째 아이템을 제거한다. list.remove(‘e’) 처럼 원하는 객체를 제거할 수 있다. 첫 번째 아이템만 제거한다. 존재하지 않는 값을 지우려고 하면 오류가 발생한다. list.pop() 는 마지막 아이템을 제거하고 list.pop(3) 는 3번째 아이템을 제거한다. 빈 리스트라면 오류가 발생한다. 빈리스트는 False 이다.
Tuple
**내부아이템 수정이 불가능한 리스트이다.*** 그래서, append() , extend() , insert() , remove() , pop() 등이 없다. 대괄호 대신 괄호를 이용해서 정의한다. (“a”, “b”, “mpilgrim”, “z”, “example”) 리스트와 같이 순서가 있고 리스트처럼 아이템을 가져올 수 있다. 특징
** 리스트보다 빠르다. tuple() 은 리스트를 튜플로 바꿔주고 list() 는 튜플을 리스트로 바꿔준다. 빈 튜플은 False이다. 1개짜리 튜플을 만들 때는 (“a”,) 와 같이 해주어야 한다. 마지막에 콤마가 없으면 그냥 괄호다.
v = (‘a’, 2, True) (x, y, z) = v
위처럼 디스럭쳐링을 할 수 있다. (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7) 같은 방식으로 활용 가능하다.
Set
같은 방식으로 활용 가능하다. 유일 값을 가진다. 정렬되지 않았다.
{1} 나 {1, 2} 처럼 Set을 만든다.
나 처럼 Set을 만든다. set() 함수로 리스트를 Set으로 변환할 수 있다.
함수로 리스트를 Set으로 변환할 수 있다. a_set = set() 처럼 빈 Set을 만들 수 있다.
처럼 빈 Set을 만들 수 있다. len(a_set) 로 길이를 검사한다.
로 길이를 검사한다. {} 이렇게 하면 빈 Set이 아니라 딕션어리가 만들어진다.
이렇게 하면 빈 Set이 아니라 딕션어리가 만들어진다. add() 함수로 아이템을 추가할 수 있다.
함수로 아이템을 추가할 수 있다. update() 는 인자로 Set을 받아서 Set에 추가한다. set을 2개이상 전달하는 것도 가능하다. 리스트를 전달해도 된다.
는 인자로 Set을 받아서 Set에 추가한다. set을 2개이상 전달하는 것도 가능하다. 리스트를 전달해도 된다. discard() 와 remove() 로 특정 아이템을 제거할 수 있지만 remove() 는 없는 값을 지정하면 오류가 발생한다.
와 로 특정 아이템을 제거할 수 있지만 는 없는 값을 지정하면 오류가 발생한다. pop() 은 아이템을 제거하지만, 어느 아이템 제거될지는 알 수 없다.
은 아이템을 제거하지만, 어느 아이템 제거될지는 알 수 없다. clear() 는 모든 요소를 제거한다.
는 모든 요소를 제거한다. union() , intersection() , difference() , symmetric_difference() 의 함수도 있다.
딕션어리
, , , 의 함수도 있다. 정렬되지 않은 키-값의 쌍
{‘server’: ‘db.diveintopython3.org’, ‘database’: ‘mysql’} 로 생성하고 a_dict[‘server’] 같이 조회한다.
로 생성하고 같이 조회한다. 없는 키를 조회하면 오류가 난다.
기존 키에 할당하면 덮어써 지고 새로운 키에 할당하면 추가된다.
None
특수 상수로 null을 의미하지만, False나 0과는 다르다.
NoneType 이고 딱 None 하나 뿐이다.
list.index() 에서 값이 없으면 오류가 발생시킨다는 게 신기하게 느껴졌다. JS를 오래 해서 그런지 -1 검사가 좀 귀찮은 건 사실이지만 오류를 잡아내는 게 처리가 편하려나…. Java에서는 어떻게 했더라…
에서 값이 없으면 오류가 발생시킨다는 게 신기하게 느껴졌다. JS를 오래 해서 그런지 검사가 좀 귀찮은 건 사실이지만 오류를 잡아내는 게 처리가 편하려나…. Java에서는 어떻게 했더라… 빈 리스트( [] )가 False라는 건 직관적이지만 JavaScript는 안 그래서 난 좀 헷갈릴 듯…
)가 False라는 건 직관적이지만 JavaScript는 안 그래서 난 좀 헷갈릴 듯… 1개짜리 튜플을 만들 때 마지막에 콤마를 찍는 건 기억해 둬야 할 듯…
3. 컴프리헨션
os 모듈로 디렉터리, 파일, 프로세스, 환경변수를 다룰 수 있다.
os.path 에는 파일과 디렉터리를 다루는 함수가 있다. os.path.expanduser() 는 os.path.expanduser(‘~”) 처럼 해서 홈 디렉터리로 바꿔준다. os.path.split 는 경로와 파일명을 튜플로 분리하고 os.path.splitext 는 파일과 확장자를 튜플로 분리한다. os.path.realpath(‘feed.xml’) 로 파일의 절대 경로를 얻을 수 있다.
모듈로 디렉터리, 파일, 프로세스, 환경변수를 다룰 수 있다. glob 모듈로 디렉터리를 검색한다.
glob.glob(‘examples/*.xml’) 처럼 파일을 검색할 수 있다. os.stat(‘feed.xml’) 로 파일의 메타데이터를 추출할 수 있다.
모듈로 디렉터리를 검색한다. time 모듈로 시간을 다룬다.
모듈로 시간을 다룬다. 리스트 컴프리헨션
리스트의 각 요소에 함수를 적용 후 반환 값을 새 리스트를 얻을 수 있다. [elem * 2 for elem in a_list] 오른쪽에서 왼쪽으로 읽으면 이해가 쉽다. 기존 리스트는 변경되지 않는다. [f for f in glob.glob(‘*.py’) if os.stat(f).st_size > 6000] 같이 하면 if 조건이 참인 경우만 리스트에 포함된다.
딕션어리 컴프리헨션
{f:os.stat(f) for f in glob.glob(‘*test*.py’)} 와 같이 만든다.
셋 컴프리헨션
{x for x in a_set if x % 2 == 0} 처럼 만든다.
4. 문자열
Python 3의 모든 문자열은 유니코드이다.
len(str) 로 문자열의 길이를 알 수 있다.
로 문자열의 길이를 알 수 있다. “{0}’s password is {1}”.format(username, password) 처럼 문자열을 치환할 수 있다.
처럼 문자열을 치환할 수 있다. ‘1000{0[0]} = 1{0[1]}’.format(arr) 처럼 arr 이 배열이면 이렇게도 가능하다.
처럼 이 배열이면 이렇게도 가능하다. format specifier
‘{0:.2f} {1}’.format(698.249, ‘GB’) 처럼 할 때 : 은 형식지정자의 시작을 알리고 .2f 가 형식 지정자이다. .2 는 소수 셋째 자리에서 반올림하라는 것이고 f 는 부동소수점을 의미한다. 그래서 698.25GB 가 된다. Format Specification Mini-Language 참고
”’ 를 사용하면 멀티라인 문자열을 정의할 수 있다.
를 사용하면 멀티라인 문자열을 정의할 수 있다. str.splitlines() 로 뉴라인(
)기준으로 분리해서 배열로 만들 수 있다.
로 뉴라인( )기준으로 분리해서 배열로 만들 수 있다. str.lower() 로 소문자로 만든다.
로 소문자로 만든다. str.lower().count(‘f’) 로 f 의 개수를 셀 수 있다.
로 의 개수를 셀 수 있다. str.split(‘&’) 를 사용하면 & 기준으로 분리한다.
를 사용하면 기준으로 분리한다. query = ‘name=outsier&s=blog&date=2017-01-01’ 가 있을 때
query.split(‘&’) 를 하면 [‘name=outsier’, ‘s=blog’, ‘date=2017-01-01’] 를 얻을 수 있다. query.split(‘&’, 1) 처럼 숫자를 줄 수 있는데 이는 몇 번 스플릿 할지를 정한다. [v.split(‘=’, 1) for v in query.split(‘&’) if ‘=’ in v] 처럼 나눌 수 있다. 이건 [[‘name’, ‘outsier’], [‘s’, ‘blog’], [‘date’, ‘2017-01-01′]] 가 되는데 뒤에 if 까지 붙어서 URL 나눌 때 아주 편할 듯…
가 있을 때 a_string[3:11] 처럼 리스트와 마찬가지로 자를 수 있다.
처럼 리스트와 마찬가지로 자를 수 있다. by = b’abcd\x65’ 로 바이트 정의할 수 있다. 이는 byte literal 이다. 객체의 타입은 바이트이다.(
) 로 바이트 정의할 수 있다. 이는 이다. 객체의 타입은 바이트이다.( ) 내장함수 bytearray(by) 로 바이트어레이(
)로 바꿀 수 있다. 바이트의 메서드를 같이 쓸 수 있다. 바이트는 생성하고 나면 바꿀 수 없으므로 이때 바이트 어레이를 사용한다. 로 바이트어레이( )로 바꿀 수 있다. 바이트의 메서드를 같이 쓸 수 있다. 바이트는 생성하고 나면 바꿀 수 없으므로 이때 바이트 어레이를 사용한다. 바이트와 문자열을 + 하면 오류가 난다. 섞어 쓰면 안된다.
하면 오류가 난다. 바이트객체의 decode() 로 문자열로 바꿀 수 있고 문자열에서 encode(‘utf-8’) 로 바이트로 바꿀 수 있다.
로 문자열로 바꿀 수 있고 문자열에서 로 바이트로 바꿀 수 있다. Python 3에서 .py 는 UTF-8로 인코딩되어 있다고 가정한다. 다른 인코딩을 사용하려면 파일 첫 줄에서 # -*- coding: windows-1252 -*- 로 명시해야 한다.
멀티라인은 되는데 heredoc은 없나.
str.lower().count(‘f’) 이런건 꽤 편할 듯…
5. 정규표현식
import re
re.sub(‘ROAD$’, ‘RD.’, s) 로 치환한다.
로 치환한다. 특수문자의 경우 re.sub(‘\\bROAD$’, ‘RD.’, s) 로 이스케이프 할 수 있지만, raw string을 써서 re.sub(r’\bROAD$’, ‘RD.’, s) 처럼 할 수 있다. 파이썬 정규표현식은 r 을 쓰기를 권장한다.
로 이스케이프 할 수 있지만, raw string을 써서 처럼 할 수 있다. 파이썬 정규표현식은 을 쓰기를 권장한다. re.search(pattern, ‘MM’) 로 검색한다. 발견하면 발견 정보 객체를 반환하고 없으면 None 이다.
로 검색한다. 발견하면 발견 정보 객체를 반환하고 없으면 이다. 정규표현식에 주석을 달 수 있다. -> verbose 정규표현식
pattern = ”’ ^ # 문자열의 시작 M{0,3} # 천의 자리 – 0-3 개의 M (CM|CD|D?C{0,3}) # 백의 자리 – 900(CM), 400(CD), 0-300(0-3 개의 C), # 500-800(D 하나와, 뒤이은 0 to 3 개의 C) (XC|XL|L?X{0,3}) # 십의 자리 – 90(XC), 40(XL), 0-30(0-3 개의 X), # 50-80(L 하나와, 뒤이은 0-3 개의 X) (IX|IV|V?I{0,3}) # 일의 자리 – 9(IX), 4(IV), 0-3(0-3 개의 I), # 5-8(V 하나와 뒤이은 0-3 개의 I) $ # 문자열의 끝 ”’
verbose를 쓰면 re.search(pattern, ‘M’, re.VERBOSE) 처럼 re.VERBOSE 를 전달해야 한다.
처럼 를 전달해야 한다. p = re.compile(r’^(\d{3})-(\d{3})-(\d{4})$’) 처럼 정의해서 쓸 수 있다.
처럼 정의해서 쓸 수 있다. p.search(‘800-555-1212-1234’).groups() 처럼 서치의 결과에 그룹을 쓰면 정규표현식 그룹을 얻을 수 있다. 하지만 검색결과가 없으면 None 이 되므로 그룹을 붙일 때는 조심해야 한다.
raw string은 편해 보인다.
e.VERBOSE 를 써야 하는 건 어색하지만 주석 달 수 있는건 편해 보인다.
를 써야 하는 건 어색하지만 주석 달 수 있는건 편해 보인다. 정규표현식 그룹을 가져오는 건 좀 불편해 보이는데 써봐야…
6. 클로저와 제너레이터
re.sub(‘([^aeiou])y$’, r’\1ies’, ‘vacancy’) 처럼 정규식의 그룹은 \1 로 사용한다.
처럼 정규식의 그룹은 로 사용한다. open(‘plural4-rules.txt’, encoding=’utf-8′) 파일은 이렇게 연다.
파일은 이렇게 연다. with open(‘plural4-rules.txt’, encoding=’utf-8′) as pattern_file: 블록에서는 pattern_file 을 변수로 쓸 수 있다. 여기서 with 컨텍스트가 끝나면 알아서 파일을 닫는다.
블록에서는 을 변수로 쓸 수 있다. 여기서 컨텍스트가 끝나면 알아서 파일을 닫는다. line.split(None, 3) 와 같이하면 None 이 아무 공백으로나 나누라는 의미다.
def make_counter(x): print(‘entering make_counter’) while True: yield x #1 print(‘incrementing x’) x = x + 1
위처럼 제너레이터를 만들 수 있다. counter = make_counter(2) 로 만든 후 next(counter) 로 사용한다.
로 만든 후 로 사용한다. fib 를 제너레이터로 만들었을 때 for n in fib(1000): 로 하면 순회하면서 n 에 다음 제너레이터 값이 계속 들어온다.
를 제너레이터로 만들었을 때 로 하면 순회하면서 에 다음 제너레이터 값이 계속 들어온다. list(fib(1000)) 와 같이하면 제너레이터가 바로 리스트가 된다.
True 로 반환하는 게 어색하다.
로 반환하는 게 어색하다. with 를 열심히 쓰는 게 흥미롭다.
를 열심히 쓰는 게 흥미롭다. 제너레이터를 리스트로 만들거나 바로 for 문을 돌리는 건 엄청 좋아 보인다.
7. 클래스와 반복자
class Fib: 처럼 클래스를 정의한다. 보통은 파스칼로 이름을 작성한다.
class Fib: psss
위처럼 빈 클래스를 정의할 수 있다.
__init__()
생성자와 비슷한 역할로 인스턴스가 생성될 때 호출된다. 생성자라고 부르면 안 된다. 왜냐하면, 이미 인스턴스가 만들어져 있기 때문이다. 관습적으로 클래스에서 가장 먼저 정의한다. 첫 인자는 생성된 인스턴스 자신을 가리키는 참조로 보통 self 로 쓴다.
모든 클래스 개체는 __class__ 속성이 개체의 클래스를 가리킨다.
속성이 개체의 클래스를 가리킨다. 개체.__doc__ 로 docstring을 가져올 수 있다.
로 docstring을 가져올 수 있다. __iter__()
이 메서드가 정의되어 있으면 반복자이다. iter(fib) 호출할 때마다 이 메서드가 호출된다. for 문은 알아서 iter 를 호출한다. __iter__() 는 __next__() 메서드를 가진 객체를 반환한다.
__next__()
next() 를 호출할 때 호출된다. raise StopIteration 으로 예외를 발생시키면 반복이 끝났다. 이 예외는 다른 예외와 달리 오류가 아니다.
8. 고급 반복자
assert 1 <= 10, 'Too many letters' 처럼 assert를 사용할 수 있다. 이는 다음과 같다. if 1 <= 10: raise AssertionError('Too many letters') 제너레이터 표현식(generator expression)은 함수가 없는 제너레이터 함수다. 즉 값을 yield 해주는 이름 없는 함수다. (ord(c) for c in unique_characters) 처럼 쓰는데 리스트 컴프리헨션과 비슷하지만, 대괄호가 아니라 소괄호를 사용했다. 이는 next() 를 호출할 때마다 다음 값이 나온다. tuple(ord(c) for c in unique_characters) 와 같이하면 한꺼번에 튜플로 바꾸어준다. 리스트 컴프리헨션 대신 제너레이터 표현식을 사용하면 CPU, 메모리를 절약할 수 있다. rstrip() 으로 스트링 우측의 공백을 제거한다. lstrip() 이나 양쪽을 제거하는 strip() 도 있다. 으로 스트링 우측의 공백을 제거한다. 이나 양쪽을 제거하는 도 있다. sorted() 로 정렬할 수 있다. sorted(names) 처럼 쓰지만 sorted(names, key=len) 을 쓰면 len 으로 정렬한다. 로 정렬할 수 있다. 처럼 쓰지만 을 쓰면 으로 정렬한다. 문자열의 translate() 는 문자열을 순회하다가 키에 맞는 값이 나오면 해당 값으로 바꾼다. 는 문자열을 순회하다가 키에 맞는 값이 나오면 해당 값으로 바꾼다. eval() 로 코드를 실행할 수 있다. 입력을 신뢰할 수 없다면 사용하면 안 된다. eval("x*5", {}, {}) 와 같이하면 주변에 접근 못 하게 샌드박스로 막을 수 있다. 특정 부분만 열어주려면 eval("x*5", {"x":5}, {}) 와 같이한다. 전역을 접근할 수 있고 당연히 __import__() 도 접근할 수 있으므로 위험하다. 전역도 막으려면 eval("__import__('math').sqrt(5)", {"__builtins__":None}, {}) 와 같이한다. 물론 여기서도 DOS 공격은 받을 수 있다. 로 코드를 실행할 수 있다. 입력을 신뢰할 수 없다면 사용하면 안 된다. 와 같이하면 주변에 접근 못 하게 샌드박스로 막을 수 있다. 9. 단위 테스트 import unittest 모듈을 사용한다. 모듈을 사용한다. 테스트 케이스는 class KnownValues(unittest.TestCase): 처럼 unittest.TestCase 를 상속받아서 정의한다. 처럼 를 상속받아서 정의한다. 테스트 케이스는 함수명이 반드시 test 로 시작해야 한다. 10. 리팩토링 3.1부터는 서식 지정자(format specifier)에 위치 인덱스를 숫자로 표시 하지 않아도 된다. 그래서 Invalid {}'.format(s) 처럼 쓸 수 있다. 처럼 쓸 수 있다. 모듈은 import 하면 캐싱 된다. 하면 캐싱 된다. if _name_ == '_main_ 블록이 없이 있는 코드는 import 할 때 호출된다. 11. 파일 a_file = open('test.txt', encoding='utf-8') 로 파일을 연다. 로 파일을 연다. locale.getpreferredencoding() 으로 기본 인코딩을 알 수 있다. 으로 기본 인코딩을 알 수 있다. a_file 에서 a_file.encoding 이나 a_file.mode 로 정보를 읽을 수 있다. 에서 이나 로 정보를 읽을 수 있다. a_file.read() 로 파일 내용을 읽는다. 이 함수는 스트림 객체를 반환한다. 그래서 여러 번 호출해도 오류는 발생하지 않는다. a_file.read(10) 하면 문자 10개를 읽는다. 로 파일 내용을 읽는다. 이 함수는 스트림 객체를 반환한다. 그래서 여러 번 호출해도 오류는 발생하지 않는다. 하면 문자 10개를 읽는다. a_file.seek(0) 를 실행하면 0 바이트 위치로 옮겨간다. 를 실행하면 0 바이트 위치로 옮겨간다. a_file.tell() 은 현재 위치를 알려준다. 은 현재 위치를 알려준다. seek , tell 은 모두 바이트를 다루지만, 파일은 텍스트로 열면 문자를 다룬다. , 은 모두 바이트를 다루지만, 파일은 텍스트로 열면 문자를 다룬다. 바이트를 다룰 때 유니코드는 멀티바이트이므로 중간 위치를 지정해서 읽으려고 하면 UnicodeDecodeError 가 발생한다. 가 발생한다. a_file.close() 로 파일을 닫는다. with open('test.txt', encoding='utf-8') as a_file: a_file.seek(17) a_character = a_file.read(1) 위처럼 사용하면 자동으로 파일을 닫을 수 있다. 코드가 비정상적으로 종료되더라도 닫힌다. with 은 런타임 컨텍스트를 생성하는데 이러면 스트림 객체는 콘텍스트 매니저처럼 동작해서 with에서 빠져나올 때 close() 를 호출한다. with 는 런타임 컨텍스트를 생성하고 객체에 런타임 콘텍스트에 진입하거나 빠져나온다는 사실을 알려줘야 할 때 쓰이는 범용 프레임워크다. 는 런타임 컨텍스트를 생성하고 객체에 런타임 콘텍스트에 진입하거나 빠져나온다는 사실을 알려줘야 할 때 쓰이는 범용 프레임워크다. 스트림 객체가 iterator이므로 for a_line in a_file 처럼 순회할 수 있다. 처럼 순회할 수 있다. 서식 지정자 {:>4} 는 공백 네 칸에 우측 정렬해서 출력하라는 의미이다. 그래서 ‘{:>4}’.format(line_number) 를 하면 4칸 크기에 우측으로 숫자가 찍힌다.
with open(‘test.log’, mode=’w’, encoding=’utf-8′) as a_file: a_file.write(‘test succeeded’)
위와 같이 파일에 내용을 작성할 수 있다. mode=’a’ 이면 추가를 한다.
이면 추가를 한다. 바이너리 파일을 열 때는 mode=’rb’ 처럼 b 를 추가한다.
처럼 를 추가한다. io.StringIO(a_string) 을 하면 문자열을 파일 스트림객체처럼 사용할 수 있다.
을 하면 문자열을 파일 스트림객체처럼 사용할 수 있다. 표준 입출력
sys.stdout.write(”) , sys.stderr.write(”) 로 한다. 파일스트림이므로 파이프로 연결할 수 있다.
with open(‘out.log’, mode=’w’, encoding=’utf-8′) as a_file, RedirectStdoutTo(a_file): 는 아래와 같다.
with open(‘out.log’, mode=’w’, encoding=’utf-8′) as a_file: with RedirectStdoutTo(a_file):
with 를 잘 이해하고 쓰는 게 중요하다.
12. XML
XML을 파싱하는데 표준 라이브러리 ElementTree 를 쓸 수 있다.
를 쓸 수 있다. libxml2 위에 만든 lxml 도 있다. ElementTree 와 API가 100% 호환된다.
13. 파이썬 객체 직렬화
pickle 모듈
표준라이브러리에 포함되어 있다. C로 작성되어 빠르다. 파이썬의 모든 자료형을 저장할 수 있다. 함수, 클래스 개체도 저장할 수 있다.
import pickle with open(‘entry.pickle’, ‘wb’) as f: pickle.dump(entry, f)
entry 라는 객체가 있을 때 위처럼 저장할 수 있다.
pickle 프로토콜로 직렬화한다. 이는 파이썬 전용인데 지정하지 않으면 최신 프로토콜을 사용한다. 이진 바이너리 형식으로 저장한다.
라는 객체가 있을 때 위처럼 저장할 수 있다.
with open(‘entry.pickle’, ‘rb’) as f: entry = pickle.load(f)
불러올 때는 위처럼 불러온다.
e 과 e2 가 같은 데이터이지만 객체는 다를 때 e == e2 는 True 이지만 e is e2 를 하면 False 가 된다.
과 가 같은 데이터이지만 객체는 다를 때 는 이지만 를 하면 가 된다. b = pickle.dumps(entry) 만 사용하면 메모리상에서 직렬화를 하고 pickle.loads(b) 로 불러올 수 있다. 파일에 쓰는 함수와 달리 뒤에 s가 붙어 있다.
만 사용하면 메모리상에서 직렬화를 하고 로 불러올 수 있다. 파일에 쓰는 함수와 달리 뒤에 s가 붙어 있다. 파이썬 3.0의 새로운 pickle 프로토콜을 사용하고 바이트 객체와 바이트 배열을 명시적으로 지원하는 이진 형식이다.
pickletools
import pickletools 를 하면 pickle 파일의 내용을 볼 수 있다.
import json with open(‘basic.json’, mode=’w’, encoding=’utf-8′) as f: json.dump(basic_entry, f)
위처럼 JSON으로 직렬화를 할 수 있다.
json.dump(basic_entry, f, indent=2) 처럼 하면 좀 더 보기 좋은 들여쓰기로 볼 수 있다.
처럼 하면 좀 더 보기 좋은 들여쓰기로 볼 수 있다. 파이썬 객체를 JSON으로 매핑하지만 튜플과 바이트는 매핑되지 않는다.
def to_json(python_object): if isinstance(python_object, bytes): return {‘__class__’: ‘bytes’, ‘__value__’: list(python_object)} raise TypeError(repr(python_object) + ‘ is not JSON serializable’)
위처럼 직렬화 함수를 직접 작성해서 json.dump(entry, f, default=customserializer.to_json) 처럼 사용할 수 있다.
def from_json(json_object): if ‘__class__’ in json_object: if json_object[‘__class__’] == ‘time.asctime’: return time.strptime(json_object[‘__value__’]) if json_object[‘__class__’] == ‘bytes’: return bytes(json_object[‘__value__’]) return json_object
읽어올 때도 직렬화 함수를 작성해서 json.load(f, object_hook=customserializer.from_json) 처럼 사용할 수 있다.
14. HTTP 웹서비스
Python 3에는 두 가지 라이브러리가 있다.
http.client 는 HTTP 프로토콜인 RFC 2616을 구현한 저수준(low-level) 라이브러리다. urllib.request 는 http.client를 기반으로 만들어진 보다 추상화된 라이브러리다. HTTP와 FTP 서버에 접근하는 표준 API를 제공하고, HTTP 리다이렉션(redirect)를 자동으로 따라가며, 기본적인 HTTP 인증(authentication) 방식을 처리할 수 있다.
하지만 오픈소스 httplib2 를 사용하면 된다.
python의 HTTP 라이브러리는 캐싱을 지원하지 않지만 httplib2는 지원한다.
를 사용하면 된다.
from http.client import HTTPConnection HTTPConnection.debuglevel = 1
위처럼 하면 HTTP에 대한 디버그 로그를 볼 수 있다.
import httplib2 h = httplib2.Http(‘.cache’) response, content = h.request(‘http://www.diveintopython3.net/examples/feed.xml’) print(response.status) ## 200 print(content[:52]) ## b”\r
파이썬 3 에 뛰어 들기 pdf topic article, if you find this article useful, please share it. Thank you very much. See more: