본문 바로가기
Today I Learned

[Python] 점프 투 파이썬 / 학습 노트

by myspace 2020. 8. 28.

 

점프 투 파이썬 1, 2장

 

- Python은 인터프리터 언어로 한 줄씩 소스 코드를 해석해서 실행함. 인터프리터 언어로는 자바스크립트, HTML, 액션스크립트, SQL, ruby 등이 있음.

cf. 반대로는 컴파일 언어가 있으며 C, C++, JAVA, C# 등을 말함.

 

- Python의 용도

(1) 크롤링(crawling) : 스크래핑의 일종. 웹 사이트의 정보를 수집해서 분류함.

(2) 스크래핑(scraping) : 웹 사이트의 정보를 수집하는 모든 과정.

(3) ai, 빅데이터, 통계, 금융 핀테크, 웹 등 웬만한 분야에서 '쉽게' 사용 가능.

cf. 임베디드는 cjava를 주로 이용.

 

- Python 설치 (윈도우 기준) : https://www.python.org/downloads/release/python-385/ 에서 Windows x86-64 executable installer 설치. 오픈 소스이므로 무료.

 

- 파이썬 웹 개발 프레임워크

(1) django : flask보다 더 많은 게 미리 돼있음. 제대로 된 웹 개발 시 사용.

(2) flask : 기본밖에 없어서 자유도가 높음. 잘 사용하지 않음.

 

- (윈도우 기준) Python 3.8 (64-bit) : 대화형 인터프리터 혹은 파이썬 셸(Python shell). 종료시 Ctrl+Z->Enter 누름.

cf. 유닉스 계열에서는 Ctrl+D

 

- 파이썬 IDLE(Intergrated Development and Learning Environment) : 파이썬 프로그램 작성을 도와주는 통합개발 환경.

 

- 파이썬의 함수는

def add(a, b):
return a+b

의 형식.

 

- 파이썬에서는 들여쓰기가 매우 중요. 제대로 지키지 않으면 오류 남. 보통 Space bar 4번 혹은 탭(Tab) 버튼 이용.

 

- 파이썬의 자료형

 

1. 숫자형(Number) : 정수형(Integer), 실수형(Floating-point), 8진수(Octal), 16진수(Hexadecimal)

 

2. 문자열(String) : 파이썬에서는 더하거나 곱하기 가능. 요솟값을 변경할 수 없으므로 immutable한 자료형.

(1) 문자열 안에 를 포함시키고 싶은 경우 : “ ”, ‘ ’

cf. 백슬래시를 이용한 이스케이프 코드(\‘, \“)도 사용 가능.

(2) 여러 줄의 문자열을 출력하고 싶은 경우 : “”“ ”“”, ‘’‘ ’‘’

 

3. 리스트(List) : [1, 2, 3, 'pow', ['is', 'power']]

 

4. 튜플(tuple) : 리스트와 달리 []가 아닌 ()로 둘러싸지만 생략 가능함. 마찬가지로 리스트와 다르게 값의 생성, 삭제, 수정이 불가능.

 

5. 딕셔너리(dictionary) : KeyValue를 한 쌍으로 갖는 자료형. 대응 관계를 나타내는 자료형인 연관 배열(Associative array) 혹은 해시(Hash)의 일종.

 

6. 집합(set) : 파이썬 2.3부터 지원하기 시작한 자료형. 집합에 관련된 것을 쉽게 처리하기 위해 만듦.

(1) 중복을 허용하지 않음

(2) 순서가 존재하지 않음. 즉 인덱싱이 불가능함.

 

7. (bool) : (True)과 거짓(False)를 나타내는 자료형. 파이썬의 예약어인 TrueFalse는 첫문자를 항상 대문자로 사용해야 함.

 


점프 투 파이썬 3, 4장

- 제어문 : 조건문 if, 반복문 while/for

(1) if : 조건을 판단하여 해당 조건에 맞는 상황을 수행하는 데 씀. 비교연산자, 연산자(or, and, not), in/not in, pass 사용 가능.

elif : 이전 조건문이 거짓일 때 수행. 개수 제한 없이 사용.

 조건부 표현식(conditional expression)

message = "success" if score >= 60 else "failure"

=> score 60 이상이면 success를 그렇지 않으면 failure를 출력하라.

(2) while : 반복해서 문장을 수행해야 할 경우 사용.

break : while문을 강제로 빠져나갈 때 사용.

continue : while문의 처음으로 돌아갈 때 사용.

무한 루프(Loop) : 무한히 반복함. 파이썬에서는 while문으로 구현할 수 있음.

