1. Ideas for my novel ...
1.1. 파이썬3 설치 및 시작
1.2. Native Datytypes(고유자료형)
1.2.1. Booleans
1.2.2. Numbers
1.2.2.1. 강제변환하는 정수>실수 또는 실수>정수
1.2.2.2. 일반적인 숫자연산
1.2.2.3. Fractions(소수)
1.2.2.4. Trigonometry(삼각법-sin/cos/tan)
1.2.2.5. Numbers in a Boolean Context
1.2.3. Lists
1.2.3.1. Creating a List
1.2.3.2. Slicing a List
1.2.3.3. Adding Items to a List
1.2.3.4. Searching for values in a List
1.2.3.5. Removing Items From a List
1.2.3.6. Removing Items From a List: Bonus Round
1.2.3.7. Lists in a Boolean Context
1.2.4. Tuples
1.2.4.1. Tuples in a Boolean Context
1.2.4.2. Assigning Multiple Values at once
1.2.5. Sets
1.2.5.1. Creating a Set
1.2.5.2. Modifying a Set
1.2.5.3. Removing Items from a Set
1.2.5.4. Common Set Operations
1.2.5.5. Sets in a Boolean Context
1.2.6. Dictionaries
1.2.6.1. Creating a Dictionary
1.2.6.2. Modifying a Dictionary
1.2.6.3. Mixed Value Dictionaries
1.2.6.4. Dictionaries in a Boolean Context
1.2.7. None
1.2.7.1. None in a Boolean Context
1.3. Comprehensions(이해력)
1.3.1. Working with Files and Directories
1.3.1.1. Current Working Directory
1.3.1.2. Working with Filenames and Directiory names
1.3.1.3. Listing Directories
1.3.1.4. Getting File Metadata
1.3.1.5. Constructing Absolute Pathnames
1.3.2. List Comprehensions
1.3.3. Dictionary Comprehensions
1.3.3.1. Other Fun Stuff to do with Dictionary Comprehensions
1.3.4. Set Comprehensions
1.4. Strings
1.5. Regular Expressions
1.6. Closures(종결자) & Generators(생성자)
1.7. Classes(클래스) & Iterators(반복자)
1.8. Advanced Iterators(진전된 반복자)
1.9. Unit Testing(유닉 시험)
1.10. Refactoring(재인수분해)
1.11. Files(파일)
1.12. XML
1.13. 파이썬 오브젝트의 나열
1.14. HTTP 웹서비스
1.15. 사례연구: 파이썬3로 chardet 가져오기
1.16. 파이썬 라이브러리 묶기
1.17. 2to3를 통해 파이썬3 코드로 바꾸기
1.18. 특별한 메소드 이름들
1.19. 이제 어디로
1.20. 문제해결
2. Modifying a Dictionary: Dictionary는 사전에 정의된 크기가 없다. 언제든지 key-value(한 쌍)으로 Dictionary를 추가할 수 있다. 예) a_dict['key'] = value. key가 있으면 key에 대입시켜 value를 수정하고, key가 없으면 추가한다(value로는 작동 안 됨). 그리고 a_dict처럼 하면 dictionary의 모든 아이템을 반환한다. * Dictionary key는 대소문자를 구별하여 완전히 새로운 key-value를 생성한다. 파이썬에서 대문자User과 소문자 user은 완전히 다른 쌍이다.
3. Comprehensions(이해력)
3.1. Working with Files and Directories
3.1.1. Current Working Directory
3.1.1.1. 여러분이 파이썬을 시작할 때면, 파이썬쉘에서 많은 시간이 걸릴 것입니다. 이 책을 통해서 다음과 같은 샘플을 보게 될 것입니다. 1. examples폴더에 모듈 중에 하나가 import(삽입되는것) 2. 모듈에서 함수를 부르는 것 3. 결과를 설명하는 것. working디렉토리를 모른다면 1단계에서 ImportError로 실패했을 것입니다. 왜나면, 파이썬은 import 검색 경로에서 샘플모듈을 찾을 것이기 때문입니다. 찾지 못했다면 샘플폴더가 검색경로에 없기 때문입니다. 이과정을 지나셨다면, 둘 중에 하나를 할 수 있습니다. 1. 검색경로에 샘플 폴더를 추가 2. 현재의 작업경로를 샘플경로로 변경하는 것 현재 작업디렉토리는 파이썬이 언제나 메모리에 잡고있는 보이지 않는 속성입니다. 항상 작업디렉토리는 파이썬쉘에서 있어서, 명령줄에서 파이썬 스크립트를 실행하거나, 웹서버에 어떤 곳에 있는 파이썬 CGI스크립트를 실행합니다. os 모듈은 현재의 작업 디렉토리를 다루는 두 개의 함수를 포함하고 있습니다.
3.1.2. Working with Filenames and Directiory names
3.1.2.1. 디렉토리를 다루는 동안, os.path모듈를 벗어났습니다. os.path는 파일이름과 디렉토리 이름을 조작하는 함수를 포함하고 있습니다.
3.1.2.2. os.paht는 전체 경로명, 디렉토리명, 파일명을 잘라서 구성요소로 하는 함수를 포함하고 있습니다. * (dir, file) = os.path.split(pathname) * (short, extension) = os.path.splitext(filename)
3.1.3. Listing Directories
3.1.4. Getting File Metadata
3.1.4.1. 모든 현대파일은 각 파일의 Meta데이타(생성일, last-Modified데이타, 파일크기 등)를 저장하고 있습니다. 파이썬은 Meta데이타에 접근하는 하나의 API를 제공합니다. 파일을 열 필요없이 파일이름만 있으면 됩니다.
3.1.5. Construction Absolute Pathnames
3.2. List Comprehensions
3.3. Dictionary Comprehensions
3.3.1. Other Fun Stuff to do with Dictionary Comprehensions
3.4. Set Comprehensions
4. Strings
4.1. 유니코드 문자의 나열. 예) HTML
5. Get started!
5.1. Python 학습
5.1.1. Python Install ~ Native Datytypes
5.1.2. Number~Strings/Regular Exp
5.1.3. Closures ~ Refactoring
5.1.4. Files ~ XML
5.1.5. HTTP ~ 사례
5.1.6. 실습 예제
5.2. Python Learning Websites
5.3. Drag & Drop and double-click canvas
5.4. Find out more?
5.4.1. Online Help
5.4.2. Use Cases & Templates
5.4.2.1. Personal Todo List
5.4.2.2. Vacation Planning
5.4.2.3. Meeting Minutes
5.4.2.4. Project Plan
5.4.2.5. more...
5.4.3. Tools and Gadgets
5.4.3.1. Offline Mode
5.4.3.2. Geistesblitz Tools
5.4.3.3. Email & SMS Gateways
5.4.3.4. Offline Mode
6. DiveintoPython3
6.1. Check out http://kybin.github.io/translateDiveIntoPython3korean/index.html
7. Native Datatypes
7.1. Booleans
7.1.1. True와 False라는 두 상수로 논리값을 계산함. (if문 같은) 몇몇 곳에서 계산식의 결과가 논리값일 수 있습니다. 이러한곳을 논리문맥이라 합니다. 논리문맥의 결과는 언제나 참, 거짓을 판별하며 각각의 자료형마다 참, 거짓을 판별하는 계산법이 다릅니다.
7.2. Numbers
7.2.1. 강제변환하는 정수>실수 또는 실수>정수
7.2.1.1. 숫자 연산: (1 이나 2)같은 정수, (1.1이나 1.2)같은 실수, (1/2이나 2/3)같은 분수, 심지어 복소수도 될 수 있음. 소수점의 유무에 따라 정부와 부동소수를 구별합니다. >>>type(1) <class 'int'> >>>isinstance(1,int) True
7.2.2. 일반적인 숫자연산
7.2.2.1. float()함수를 사용하면 실수형(소수점)으로 결과값이 나옴. int()함수를 사용하면 정수형 결과값. int()함수는 수소점 뒷부분을 반올림하지 않고 버립니다. 파이썬의 실수 표현(소수점)은 15자리까지 정밀하게 표현하고 16자리는 17자리 이후를 반올림하여 표시합니다.
7.2.2.2. /(슬래쉬) 연산자는 실수 나눗셈을 합니다. 그 결과는 항상 float으로 떨어집니다. 분모와 분자가 다 정수형이라도 float로 떨어집니다.
7.2.2.3. //(더블슬래쉬)는 약간 '황당한' 정수 나눗셈을 합니다. 결과값이 양수일 때는 소수점 이하(반올림 하지 않고)를 버립니다. 음수값일 때에는 그 결과값에 가까운 정수로 올림합니다.(-5보다는 -6이 더 작으니까 정확하게 말하면 내림이죠. 결과값을 -5로 생각하여 실수하는 경우가 많습니다.) 정리하면, 양수는 소수점 아래 값을 모두 버리고, 음수는 모두 올림수(더 낮은 값으로 값내림)합니다. (-3.3 > -4로 하고, 5.5이면 5를 결과값으로 합니다.)
7.2.2.4. %(MOdulo)연산자는 정수 나눗셈을 하고 난 나머지를 돌려줍니다. 11%2는 11을 2로 나눈 나머지 1을 결과값으로 돌려줍니다.
7.2.3. Fractions(분수)
7.2.3.1. 분수를 사용하려면 import함수를 사용해서 import fractions 한다.
7.2.3.2. 변수x에 fraction을 정의하고, fraction 객체을 생성하여 x에 넘긴다.(대입한다.)
7.2.3.3. fractions함수를 이용해서 분수연산을 할 수 있다. Fraction(2, 3)은 분자2, 분모3인 2/3와 같다. 2 * (1/3) = (2/3)
7.2.3.4. Fraction객체는 자동으로 분수를 줄여준다. (6/4) = (3/2)
7.2.3.5. Python은 분모가 0인 분수를 만들지 않는 센스가 있다.
7.2.4. Trigonometry(삼각법-sin/cos/tan)
7.2.4.1. math모듈은 π(원주율의 직경)라는 상수가 있다. math모듈은 모든 기본 삼각함수-sin(),cos(),tan()과 변종인 asin()을 포함하고 있다.
7.2.4.2. 주의할 것은, 파이썬이 무한한 정확성을 갖지는 않는다. tan(π/4)는 0.99999999999999989가 1을 리턴할 수 있다.(Python3.2.3에서 0.9999999999999999을 리턴함)
7.2.5. Numbers in a Boolean Context
7.2.5.1. Boolean(참거짓)문에서 숫자를 사용할 수 있다. if문처럼 0값은 거짓(False), 1값은 참(True). 분자가 0인 분수는 거짓(False), 0.0인 실수도 False으로 0값을 리턴한다. *(주의) tan(math.pi). Python에서 0값이 아닌 값을 True로 하는데 tan(math.pi)처럼 파이썬에서 0값을 반환하지 않는 연산값이 True값을 반환하는 것에 주의를 해야한다.
7.2.5.2. Python에서 함수정의는 줄 끝에서 Enter를 누르고, 빈 줄에서 Enter를 누르면 함수정의가 종료된다.
7.2.5.3. 분자가 0인 분수는 분모가 무슨 수이든지 False값을 반환한다.
7.3. Lists
7.3.1. 값을 순서대로 써 놓은 것.
7.3.2. List생성: list의 Creating은 [ ](각괄호)를 사용하여 list값을 ,(콤마)로 구분하여 둘러싸서 만든다.
7.3.2.1. list는 순서를 갖는 0~(n-1)까지 n개의 배열이다. list[0]값과 list[-(n-1)]은 값은 첫 번째 배열원소를 반환한다. 정리하면, a_list[-n]값은 a_list의 길이에서 -n한 a_list값, a_list[len(a_list)-n]과 같다. 공식: a_list[-n]==a_list[len(a_list)-n]
7.3.3. list 나누기: list를 정의했다면 두개의 색인으로 특정한 어떤 부분을 새로운 list로 얻을 수 있다. 요거이 slicing이라고 한다. 예) a_list [1:-1]
7.3.3.1. .(처음 값 포함, 나중 값은 포함하지 않음.)반환값은 slice index로 시작하여 second slice index를 포함하지 '않는' 아이템(원소)를 모두 포함하는 새로운 list를 반환하다.
7.3.3.2. . a_list[:3] == a_list[0:3] a_lise[0:3] - zero(0)을 기본으로 하는 list면 a_list[0]부터 a_list[3]을 포함하지 않는 처음부터 세 개의 아이템을 반환한다. 그리고 왼쪽에 0이 포함되어 있다면 a_lise[:3]처럼 버릴 수 있다.
7.3.3.3. . a_list[:n]은 처음부터 n개, a_list[n:]은 n부터 끝까지의 원소 반환. 마찬가지로, 오른쪽 slice index가 list길이(끝)까지라면 오른쪽 slice index를 버릴 수 있다. 사실, a_list [:n]은 항상 처음부터 n개의 아이템(원소)를 반환하고, a_lise[n:]은 n부터 나머지 아이템(원소)를 반환한다. list길이을 알 필요없이 말입니다.
7.3.3.4. . a_lise [:]은 모든 원소. 양쪽의 slice index가 없다면 list의 모든 아이템(원소)이 포함된 list를 반환합니다. But(하지만), 원래의 a_list변수와 같은 것이 아닙니다. 때문에 똑같은 list copy(복사)를 만들때 a_lise[:]를 사용합니다.
7.3.4. Adding Items to a List
7.3.4.1. 1. + 연산은 연결된 새로운 list를 생성한다. 크기에 제한없이 items을 포함할 수 있다. 그러나 메모리가 언급되면 두번째 리스트가 메모리에 생성된다는 것을 알아야 한다. 이 경우, 새로운 list는 즉시 기존에 있는 a_list변수에 할당된다. 그래서 +연산 list코드는 두가지 단계-연결과 할당으로 large lists를 다룰 때에는 많은 메모리를 차지할 수 있다. 어떤 datatype이든지 한 개의 리스트 아이템은 같은 자료형일 필요는 없다. 여기서는 string을 실수, 정수 자료형에 포함시키고 있다.
7.3.4.2. 2. append()메소드는 한 개의 item으로 리스트의 맨 끝에 추가한다.
7.3.4.3. 3. extend()메소드: 리스트는 클래스들로서 되었다. "Creating" 리스트는 제대로 예시되는 클래스이다. 그렇게 list는 메소드를 가지고 동작한다. extend()메소드는 list같은 한 개의 argument를 취하고 오리지날 list에 대항하는 각각의 아이템에 추가한다.
7.3.4.4. 4. insert()메소드는 한 개의 아이템을 리스트에 삽입하는데, 아이템(원소)의 값은 유니크(하나 만)하지 않고 같은 값이 다른 위치에 존재할 수 있다. 첫 번째 argument는 부딧쳐서 자리를 얻는 첫 번째 아이템의 index이다.
7.3.4.5. * append() and extend()
7.3.5. Searching items to a List
7.3.5.1. . 갯수: count()메소드: a_list.count('new') 은 리스트 안의 'new'아이템의 갯수를 카운트한다.
7.3.5.2. . 존재유무: in 연산자: 'new' in a_list는 리스트 안에 'new'의 유무를 확인하여 True값 또는 False값으로 반환한다. 몇 번이나 있는지 등은 알려주지 않는다.
7.3.5.3. . 위치출력: index()메소드: 원소의 위치를 출력. a_list.index('new')는 리스트 안의 'new'아이템 index위치를 출력한다. in 연산자나 count()메소드는 아이템이 어디에 있는지를 알 수 없다. list값이 어디에 있는지를 알려면 index()메소드를 사용해야 한다. 하지만 검색하는 같은 값이 여러 곳에 있다면 첫 번째 위치만을 반환한다. 찾는 값이 없으면 index()메소드는 exception(예외)을 발생시킨다.
7.3.6. Removing items to a List
7.3.6.1. . 위치지정 삭제: del a_list[1] 하면 a_list의 1(두번째 index)에 있는 item이 삭제된다. remove()메소드는 위치하는 index를 모를 때, 아이템을 value으로 지울 수 있다.
7.3.6.2. . 삭제한 아이템 반환: pop()메소드는 list의 index에 있는 삭제한 item을 반환한다. pop()메소드에 인자(argument)가 없으면 맨 마지막에 있는 아이템을 삭제한다. 물론 삭제한 값을 반환하여 보여준다.
7.3.7. List in a Boolean Context
7.4. Tuples: a_tuple = tuple("a", "b", "c")
7.4.1. * 추가/삭제/수정 안 됨: Tuple은 변경할 수 없는 list입니다. 한번 만들어지면 변경되지 않습니다. 값을 순서대로 써 놓은 것.(내용을 변경할 수 없음) * index(위치확인)/in(존재확인) 연산자 사용 됨.
7.4.2. . Touple은 둥근괄호()를 사용합니다. tuple은 list(리스트)처럼 정의하지만, 각괄호 대신에 parentheses(둥근괄호)를 사용한다.
7.4.3. 인덱스가 음수이면 list처럼 tuple의 끝에서부터 센다.
7.4.4. slicing작업 또한 list처럼 새로운 tuple를 얻는다.
7.4.5. Diference(차이점): Touple은 list처럼 index를 변경할 수 있는 메소드 - append(), extend(), insert(), remove(), and pop()가 없다. 오직, tuple은 새로운 tuple를 만드는 slicing만 할 수 있다.
7.4.6. 장점은? 1. 반복자를 사용할 수 있고 list보다 빠르다. "반복자"를 사용할 때 list대신에 tuple을 사용할 수 있다. 2. 코드 안정성: "Write-protect"데이타로 변경할 필요가 없는 "코드 안정성"을 높일 수 있다. 3. Dictionary keys 사용: tuple는 문자, 숫자, 다른 tuple를 포함한 Dictionary keys을 사용할 수 있다. (list는 변경할 수 있기 때문에 Dictionary key로 사용할 수 없다.)
7.4.7. Boolean Context에서 함수의 인자(argument)에 () 또는 (False)는 False값을 반환한다. 하지만, [False], (False,)는 true값을 반환한다. tuple는 값과는 무관하게 아이템을 갖으면 True(참)값을 반환한다. 여기서, 아이템이 하나인 tuple를 생성하려면 반드시 "값" 다음에 ,(콤마)가 있어야 한다. ,(콤마)가 없으면 파이썬은 tuple를 생성하지 않는다.
7.5. Sets: a_set = set()
7.5.1. . (순서가 없는) 값의 모음으로 (중복없는)unique한 값이 담긴 가방이다. List로부터 set을 만들 수 있다. 한 개의 set은 변경할 수 없는 어떠한 Datatype을 값으로 포함할 수 있다. 한번 두 개의 sets을 갖으면 union, intersection, set difference와 같은 표준 set 연산을 할 수 있다.
7.5.2. Creating a Set: { }을 사용하여 a_set = {1}처럼 하나 이상의 값은 ,(콤마)로 하여 곱슬괄호로 둘러싸서 만든다. Set은 실제로 class처럼 실행된다. (지금은 고려하지 말자) set은 {}로 반환하고, list는 []로 반환한다. set 의 장점: 값이 정해지지 않았을 때, 인자(argument)없이 비어있는 set()을 생성할 수 있습니다. type(set)하면 <class 'set'>으로 나옵니다. len(set)하면 0으로 나옵니다. 빈 set을 만들어 a_set처럼 호출하면 set()처럼 나오는데 이는 비어있는 set이 아니라, 비어있는 Dictionary를 의미한다.
7.5.3. add() and update(): set은 두 가지 방법으로 set값을 변경할 수 있다.
7.5.4. set에서 item 삭제: 3가지 방법이 있다. discard(), remove(), pop()메소드가 있는데, discard()와 remove()메소드는 한 개의 value을 삭제할 수 있으며 *discard()메소드는 (에러 메시지)Keyerror exception(예외)을 발생시키지 않는다. remove()/pop()은 Keyerror를 발생시키는 미묘한 차이가 있다.
7.5.4.1. set은 list처럼 pop()메소드를 갖는다. pop()은 순서없이 임의의 아이템을 삭제하고(List는 처음 아이템부터 하나씩 삭제), clear()메소드는 set의 아이템을 모두 삭제한다. a_set()를 사용하면 set의 모든 아이템을 확인할 수 있고, 삭제할 아이템이 없으면 Keyerror exception(예외)를 반환한다.
7.5.5. Common Set Operations(Set 연산)
7.5.5.1. in : value이 있는지 없는지를 확인한다.
7.5.5.2. union(): 두 set()의 값을 모두 포함한 (값의 중복이 없는)새로운 set를 반환한다. (이때, 두 set의 값은 변경되지 않고 그대로이다.) a_set.union(b_set) == b_set.union(a_set)
7.5.5.3. intersection(): 공약수, 두 set에 공통으로 있는 values을 반환한다. 역시, 두 set의 values은 변경되지 않고 그대로 있다. a_set.intersection(b_set) == b_set.intersection(a_set)
7.5.5.4. symantic_difference()메소드: 공통된 아이템을 제외한 set. 두 set에서 공통으로 있는 values을 모두 제거한, 두 set에서 정확하게 하나만 존재하는 값을 새로운 set으로 반환한다. a_set.symantic_difference(b_set) == b_set.symantic_difference(a_set)
7.5.5.5. . difference: a_set.difference(b_set)처럼, 두 set에서 a_set에는 있지만, 인자(b_set)에는 없는 values을 새로운 set으로 반환한다. 즉, a_set에만 있는 values을 반환함
7.5.5.6. 두 set()의 union()메소드를 실행한 values길이는 intersection()길이 + symmetric_difference()길이의 합과 같다.
7.5.5.7. issubset(), issupperset() 연산: a_set.issubset(b_set)메소드는 a_set값들이 b_set값들의 부분집합인가? 에 대해 Boolean Value(참, 거짓)으로 반환한다. a_set.issupperset(b_set)은 a_set이 b_set을 포함하는가? 에 대해 역시, Boolean 값으로 반환한다.
7.5.5.8. >>> is_it_true({'a'}) yes, it's ture >>> is_it_true({False,}) yes, it's ture >>> is_it_true(a_set) yes, it's ture >>> is_it_true(()) no, it's false
7.6. Dictionaries: any datatype
7.6.1. Creating Dictionary: a_dict['a:alpa', 'b:beta']처럼 콜론(:)을 한 쌍으로 각괄호에 싸서 생성한다. key로 Value를 얻을 수는 있지만, value로 key를 얻을 수는 없다.
7.6.2. Mixed-Value(다양한 값) Dictionary
7.6.2.1. Dictionaries는 string 만이 아니라, 모든 datatype이 Dictionary value가 될 수 있다. 정수, 불리언, 임의객체, 심지어 다른 dictionary들도 될 수 있다. 하나의 dictionary내에서 value들은 모두 같은 자료형을 요구하지 않는다. 필요한 만큼 혼합될 수 있고 같을 수 있다. Dictionary Key는 좀 더 제한적이지만, 정수-문자와 약간의 다른 datatype이 될 수 있다. Dictionary Key역시 혼합하거나 같은 datatype 일 수 있다.
7.6.3. Dictionaries in a Boolean Context: 빈 Dictionary는 False(0), 모든 Dictionary는 True(0이 아닌 수)
7.7. None: null 값을 갖는 특별한 상수
7.7.1. None는 null값을 갖는 특별한 Python의 상수이다. None는 0(zero)값이 아니기 때문에 False와 같지 않다. 또한 empty string도 아니다. None과 비교하면 항상 False값을 반환한다. None는 오직 null값만을 갖는다. 자기자신의 datatype(NoneType)를 갖는다. 변수에 할당할 수 있지만 다른 NoneType 객체를 생성하지는 못한다. 변수의 값이 None인 모든 변수는 서로 같다.
7.7.2. None in a Boolean Context: 불리언 구문에서 None는 false이고, not None는 True(참)이다.
7.7.3. Bytes / Bytes Array
7.7.3.1. 예) JPEG 이미지 파일