🐍 파이썬 스터디
파이썬 공식문서를 기반으로 자습서(tutorial) 파트를 공부/발표하는 스터디를 진행하기로 했다.
1. Whetting Your Appetite
컴퓨터를 이용해 어떠한 작업을 자동화하기 위해서 우리에게 몇 가지 선택지가 있다. 예를 들어, Unix shell script나 Windows batch file, 그리고 C/C++/JAVA, 마지막으로 파이썬과 같은 것들이다.
하지만 Unix shell script나 Windows batch file은 파일 이동이나 텍스트 내의 데이터 변경과 같은 단순한 작업에는 적합하지만 좀 더 복잡한 GUI 어플리케이션엔 부적합하다.
그리고 C/C++/JAVA는 물론 훌륭한 언어지만, 컴파일을 위해서는 소스 코드를 작성하는 데 오랜 시간이 걸리고 초안 프로그램까지 개발하는 데 지칠 수 있다.
그러니, 파이썬을 쓰자. 파이썬은 C/C++/JAVA와 견주어도 좋은 언어일 뿐만 아니라, Unix shell script나 Windows batch file보다 더 많은 구조를 제공하기 때문에 위의 두 가지 방법에 대해 보완점을 가진다고 할 수 있다. 게다가, C보다 더 많은 에러 검사도 있고 다양한 자료형들이 있다.
그 외에도 아래와 같은 장점들이 있다.
2. Using the Python Interpreter
파이썬은 주로 /usr/local/bin/python[버전]
경로에 설치되어있는 경우가 많다. 그래서 shell에 /usr/local/bin/python[버전]
이라고 치면 인터프리터가 실행된다.
기본 프롬프트에서 EOF(end-of-file)문자를 입력하면 프롬프트를 빠져나갈 수 있다. 예를 들어, Unix에서는 ctrl+D
이고 Windows에서는 ctrl+Z
이다. 파이썬에서는 exit()
함수나 quit()
함수도 사용 가능하다.
파이썬에서는 GNU Readline이라는 라이브러리를 사용할 수 있는데, 이건 대화적행편집이나 히스토리 치환, 코드 보완 인터프리터의 행편집기능을 제공한다. 이걸 제공받고 있는지는 ctrl+P
를 눌러보면 알 수 있다. 삐-🔊 하는 소리가 들리면 사용가능하다. 하지만 아무런 프롬프트에 아무런 변화가 없거나 ^P
라고만 나오면 커맨드라인 편집기능은 사용할 수 없다. 그저 편집할 때는 백스페이스만 사용할 수 있다.
인터프리터를 작동시키기 위해서는 두 가지 방법이 있다.
python
>>> 여기서부터 대화형으로 작성해나간다
-c [커맨드]
: 명령어 뒤에 따라오는 인자를 코드로 실행한다. 대화형을 실행하지 않고 한 줄에 모든 걸 쓸 때 사용한다. e.g.) python -c "import math; print(math.sqrt(2))"
-m [모듈명]
: 모듈을 검색하고 __main__
모듈로서 실행한다. 이 때, 확장자명(.py)는 쓰지 않는다. 다만, 이것은 내장 모듈이나 확장 모듈에서는 사용할 수 없다(파이썬 모듈 파일을 갖고 있지 않기 때문). -i
: 스크립트 파일 실행 후 대화형 모드로 진입-h
: 도움말 출력-v
: 파이썬 버전 정보 출력python [인자(옵션)] [파일명].py # [파일명]이라는 이름의 파일이 인터프리터에 의해 실행된다.
파이썬에 인자(파이썬 파일 이름이나 옵션)를 넘기면 sys
모듈에서 읽어들인다. 그래서 argv
변수에 저장되는데, argv
는 최소 길이가 1이고 추가 인자가 없는 경우 sys.argv[0]
는 빈 문자열이 된다.
-c
가 사용되면 sys.argv[0]
는 -c
가 된다.-m [모듈명]
이 사용되면 sys.argv[0]
는 모듈의 절대경로명이 된다. 기본 프롬프트는 >>>
로 시작되며, 보조 프롬프트는 ...
로 보여진다.
>>> s = "This is string"
>>> if s :
... print(s)
...
This is string
파이썬은 기본적으로 UTF-8로 인코드 된 것을 다룬다. 만약 UTF-8 이외의 인코딩 방식을 사용하고 싶다면 파일 첫 줄에 아래와 같은 주석문을 추가해야 한다.
# -*- coding: [인코딩방식명] -*-
# -*- coding: cp1252 -*-
다만, 인터프리터를 지정해주는 유닉스 셔뱅줄이 들어가는 경우 두 번째 줄에 입력해준다.
#!/usr/bin/env python3
# -*- coding: cp1252 -*-
3. An Informal Introduction to Python
파이썬에서 주석은 #
로 시작하고 줄의 시작이나 공백이나 코드 뒤에 나올 수도 있다. 다만 문자열 리터럴 안에서는 주석으로 취급되는 것이 아닌 문자열로 취급된다.
다음은 공식문서 중 까먹기 쉬운 내용만 적어두겠다.
int/int
는 float으로 반환한다. 몫을 구하고 싶으면 //
, 나머지는 %
_
로 표현할 수 있다. \
를 써주면 된다. e.g.) 'bgly\'s blog'\
뒤에 오는 문자가 특수문자로 취급되게 하고 싶지 않으면 처음에 r
을 붙여서 raw string을 만든다.+
를 이용해 붙여줘야 한다. [:]
이렇게 전체를 슬라이스 하면 요청한 항목들을 포함하는 새 리스트를 얕은 복사본에 담아서 반환한다. 파이썬에서는 참조와 복사의 개념을 구분해서 알아두어여 한다. 특히, 복사에는 얕은 복사와 깊은 복사가 있다.
a = [[1,2],[3,4]]
b = a
위 코드의 경우, b는 a와 같은 배열을 참조할 뿐, 복사하지 않는다. 실제로 id를 찍어보면 같은 값이 나온다.
a = [[1,2],[3,4]]
b = a[:]
위 코드의 경우에는 얕은 복사가 이루어졌다. 단순 참조가 아니기 때문에 id를 찍어보면 다른 값이 나오며, 한 쪽 리스트에 append를 하면 다른 한 쪽에는 변경이 이루어지지 않는다.
import copy
a = [[1,2],[3,4]]
b = copy.deepcopy(a)
위 코드의 경우에는 깊은 복사가 이루어졌다.
여기서 중요한 것이 얕은 복사와 깊은 복사의 차이점인데,
간단한 예시는 아래와 같다.
import copy
a = [[1,2],[3,4]]
b = a[:]
id(a) # 2185012842368
id(b) # 2185012841792 id값이 다르다.
id(a[0]) # 2185012432768
id(b[0]) # 2185012432768 하지만 element의 id값은 같다.
c = copy.deepcopy(a)
id(a) # 2185012842368
id(c) # 2185013002048 id값이 다르다.
id(a[0]) # 2185012432768
id(c[0]) # 2185012844288 element의 id값도 다르다.
더 좋은 설명은 영상을 참고
용어집
python [인자] [파일명]
입력하면 인터프리터가 실행된다. 아무런 인자없이 python
만 입력하면 파이썬 인터프리터 shell이 열리고 프롬프트(>>>)가 나타난다. 리스트 객체 참조하는 원리 슬라이스에 대입하는 것도 가능한데, 리스트의 길이를 변경할 수 있고, 모든 항목을 삭제할 수조차 있습니다:
요 부분
얕은 복사 깊은 복사 부분
범위를 벗어나는 슬라이스 인덱스 처리
-m 옵션 쓰는 법