while True:
수행할 문장1
수행할 문장2
. . .

(3) for : continue 사용 가능

range 함수 : 숫자 리스트를 자동으로 만들어줌. for문과 함께 자주 사용함. range(10) 0부터 10 미만의 숫자를 포함하는 range 객체를 만들어줌. 시작 숫자와 끝 숫자를 지정하려면 range(시작 숫자, 끝 숫자) 형태를 사용하는데, 이때 끝 숫자는 포함되지 않음.

len 함수 : 리스트 안의 요소 개수를 돌려주는 함수.

 

- 함수 : 입력값을 가지고 어떤 일을 수행한 다음에 결과물을 내어놓는 것.

 함수의 결괏값은 언제나 하나임. 결괏값으로 두 개(a b)가 나와야 한다면 튜플값 하나로 줄어서 result = (a, b)처럼 반환됨.

<파이썬 함수의 구조>
def 함수명(매개변수):
<수행할 문장1>
<수행할 문장2>
. . .

(1) 일반적인 함수 : 입력값이 있고 결괏값이 있는 함수

(2) 입력값이 없는 함수

(3) 결괏값이 없는 함수 : 결괏값은 오직 return 명령어로만 돌려받을 수 있음. 출력되는 게 있다고 전부 결괏값인 게 아님.

(4) 입력값도 결괏값도 없는 함수

 

- 매개변수(parameter) : 함수에 입력으로 전달된 값을 받는 변수.

- 인수(arguments) : 함수를 호출할 때 전달하는 입력값.

def add(a,b): # a,b는 매개 변수
return a+b
print(add(3,4)) # 3,4는 인수

 

- *args처럼 매개변수 이름 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어줌.

- 키워드 파라미터(kwargs) : 매개변수 앞에 별 두 개(**)를 붙임.

 

- lambda : 함수를 생성할 때 사용하는 예약어. def와 동일한 역할을 함. 보통 함수를 한 줄로 간결하게 만들 때 사용함. lambda 예약어로 만든 함수는 return 명령어가 없어도 결괏값을 돌려줌.

 

- 사용자가 입력한 값을 어떤 변수에 대입하고 싶을 때는

(1) input : 입력되는 모든 것을 문자열로 취급함

(2) 프롬프트를 띄워서 사용자 입력 받기 : input()의 괄호 안에 텍스트를 입력하여 프롬프트 띄우면 됨.

 

- print

(1) 큰따옴표(“)로 둘러싸인 문자열은 + 연산과 동일

(2) 문자열 띄어쓰기는 콤마로 함

(3) 한 줄에 결괏값을 계속 이어서 출력하려면 매개변수 end를 하용해 끝 문자를 지정해야 함.

for i in range(10):
. . . print(i, end=' ')
. . .
0 1 2 3 4 5 6 7 8 9

 

- 파일 생성하기

