[[TableOfContents]] == 개요 == * [https://docs.python.org/3/tutorial]의 내용을 [열파참/금요일]에서 정리. * 번역이 아닌 정리다보니, 내용의 차이가 있을 수 있음... 이 아니라 있음. * 스터디시만 사용하는 독스: http://goo.gl/11ZcFB == 내용 == === Whetting Your Appetite === === Using the Python Interpreter === === An Informal Introduction to Python === ==== Using Python as a Calculator ==== ===== Numbers ===== * python은 계산기처럼 쓸 수 있음. * +, -, *, /, (), **, //, %가 존재. * //연산자는 몫을 리턴. * {{{x ** y}}} 연산자는 x의 y승 == {{{pow(x, y}}}. * -x = x negated * int / int = float이니 조심. * {{{_}}}: 마지막에 출력된 값을 의미. * 복소수도 내장으로 지원함: {{{complex(real, imaginary}}} * {{{divmod(x, y)}}} => {{{(x // y, x % y)}}} 이런 형태로 출력당함 * {{{round(x, y)}}}: 숫자x에서 소수점 자리수를 y개수만 남김. ===== Strings ===== * String은 ‘...’ 혹은 “...”사용. 차이는 없음. * 다른 언어와 같이{{{\}}}를 이용해 특수 문자를 입력 가능. * {{{\t}}}, {{{\n}}}, {{{\’}}} 등. * 중간에 있는’를 무효화 시키기 위해서 \를 붙이거나 큰따옴표를 사용 * 단지 “...” 안의 ‘ 는 허용. ‘...’ 안의 “ 허용. escape 문자 필요없음 * ’r’을 붙이면 {{{\}}}를 특수문자가 아닌 일반 문자로 표현. {{{ >>> print('C:\some\name') # \n을 개행문자로 인식 C:\some ame >>> print(r'C:\some\name') # r을 앞에 붙인다 C:\some\name }}} * String을 {{{+}}}로 더하고, {{{*}}}로 반복할 수 있다. * {{{“““....”””}}} 여러 줄을 허용하는 문자열 * {{{“some” “thing”}}} == {{{“something”}}} * 오직 literals 끼리 적용된다. * 변수, 수식에서 적용되지 않음 * 긴 string을 여러 줄에 걸쳐서 쓸 때 사용하면 유용 {{{ >>> prefix = 'Py' >>> prefix 'thon' SyntaxError: invalid syntax >>> ('un' * 3) 'ium' SyntaxError: invalid syntax }}} * index를 이용해서 각 chr에 접근 가능하며, 음수도 가능. {{{ +---+---+---+---+---+---+ | P | y | t | h | o | n | +---+---+---+---+---+---+ 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1 }}} * slicing: {{{[start:end:step]}}}. start는 포함되며, end는 포함되지 않고, 각 항목은 생략 가능. {{{ word = 'Python' >>> word[0:2] 'Py' >>> word[:2] + word[2:] 'Python' >>> word[:2] 'Py' >>> word[-2:] 'on' >>> word[:] ‘Python’ }}} * {{{len(s)}}}: string과 기타 등등의 원소의 개수를 반환 ===== Lists ===== * Python이 가지는 여러가지 자료를 묶는 방식 중 가장 가변적인 형태 * []로 묶어서 표현. {{{ >>> squares = [1, 4, 9, 16, 25] >>> squares [1, 4, 9, 16, 25] }}} * {{{[n]}}}으로 index n에 해당하는 데이터에 접근 * + 로 복수의 list를 append할 수 있다. * {{{len()}}}: list와 기타 등등의 원소의 개수를 반환. * Slicing * String이랑 동일하게 적용. {{{>>> a = ['a', 'b', 'c'] >>> n = [1, 2, 3] >>> x = [a, n] >>> x [['a', 'b', 'c'], [1, 2, 3]] >>> x[0] ['a', 'b', 'c'] >>> x[0][1] 'b' }}} ==== First Steps Towards Programming ==== * {{{a, b = b, a+b}}} : 우변을 연산하고 좌변의 대응하는 위치에 맞추어서 대입한다. * Indentation 잘못하면 안 돼요. === More Control Flow Tools === === Data Structures === === Modules === === Input and Output === ==== Fancier Output Formatting ==== * {{{str()}}} vs {{{repr()}}} * {{{str()}}}: 사람이 읽기 위한 용도로 string으로 변환 * {{{repr()}}}: {{{eval()}}}을 사용하기 위한 용도로 string으로 변환 {{{ >>> s = 'Hello, world.' >>> str(s) 'Hello, world.' >>> repr(s) "'Hello, world.'" }}} * {{{str.format()}}} method를 이용하면 노가다를 뛰지 않고도 깔끔하게 출력이 가능 {{{ >>> for x in range(1, 3): ... print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)) ... 1 1 1 2 4 8 3 9 27 }}} {{{ >>> print('The story of {1}, {0}, and {other}.'.format('Manfred','Bill', other='Georg')) The story of Bill, Manfred, and Georg. }}} {{{ >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678} >>> print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; ' ... 'Dcab: {0[Dcab]:d}'.format(table)) Jack: 4098; Sjoerd: 4127; Dcab: 8637678 }}} {{{ >>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678} >>> print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table)) Jack: 4098; Sjoerd: 4127; Dcab: 8637678 }}} * {{{vars()}}}를 이용하면 local variables를 담은 dictionary를 얻을 수 있음. 위의 예제와 쓰면 궁합이 좋음. * {{{str.rjust(n)}}}, {{{str.ljust(n)}}}, {{{str.center(n)}}}: n사이즈에 맞게 정렬된 string을 반환. str이 이미 n보다 길면 무시. * 이와 같은 문제를 해결하기 위해 {{{str.ljust(n)[:n]}}} 같은 짓을 가능. * {{{str.zfill(n)}}}: n사이즈에 맞게 0이 삽입된 string을 반환. ===== Old string formatting ===== * {{{%typeIndicator}}} * 구식이다. {{{ print(‘The value of PI is %5.3f.’ % math.pi) }}} ==== Reading and Writing Files ==== * {{{open(filename, mode)}}}: 파일 열기 * mode * ‘r’: 읽기 (기본값) * ‘w’: 쓰기 * ‘a’: 이어쓰기 * ‘r+’,’w+’: 쓰고 읽기 * ‘b’: 바이너리로 열기 (없으면 텍스트로 읽음) * binary vs text * text mode에서는 line ending을 플랫폼에 맞는 형식으로 변환. * 따라서 text가 아닌 파일을 text 모드로 열면 파일이 변형될 수 있음. ===== Methods of File Objects ===== * {{{read(size)}}} * size만큼 파일을 읽는다. size가 지정되지 않거나 음수면 메모리가 허용하는 만큼 읽음. * 끝에 도달하면 빈 string인 ‘’를 반환 * {{{readline()}}} / {{{readlines()}}} * 한 줄 읽어오는 메소드/한줄씩 묶어서 리스트로 제공하는 메소드 * list(file)로도 readlines와 같은 효과 * 다음과 같이 for문을 이용할 수도 있음: {{{ for line in f: print(line, end=’’) }}} * {{{write(string)}}} * 파일에 string을 씁니다. string만 가능하니 다른 것을 쓰고 싶다면 str(object)로 변환 후 이용. * {{{seek(index,from)}}} : * from * 0 : 파일의 시작점을 기준으로 * 1 : 현재 보고 있는 바이트를 기준으로(tell()로 보이는 그거) * 2 : 파일의 마지막 바이트를 기준으로 * {{{tell()}}} * 파일 내의 현재 지정하고 있는 바이트 위치를 알려줌 * {{{close()}}} * 파일을 닫음. 닫고 나서 해당 파일을 쓰려고 하면 오류가 남. * {{{closed}}} * NOT A METHOD * 닫혔는지 여부를 boolean으로 알려줌 ===== Saving structured data with json ===== * json = [http://json.org JavaScript Object Notation] * {{{import json}}} * {{{json.load(json file)}}} 도 파일 읽기 시스템. 읽고 난 뒤에는 마지막으로 간다. 고로 여러번 읽을 수 없다. * {{{json.dumps(obj)}}}: obj를 json 형식으로 전환 * {{{json.dump(obj, file)}}} : file에 쓰기