[Python]공식문서 튜토리얼1-3

포동동·2023년 5월 3일
0

[Pythonic]

목록 보기
1/4

🐍 파이썬 스터디

파이썬 공식문서를 기반으로 자습서(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/intfloat으로 반환한다. 몫을 구하고 싶으면 //, 나머지는 %
  • int와 float과 같이 다른 자료형의 피연산자를 갖는 연산자는 int 피연산자를 실수로 변환한다.
  • 대화형 모드에서는, 마지막에 출력한 표현식을 변수 _로 표현할 수 있다.

🔠 문자열 🔠

  • 따옴표를 이스케이핑 할 떄는 \를 써주면 된다. 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)

위 코드의 경우에는 깊은 복사가 이루어졌다.

여기서 중요한 것이 얕은 복사와 깊은 복사의 차이점인데,

  • 얕은 복사는 새 객체를 만들어내고 원본 객체 내의 element들에 대한 참조를 그대로 삽입하고,
  • 깊은 복사는 새 객체를 만들어내고 원본 객체 내에 있는 객체에 대한 복사를 재귀적으로 삽입한다.

간단한 예시는 아래와 같다.

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값도 다르다. 

더 좋은 설명은 영상을 참고


용어집

  • interactive(대화형)
    • 인터프리터 프롬프트에서 사람과 대화하듯 원하는 문장이나 표현식을 쓰고 그것을 실행시킬 수 있는 방식이다. shell에 python [인자] [파일명] 입력하면 인터프리터가 실행된다. 아무런 인자없이 python만 입력하면 파이썬 인터프리터 shell이 열리고 프롬프트(>>>)가 나타난다.
  • interpreted(인터프리티드)
    • 파이썬은 기본적으로 인터프리터 언어이다. 컴파일 언어인 C나 JAVA 등과 같은 컴파일 언어와는 다르게 실행 파일 없이도 파이썬은 인터프리티드 될 수 있다.
    • 파이썬은 왜 컴파일 없이도 실행이 될까?
      • 파이썬 코드는 실행되기 전에 파이썬 인터프리터가 바이트코드로 변환된다. 이 바이트코드는 파이썬 가상 머신(PVM)에서 실행되는데, 이 가상 머신은 파이썬 코드를 실제 기계어로 번역하여 실행하는 역할을 한다.
      • 컴파일 언어 : 컴파일 언어는 소스코드를 컴파일러라는 프로그램을 통해 기계어로 변환하는 작업을 거쳐 실행 파일을 만들어 낸다. 이 실행 파일은 운영체제에서 직접 실행되고, 소스코드는 컴파일 후에는 필요하지 않게 된다.
      • 인터프리터 언어 : 소스 코드를 실행 시점에 한 줄씩 해석해서 실행하는데, 그 과정에서 인터프리터는 소스 코드를 바이트코드 혹은 기계어로 변환하고 이 코드는 메모리 상에서 바로 실행된다.

질문)
  1. 리스트 객체 참조하는 원리 슬라이스에 대입하는 것도 가능한데, 리스트의 길이를 변경할 수 있고, 모든 항목을 삭제할 수조차 있습니다: 요 부분

  2. 얕은 복사 깊은 복사 부분

  3. 범위를 벗어나는 슬라이스 인덱스 처리

  4. -m 옵션 쓰는 법

profile
완료주의

0개의 댓글

Powered by GraphCDN, the GraphQL CDN