f = open("파일 이름.txt", '파일 열기 모드‘)
f.close()

- 파일 열기 모드

(1) r : 읽기 모드

(2) w : 쓰기 모드 - 해당 파일이 이미 존재할 경우 원래 있던 내용이 모두 사라지고, 해당 파일이 존재하지 않으면 새로운 파일이 생성된다. 쓰기모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생하기 때문에 .close()를 사용해서 열려있는 파일을 직접 닫아주는 것이 좋다.

(3) a : 추가 모드 - 파일의 마지막에 새로운 내용을 추가시킬 때 사용

 

- 프로그램의 외부에 저장된 파일을 읽는 여러 가지 방법

(1) readline() 함수 이용

(2) readlines() 함수 사용

(3) 파일에 새로운 내용 추가하기

(4) with문과 함께 사용하기 : with문은 파일을 열고 닫는 것을 자동으로 처리함.

(5) [sys 모듈로 매개변수 주기] : sys 모듈을 사용하려면 import 명령어를 사용해야 함.

 


점프 투 파이썬 5장

- 클래스(class) : 프로그램 작성을 위해 꼭 필요한 요소 아님. c언어에는 클래스가 없음. 그러나 똑같은 무엇인가를 계속해서 만들어낼 수 있는 설계 도면으로 이점이 많음. 1개의 클래스는 무수히 많은 객체를 만들 수 있음.

- 객체(object) : 클래스로 만든 피조물. 객체마다 고유한 성격을 가짐. 동일한 클래스로 만든 객체라고 해도 서로 전혀 영향을 주지 않음.(=클래스로 만든 객체의 객체변수는 다른 객체의 객체변수에 상관없이 독립적인 값을 유지함.) ‘a는 객체 ‘a Cookie 클래스의 인스턴스와 같은 말.

 객체변수 : 그 객체의 고유 값을 저장할 수 있는 공간.

- 메서드(Method) : 클래스 안에 구현된 함수. 클래스에 포함되어 있다는 점만 제외하면 일반 함수와 같음.

- 파이썬 메서드의 첫 번째 매개변수 이름은 관례적으로 self를 사용함. 객체를 호출할 때 호출한 객체 자신이 전달되기 때문에 self를 사용한 것임. self가 아닌 다른 이름을 사용해도 상관 없음.

- 생성자(Constructor) : 객체가 생성될 때 자동으로 호출되는 메서드. 파이썬 메서드 이름으로 __init__를 사용하면 이 메서드는 생성자가 됨.

- 클래스의 상속(Inheritance) : 어떤 클래스를 aksemef Eo 다른 클래스의 기능을 물려받을 수 있게 만드는 것. 보통 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용함. 특히 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황에 사용함.

class 클래스 이름(상속할 클래스 이름)

- 메서드 오버라이딩(Overriding, 덮어쓰기) : 상위클래스에 있는 메서드를 동일한 이름로 다시 만드는 것. 이 경우 상위클래스의 메서드 대신 오버라이딩한 메서드가 호출됨.

- 클래스 변수 : 객체변수가 다른 객체들에 영향 받지 않고 독립적으로 값을 유지하는 반면에, 클래스 안에 선언해서 생성하는 클래스 변수는 클래스로 만든 모든 객체에 공유됨. 클래스 변수보다는 객체변수의 중요도가 훨씬 높음.

 

- 모듈 : 함수나 변수 또는 클래스를 모아놓은 파일. 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 파이썬 파일. 다른 사람들이 이미 만들어놓은 모듈을 사용할 수도 있고 우리가 직접 만들어서 사용할 수도 있음.

 파이썬 확장자 .py로 만든 파이썬 파일은 모두 모듈이다.

- (다른 파일에서) 모듈 불러오기 1 : import 모듈이름(.py는 생략해야 함) / from 모듈이름 import 모듈함수1, 모듈함수 2 / from 모듈이름 import *

 __name__ 변수 : 파이썬이 내부적으로 사용하는 특별한 변수 이름.

- 모듈 불러오기 2

sys 모듈 : 파이썬을 설치할 때 함께 설치되는 라이브러리 모듈. / sys.path : 파이썬 라이브러리가 설치 돼 있는 디렉터리를 보여줌. 만약 파이썬 모듈이 여기에 들어가있다면 모듈이 저장된 디렉터리로 이동할 필요 없이 바로 불러서 사용 가능. / sys.path.append("디렉터리") : 괄호 안의 디렉터리를 sys.path에 추가함.

- 모듈 불러오기 3

set 명령어를 사용해서 PYTHONPATH 환경 변수에 .py 파일이 있는 디렉터리를 설정함. 이렇게 하면 디렉터리 이동이나 별도의 모듈 추가 작업 없이 모듈을 불러와서 사용할 수 있음.

 

- 패키지(Package) : 도트(.)를 사용하여 파이썬 모듈을 계층적(디렉터리 구조)으로 관리할 수 있게 해줌. A.B라면 A는 패키지 이름이고 B A 패키지의 B 모듈임. 파이썬 패키지는 디렉터리와 파이썬 모듈로 이루어짐. 간단한 파이썬 프로그램이 아니라면 이렇게 패키지 구조로 파이썬 프로그램을 만드는 것이 공동작업이나 유지보수 등 여러 면에서 유리함. 또한 패키지 구조로 모듈을 만들면 다른 모듈과 이름이 겹치더라도 더 안전하게 사용 가능함.

- __init__.py의 용도 : 해당 디렉터리가 패키지의 일부임을 알려주는 역할.

 python 3.3 버전부터는 __init__.py 파일이 없어도 패키지로 인식함. 하지만 하위 버전 호환을 위해서 __init__.py 파일을 생성하는 것이 안전함.

- relative 패키지 : 동일한 깊이(depth)를 가진 디렉터리는 상위 디렉터리를 표현하는 ..을 이용해서 import 할 수 있음. relative 접근자는 모듈 안에서만 사용해야 함. 파이썬 인터프리터에서 사용하면 “SystemError: cannot perform relative import" 오류가 발생함.

.. - 상위 디렉터리
. - 현재 디렉터리

 

- 예외 처리: try, except문을 사용해서 예외적으로 오류를 처리(무시)할 수 있음. try 블록 수행 중 오류가 발생하면 except 블록이 수행됨. try 블록에서 오류가 발생하지 않으면 except 블록도 수행되지 않음.

try:
. . .
except [발생 오류[as 오류 메시지 변수]]:
. . .

위의 [] 기호는 괄호 안의 내용을 생략할 수 있다는 관례 표기법.

 finally절은 try문 수행 도중 예외 발생 여부에 상관없이 항상 수행됨. 보통 사용한 리소스를 close해야 할 때에 많이 사용함.

 여러 개의 오류 처리를 위해서 except를 여러 개 사용할 수 있음. 만약 2개 이상의 오류를 동일하게 처리하기 위해서는 괄호를 사용하여 except(오류1, 오류2) as e:처럼 괄호를 사용하여 함께 묶어 처리하면 됨.

- 오류 회피하기 : 특정 오류가 발생할 경우 그냥 통과시킴. except의 내용에 pass를 적으면 됨.

- 오류 일부러 발생시키기 : raise 명령어 사용.

 NotImplementedError : 파이썬 내장 오류. 꼭 작성해야 하는 부분이 구현되지 않았을 경우 일부러 오류를 일으키기 위해 사용함.

- 예외 만들기 : 프로그램 수행 도중 특수한 경우에만 예외 처리를 하기 위해서 종종 예외를 만들어서 사용함. 파이썬 내장 클래스인 Exception 클래스를 상속해서 만들 수 있음.

 Exception 클래스를 상속 받은 뒤 print(e)만 사용했을 때 오류 메시지가 출력되지 않을 때가 있음. 이런 경우(=오류 메시지를 출력했을 때 오류 메시지가 보이게 하려면) 오류 클래스에 __str__ 메서드를 구현해야 함. __str__메서드는 print(e)처럼 오류 메시지를 print문으로 cncffurgkf 경우에 호출되는 메서드임.

 

- 내장 함수 : 외부 모듈과 달리 import가 필요하지 않아서 아무런 설정 없이 바로 사용 가능.

 abs(x) : 어떤 숫자를 입력 받았을 때, 그 숫자의 절댓값을 돌려주는 함수.
 all(x) : 반복 가능한(iterable) 자료형 x를 입력 인수로 받으며 이 x의 요소가 모두 참이면 True, 하나라도 거짓이면 False를 돌려줌. 만약 all의 입력 인수가 빈값이면 True를 리턴함.
 any(x) : 반복 가능한 자료형 x를 입력 인수로 받으며 이 요소 중 하나라도 참이면 True, 모두 거짓이면 False를 돌려줌. 만약 any의 입력 인수가 빈값이면 False를 리턴함. all의 반대.
 chr(i) : 아스키코드 값을 입력받아 그 코드에 해당하는 문자를 출력하는 함수.
 dir : 객체가 자체적으로 가지고 있는 변수나 함수.
 divmod(a, b) : 2개의 숫자를 입력으로 받음. a b로 나눈 몫과 나머지를 튜플 형태로 돌려줌.
 enumerate : 열거. 순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 돌려줌. for문과 함께 자주 사용됨.
 eval(expression) : 실행 가능한 문자열(1+2, ‘hi’ + ‘a’ 같은 것)을 입력으로 받아 문잦열을 실행한 결괏값을 돌려줌. 보통 입력받은 문자열로 파이썬 함수나 클래스를 동적으로 실행하고 싶을 때 사용함.
 filter : 첫 번째 인수로 함수 이름을, 두 번째 인수로 그 함수에 차례로 들어갈 반복 가능한 자료형을 받음. 이후, 두 번째 인수인 반복 가능한 자료형 요소가 첫 번째 인수인 함수에 입력 됐을 때 반환값이 참인 것만 묶어서 돌려줌.
 hex(x) : 정수값을 입력받아 16진수(hexadecimal)로 변환하여 돌려줌.
 id(object) : 객체를 입력 받아 객체의 고유 주소값(레퍼런스)를 돌려줌.
 input([prompt]) : 사용자 입력 받는 함수.
 int(x) : 문자열 형태의 숫자나 소수점이 있는 숫자 등을 정수 형태로 돌려줌. 정수를 입력 받으면 그대로 돌려줌.
 int(x, radix) radix 진수로 표현된 문자열 x 10진수로 변환하여 돌려줌.
 isinstance(object, class) : 첫 번째 인수로 인스턴스, 두 번째 인수로 클래스 이름을 받음. 인스턴스가 그 클래스의 인스턴스인지를 판단하여 참이면 True, 거짓이면 False를 돌려줌.
 len(s) : 입력값 s의 길이(요소의 전체 개수)를 돌려주는 함수
 list(s) : 반복 가능한 자료형 s를 입력 받아 리스트로 만들어 돌려주는 함수. 리스트를 입력하면 똑같은 리스트를 복사하여 돌려줌.
 map(f, iterable) : 함수(f)와 반복 가능한 자료형을 입력 받음. 입력 받은 자료형의 각 요소를 함수 f가 수행한 결과를 묶어서 돌려줌.
 max(iterable) : 인수로 반복 가능한 자료형을 입력 받아 최댓값을 돌려줌.
 min(terable) : 인수로 반복 가능한 자료형을 입력 받아 최솟값을 돌려줌.
 oct(x) : 정수 형태의 숫자를 8진수 문자열로 바꾸어 돌려줌.
 open(filename, [mode]) : 파일이름과 읽기 방법을 입력 받아 파일 객체를 돌려줌. 읽기 방법(mode)을 생략하면 기본값인 읽기 전용 모드(r)로 파일 객체를 만들어 돌려줌.
 ord(c) : 문자의 아스키코드값을 돌려줌. chr 함수의 반대.
 pow(x, y) : x y 제곱한 결괏값을 돌려줌.
 range([start,] stop [,step]) : for문과 함께 자주 사용됨. 입력 받는 숫자에 해당하는 범위값을 반복 가능한 객체로 만들어 돌려줌. 시작 숫자를 지정하지 않으면 0부터 시작. 끝 숫자는 해당 범위에 포함되지 않음. 세 번째 인수는 숫자 사이의 거리임.
 round(number[, ndigits]) : 숫자를 입력 받아 반올림해주는 함수. round(5.678, 2)의 경우 실수 5.678을 소수점 2자리까지만 반올림하여 표시해 5.68을 돌려줌. , ndigits는 반올림하여 표시하고 싶은 소수점의 자릿수.
 sorted(iterable) : 입력값을 정렬한 후 결과를 리스트로 돌려줌. 리스트 자료형에도 sort 함수가 있으나 리스트 객체 그 자체를 정렬만 할 뿐 정렬된 결과를 돌려주지는 않음.
 str(object) : 문자열 형태로 객체를 변환하여 돌려줌.
 sum(iterable) : 입력 받은 리스트나 튜플의 모든 요소의 합을 돌려줌.
 tuple(iterable) : 반복 가능한 자료형을 입력 받아 튜플 형태로 바꾸어 돌려줌. 튜플이 입력되면 그대로 돌려줌.
 type(object) : 입력값의 자료형이 무엇인지 알려줌.
 zip(*iterable) : 동일한 개수로 이루어진 자료형을 묶어줌. *iterable은 반복 가능한 자료형 여러 개를 입력할 수 있다는 의미.

 반복 가능한 자료형(iterable) : for문으로 그 값을 출력할 수 있는 것. 리스트, 튜플, 문자열, 딕셔너리, 집합 등.

 아스키 코드 : 0에서 127 사이의 숫자를 각각 하나의 문자 또는 기호에 대응시켜 놓은 것.

 

- 라이브러리 : ‘도서관이라는 뜻 그대로 원하는 정보를 찾아보는 곳. 파이썬 라이브러리는 파이썬을 설치할 때 자동으로 컴퓨터에 설치한다.

 sys 모듈 : 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해줌.
- sys.argv : 명령 행에서 인수 전달.
- sys.exit : 강제로 스크립트 종료. Ctrl+Z Ctrl+D를 눌러서 대화형 인터프리터를 종료하는 것과 같은 기능. 프로그램 파일 안에서 사용하면 프로그램을 중단시킴.
- sys.path : 자신이 만든 모듈 불러와 사용.
 pickle 모듈 : 객체의 형태를 그대로 유지하면서 파일에 저장하고 불러올 수 있게 함. dump 함수로 저장하고 load 함수로 불러옴.
 os 모듈 : 환경 변수나 디렉터리, 파일 등의 OS 자원을 제어할 수 있게 해줌.
- os.environ : 내 시스템의 환경 변수 값을 알고 싶을 때. (시스템은 제각기 다른 환경 변수 값을 가짐.)
- os.chdir : 디렉터리 위치 변경.
- os.getcwd : 디렉터리 위치 돌려받기.
- os.system(“명령어”) : 시스템 자체의 프로그램이나 기타 명령어 호출.
- os.popen : 시스템 명령어를 실행한 결괏값을 읽기 모드 형태의 파일 객체로 돌려받기.
- os.mkdir(디렉터리) : 디렉터리 생성.
- os.remir(디렉터리) : 디렉터리 삭제. , 디렉터리가 비어있어야 삭제 가능.
- os.unlink(파일) : 파일 삭제.
- os.rename(src, dst) : src라는 이름의 파일을 dst라는 이름으로 변경.
 shutil 모듈 : 파일을 복사해줌.
 glob 모듈 : 가끔 파일을 읽고 쓰는 기능이 있는 파일을 만들 때, 특정 디렉터리에 있는 파일 이름 모두를 알아야 할 때가 있음. 이럴 때 사용함.
- glob(pathname) : 디렉터리에 있는 파일들을 리스트로 만듦. *, ? 등 메타 문자를 써서 원하는 파일만 읽어들일 수도 있음.
 tempfile 모듈 : 파일을 임시로 만들어서 사용할 때 유용함. tempfile.mkstemp()는 중복되지 않는 임시 파일의 이름을 무작위로 만들어서 돌려줌. tempfile.TemporaryFile()은 임시 저장 공간으로 사용할 파일 객체를 돌려주고, 이 파일은 기본적으로 바이너리 쓰기 모드(wb)를 가짐. f.close()가 호출되면 이 파일 객체는 자동으로 사라짐.
 time 모듈 : 시간과 관련.
- time.time() : UTC(Universal Time Coordinated 협정 세계 표준시)를 사용하여 현재 시간을 실수 형태로 돌려줌. 1970 1 1 0 0 0초를 기준으로 지난 시간을 초 단위로 돌려줌.
- time.localtime : time.time()이 돌려준 실수값을 사용해서 연도, , , , , 초의 형태로 바꾸어줌.
- time.asctime : time.localtime에 의해서 반환된 튜플 형태의 값을 인수로 받아서 날짜와 시간을 알아보기 쉬운 형태로 돌려줌.
- time.ctime : time.asctime(time.localtime(time.time()))을 간편하게 표시할 수 있음. asctime과 다르게 항상 현재 시간만을 돌려줌.
- time.strftime('출력할 형식 포맷 코드‘, time.localtime(time.time())) : strftime 함수는 시간에 관계된 것을 세밀하게 표현하는 여러 가지 포맷 코드를 제공함.
- time.sleep : 주로 루프 안에서 사용함. 일정한 시간 간격()을 두고 루프를 실행할 수 있음.
 calendar 모듈 : 달력을 볼 수 있게 함.
- calendar.calendar(연도) : 그해의 전체 달력을 볼 수 있음.
- calendar.prcal(연도) : 위와 같은 결괏값.
- calendar.prmonth(년도, ) : 일정 달의 달력만 보여줌.
- calendar.weekday(연도, , ) : 그 날짜에 해당하는 요일 정보를 돌려줌. 월요일(0)부터 일요일(6).
- calendar.monthrange(연도, ) : 입력받은 달의 1일이 무슨 요일인지와 그 달이 며칠까지 있는지를 튜플 형태로 돌려줌.
 random 모듈 : 난수(규칙이 없는 임의의 수)를 발생시킴.
- random.random() : 0.0에서 1.0 사이의 실수 중 난수값을 돌려줌.
- random.randint(1, 10) : 1에서 10 사이의 정수 중 난수값을 돌려줌.
- random_pop(data) : data라는 리스트의 요소 중에서 무작위로 하나를 선택하여 꺼내서 돌려줌. 꺼낸 요소는 pop 메서드에 의해서 사라짐.
- random.choice(data) 입력 받은 리스트에서 무작위로 하나를 선택해서 돌려줌. random_pop과 달리 자동으로 꺼낸 요소가 삭제되지 않음.
- random.shuffle : 리스트의 항목을 무작위로 섞음.
 webbrowser 모듈 : 자신의 시스템에서 사용하는 기본 웹 브라우저를 자동으로 실행함.
- webbrowser.open("http://google.com") : 웹 브라우저가 이미 실행된 상태면 입력 주소로 이동, 실행되지 않은 상태라면 새로 웹 브라우저를 실행한 후 해당 주소로 이동함.
- webbrowser.open_new("http://google.com") : 이미 웹 브라우저가 실행된 상태여도 새로운 창으로 해당 주소를 엶.
 threading 모듈: 스레드를 다룸. 컴퓨터에서 동작하고 있는 프로그램을 프로세스(Process)라고 함. 보통 1개의 프로세스는 1가지 일만 하지만 스레드(Thread)를 사용하면 한 프로세스 안에서 2가지 또는 그 이상의 일을 동시에 수행함.
- 스레드의 join 함수 : 해당 스레드가 종료될 때까지 기다리게 함.

 시간에 관계된 것을 표현하는 포맷 코드 :

포맷코드 설명
%a 요일 줄임말 Mon
%A 요일 Monday
%b 달 줄임말 Jan
%B January
%c 날짜와 시간을 출력함 06/01/01 17:22:21
%d (day) [01,31]
%H 시간(hour)-24시간 출력 형태 [00,23]
%I 시간(hour)-12시간 출력 형태 [01,12]
%j 1년 중 누적 날짜 [001,366]
%m [01,12]
%M [01,59]
%p AM or PM AM
%S [00,59]
%U 1년 중 누적 주-일요일을 시작으로 [00,53]
%w 숫자로 된 요일 [0(일요일),6]
%W 1년 중 누적 주-월요일을 시작으로 [00,53]
%x 현재 설정된 로케일에 기반한 날짜 출력 06/01/01
%X 현재 설정된 로케일에 기반한 시간 출력 17:22:21
%Y 년도 출력 2001
%Z 시간대 출력 대한민국 표준시
%% 문자 %
%y 세기부분을 제외한 년도 출력 01

 


점프 투 파이썬 6, 7장

- 스크립트 : ‘에디터로 작성한 파이썬 프로그램 파일.

- 프로젝트 오일러(http://projecteuler.net/archives) : 코딩 연습 사이트

- 페이징 : 게시판의 페이지 수를 보여주는 것.

- 파이보(https://pybo.kr) : 파이썬 질문과 답변 게시판 서비스.

- 코딩도장(http://codingdojang.com) : 위키독스의 자매사이트. 프로그래밍 문제풀이 하는 곳.

 

- 정규표현식(Regular Expression, 정규식) : 복잡한 문자열을 처리할 때 사용하는 기법. 파이썬만의 고유 문법이 아니라 문자열을 처리하는 모든 곳에서 사용함.

- 정규식에서 사용하는 메타 문자(meta characters, 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자) : . ^ $ * + ? { } [ ] \ | ( )

 문자 클래스 []로 만들어진 정규식 : [] 사이의 문자들과 매치. [] 안의 두 문자 사이에 하이픈(-)을 사용하면 두 문자 사이의 범위를 의미함. [] 안에는 어떤 문자나 메타 문자도 사용할 수 있으며, 이 중 ^는 반대(not)라는 의미를 가짐.


 [자주 사용하는 문자 클래스] :
- \d - 숫자와 매치, [0-9]와 동일한 표현식
- \D - 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식
- \s - whitespace 문자와 매치, [ \t\n\r\f\v]와 동일한 표현식. 맨 앞의 빈칸은 공백문자(space)를 의미함.
- \S - whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일한 표현식.
- \w - 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9_]와 동일한 표현식.
- \W - 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9_]와 동일한 표현식.
 Dot(.) : 줄바꿈 문자인 \n을 제외한 모든 문자와 매치됨. re.DOTALL 옵션을 주면 \n 문자와도 매치됨.
 반복(*) : 바로 앞에 있는 문자가 0부터 무한대로 반복될 수 있다는 의미. (무한대라고 표현했으나 메모리 제한으로 보통 2억 개 정도 가능함.)
 반복(+) : 최소 1번 이상 반복될 때 사용.
 반복({m,n}, ?) : 반복횟수를 m부터 n까지 매치. m 또는 n은 생략 가능. 생략된 m 0과 동일하고, 생략된 n은 무한대(2억 개 미만)의 의미. {1,} +와 동일하고, {0,} *와 동일함. ? {0, 1}을 의미함.

- 파이썬은 정규 표현식을 지원하는 re 모듈을 설치할 때 기본 라이브러리로 제공함.

 패턴 : 정규식을 컴파일한 결과.

- 컴파일된 패턴 객체는 다음과 같은 4가지 메서드를 제공함.

 match() : 문자열의 처음부터 정규식과 매치되는지 조사.

 search() : 문자열 전체를 검색하여 정규식과 매치되는지 조사.

 findall() : 정규식과 매치되는 모든 문자열(substring)을 리스트로 돌려줌.

 finditer() : 정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 돌려줌.

 match, search는 정규식과 매치될 때는 match 객체를 돌려주고, 매치되지 않을 때는 None을 돌려줌. (match 객체 : 정규식의 검색 결과로 돌려주는 객체.)

 match 객체의 메서드를 사용할 경우, group()은 매치된 문자열을 돌려줌. start()는 매치된 문자열의 시작 위치를 돌려주는데, match 메서드는 항상 문자열의 시작부터 조사하므로 start()의 결괏값은 항상 0. end()는 매치된 문자열의 끝 위치를 돌려줌. span()은 매치된 문자열의 (시작, )에 해당하는 튜플을 돌려줌.

- 정규식을 컴파일 할 때 다음 옵션들 사용 가능. 옵션을 사용할 때는 re.DOTALL처럼 전체 옵션 이름을 써도 되고 re.S처럼 약어를 써도 됨.

 DOTALL(S) - . 이 줄바꿈 문자를 포함하여 모든 문자와 매치할 수 있도록 함.
 IGNORECASE(I) - 대소문자에 관계없이 매치할 수 있도록 함.
 MULTILINE(M) - 여러 줄과 매치할 수 있도록 함. (^, $ 메타문자의 사용과 관계 있음. ^는 문자열의 처음, $는 문자열의 마지막을 의미함.)
 VERBOSE(X) - verbose 모드를 사용할 수 있도록 함. 정규식을 주석 또는 줄 단위로 구분해서 보기 편하게 만들 수 있고 주석 등을 사용할 수 있게 됨.

- 백슬래시(\) 문제 : 정규식에서 \를 사용하고 싶으면 \가 문자열 자체임을 알려주기 위해서 백슬래시를 4개 사용해야 함. 혹은 Raw String 규칙을 사용해서 정규식 문자열 앞에 r문자를 삽입한 뒤, 백슬래시를 2개 사용하면 됨.

- +, *, [], {} 등의 메타문자는 매치가 진행될 때 현재 매치되고 있는 문자열의 위치가 변경[소비]. 하지만 문자열을 소비시키지 않는 (zerowidth assertions) 메타문자도 있음.

 | : or[또는]과 동일한 의미.
 ^ : 문자열의 맨 처음과 일치함을 의미.
 $ : 문자열의 끝과 매치함을 의미. ^의 반대.
- ^ 또는 $ 문자를 메타 문자가 아닌 문자 그 자체로 매치하고 싶은 경우에는 \^, \$로 사용하면 됨.
 \A : 문자열의 처음과 매치됨. ^와 같음. 하지만 re.MULTILINE 옵션을 사용할 경우 ^은 각 줄의 문자열의 처음과 매치되고, \A는 줄과 상관없이 전체 문자열의 처음하고만 매치 됨.
 \Z : 문자열의 끝과 매치됨. $와 같은. re.MULTILINE 옵션을 사용할 경우 $와는 달리 전체 문자열의 끝과 매치됨.
 \b : 단어 구분자(Word boundary). 보통 단어는 whitespace에 의해 구분됨. \b는 파이썬 리터럴 규칙에 의하면 백스페이스를 의미하므로, 백스페이스가 아닌 단어 구분자임을 알려주기 위해 Raw string을 알려주는 기호 r (앞에) 반드시 붙여 줘야 함.
 \B : \b와 반대의 경우. whitespace로 구분된 단어가 아닌 경우에만 매치됨.
 그루핑(Grouping) : 문자열이 계속해서 반복되는지 조사할 경우 사용. 그루핑한 문자열은 재참조(Backreferences)할 수 있고, 이름을 붙일 수 있음.
 전방 탐색(Lookahead Assertions) 확장 구문 : 정규식 안에 사용하면 암호문처럼 알아보기 어렵게 바뀜. 긍정형 전방 탐색((?=...)) ...에 해당되는 정규식과 매치돼야 하며 조건이 통과돼도 문자열이 소비되지 않음. 부정형 전방 탐색((?!...)) ...에 해당되는 정규식과 매치되지 않아야 하며 조건이 통과돼도 문자열이 소비되지 않음.
 문자열 바꾸기 : sub 메서드를 사용하면 정규식과 매치되는 부분을 다른 문자로 쉽게 바꿀 수 있음. subn 메서드도 sub와 동일한 기능을 하지만 반환 결과를 튜플로 돌려준다는 차이 있음.

- 정규식에서 Greedy(탐욕스러운) * 메타문자를 사용해서 매치할 수 있는 최대한의 문자열을 모두 소비하는 것. Non-greedy 문자인 ?를 사용하면 *의 탐욕을 제한할 수 있음. ?는 가능한한 가장 최소한의 반복을 수행하도록 도와줌.