자유/대외 활동

패스트캠퍼스 프로그래밍첫걸음 학습후기 ) #11.9주차 학습후기, 파이썬 프로그래밍 시작

Chipmunks 2019. 5. 12.
728x90


패스트캠퍼스 대학생 서포터즈 프로그래밍 첫걸음 11번째 학습 후기다.


이제 올인원패키지 프로그래밍 첫걸음 마지막 파트인 파이썬 진도에 들어갔다.


올인원패키지 프로그래밍첫걸음 파이썬 파트에서 실무에 자주 쓰이는 라이브러리


먼저 소개하고 설치해보는 실습을 하는 점이 다른 파이썬 강의와 차별점이다.


아직 프로그래밍 첫걸음 파이썬 파트에서 몇 강의 안 들었지만


앞서 프로그래밍 기본 문법들을 실습했기 때문에 불필요한 부분을 바로 건너뛰었다.


그래서 생각보다 파이썬 프로그래밍 진도가 빨랐다.


실무에서 다루는 핵심 내용만 집중적으로 다루기 때문에


시간 낭비 없이 강의에 집중할 수 있었다.


빠르게 파이썬으로 웹 크롤러까지 만들기 위해 여러가지 라이브러리들도 다루는 내용이 들어가서


초반에 앞서 배운 기초 문법 부분들은 빠르게 나가는 듯하다.


9주차에 배운 주제들은 다음과 같다.


9주차 진도에서는

  • 02. 파이썬 기초
  • 과제1. pip로 각종 라이브러리 설치
  • 03. 파이썬 객체 이해&클래스 선언
  • 과제2. 사용자 정의 클래스 선언하기
  • 04. 모듈과 패키지
  • 과제3. 모듈 만들고 import 해보기
  • 05. 컬렉션
  • 과제4. 리스트 딕셔너리 사용하기

를 학습했다.

파이썬 객체와 모듈은 보통 파이썬 책에서 중간 부분에 해당하는 내용이다.

그리고 한 강의가 10분 내외라는 것을 감안하면 진도라 빠르다는 것을 알 수 있다.

그리고 과제로 빠르게 배운 내용을 실습할 수 있어서 좋았다.

02. 파이썬 기초

Python(파이썬)은 인터프리터 언어자 객체 지향 언어다.

그리고 프로그래밍 문법이 직관적이고 가독성이 좋다.

파이썬의 장점은 다음 세 가지다.

1. 다양한 표준, 써드파티 라이브러리들이 많다.
2. 다양한 플랫폼(환경)에서 동작한다.
3. 충분히 제공되는 API 문서가 잘 업데이트 된다.

파이썬에서는 데이터 분석, 머신 러닝, 웹 서버, 공학 관련 라이브러리로 유명하다.
이런 라이브러리들이 충분히 제공되기 때문에 인기가 많다.

그리고 인터프리터 언어이기 때문에, 소스 코드를 해석할 수 있는 인터프리터만 설치하면 다양한 플랫폼에서 작동한다.

파이썬 버전도 잘 업데이트 될 뿐 아니라 그에 따라 문서도 잘 제공한다.


파이썬 패키지 매니저로 PIP 가 있다.
PyPI 는 패키지 저장소를 뜻한다.

virtualenv 라는 것을 이용해서 프로젝트마다 독립된 환경을 구성할 수 있다.
이는 버전 충돌을 방지하기 위함이다.

파이썬 패키지 매니저로 VirtualEnv 를 설치할 수 있다.

pip3 install virtualenv

자세한 가상 환경 실습은 과제에서 다룬다!

이제 파이썬을 실행해보자.

터미널 내지는 명령 프롬프트에서 파이썬 인터프리터를 열어

기본 출력 함수인

print("Hello")

를 인터프리터에 입력하여 잘 출력되는 것을 확인할 수 있다.



Mac OS X 환경에서는 python2 버전이 기본적으로 깔려 있다.


강의에서 소개하는 python 명령어는 python2 버전에 해당된다.


따라서 이를 구분하기 위해 python3 명령어로 python 3 버전 이라는 것을 명시해야한다.


그에 따라서 패키지 매니저 pip 또한 pip3 명령어로 구분해야 한다.


[ QUIZ ]


1. 파이썬은 '인터프리터' 언어이다.

2. 'PIP'을(를) 통해 파이썬 패키지를 관리할 수 있다.

3. 'VirtualEnv'을(를) 통해 프로젝트마다 독립적인 관리를 할 수 있다.



과제1. pip로 각종 라이브러리 설치

pip 패키지 매니저를 실습한다.

첫 번째 문서를 참고하면 VirtualEnv 를 적용해볼 수 있다.

아래 방법으로 virtualenv 를 프로젝트 폴더에 적용할 수 있다.

python3 -m venv .venv



명령어로 가상환경 폴더를 만든다.

그 전에 pip3 install virtualenv 로 VirtualEnv 패키지를 설치한다.

가상환경 설치 명령어는 다음과 같다.

virtualenv -p python .venv


그리고 가상환경을 실행하는 명령어는 다음과 같다.

. .venv/bin/activate

그리고 가상환경의 인터프리터를 VS Code 에서 설정할 수 있다.



검색 결과로 마지막에 나오는 .venv 가상환경이 실행된 인터프리터를 선택한다.


만약 다른 프로젝트로 가서 가상 환경을 실행할 경우에는


이미 실행 중인 가상환경을 비활성화 시켜야 한다.


deactivate 명령어로 실행 중인 가상환경을 비활성화시킬 수 있다.




이외에 강의에서 직접 다루지 않는 파이썬 문법을 다룬다.

코드 블록, 기본 자료형, 연산자, 조건문, 반복문이 있다.

코드 블록은 자바스크립트에서는 중괄호로 구분했지만

파이썬에서는 스페이스 네 번 또는 탭으로 구분한다. 그리고 코드 블록을 시작하기 위해 콜론(:)을 넣습니다.



파이썬에서 변수를 생성할 때 아무런 키워드를 넣지 않는다. 그리고 자바스크립트와 마찬가지로 변수에 할당하는 값에 따라 해당 변수의 타입이 결정된다. (타입 추론 기능)



연산자는 자바스크립트와 대체로 비슷하다.


자바스크립트에서 썼던 ||, && 는 or, and 키워드로 대체된다.



그리고 멤버쉽  연산자가 따로 존재한다.


in, not in 이 그 예다. 컬렉션에 해당 값이 있는지 확인할 때 쓴다.


그 다음은 조건문이다.


자바스크립트에서는 if 문과 switch 문이 있지만


파이썬에서는 if 문만 있고 switch 문은 없다.



자바스크립트에서의 else if 구문은 파이썬의 elif 구문으로 대체된다.


그리고 코드 블록은 앞서 설명했던 대로 콜론(:)으로 하는 것을 확인할 수 있다.


pass 키워드를 지원하는데, 특정 조건을 만났을 때 아무것도 실행하지 않고 조건문을 빠져나온다는 의미다.


아래 예제 코드에서 위에서 봤던 in, not in 멤버쉽 연산자를 사용하는 것을 볼 수 있다.


코드가 직관적이라 in 과 not in 이 무엇을 의미하는지 알 수 있다.


 in 키워드는 배열에 값이 있으면 true 이고 값이 없다면 false 가 나온다,


두 번째 문서에서 각종 라이브러리들을 설치한다.

윈도우 운영체제는 사전에 자바 SDK와 Jpype를 설치해야한다.

PIP 으로 아래 패키지들을 설치했다.

1. requests : 웹 자원 요청을 위한 다양한 기능을 제공하는 패키지
2. bs4 : 다양한 형식으로 웹 자원을 파싱(Parsing)하고 분석할 수 있게 해주는 패키지
3. openpyxl : 액셀 처리를 해주는 패키지
4. numpy : 다양한 수학 관련 처리를 할 수 있는 패키지. 뒤에 소개될 konlpy 패키지 사용을 위해 필요하다.
5. konlpy : 한글 분석과 처리를 할 수 있는 패키지. 먼저 numpy 패키지를 설치해야 한다.

아래 코드에 오류가 없으면 제대로 설치가 된 것이다.

1
2
3
4
5
6
from bs4 import BeautifulSoup
from openpyxl import load_workbook
from konlpy.tag import Okt
import requests
 
print("안녕하세요.")
cs


03. 파이썬 객체 이해&클래스 선언

객체란 대상(Objects)을 추상화(Abstraction)한 것이다.



자바스크립트에서 봤던 고양이 슬라이드다.

여기서 파이썬의 특징을 알 수 있다.

파이썬은 모든 것이 객체로 이루어져있다.

파이썬에서 클래스라는 개념이 등장한다.

클래스는 객체(Object)를 추상화하여 담는 틀이다.

class 클래스명():

으로 클래스를 선언한다.

__init__(self): 으로 생성자 메소드임을 알 수 있다.

클래스 안에 객체가 사용하는 인스턴스 메소드를 만들기 위한 함수는 다음과 같다.

def 메소드명(self, 인자, ...):

일반 파이썬 함수와 다른 점은 제일 첫 인자에 self 가 들어간다는 점이다.

클래스는 일종의 틀이기 때문에 클래스에서 선언한 함수에서

나중에 객체를 만들었을 때 그 객체를 불러오기 위한 주소가 필요하다.

그게 self 이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Cat():
    species = "russian blue"
 
    def __init__(self, name):
        self.name = name
 
cat1 = Cat("냥1")
cat2 = Cat("냥2")
 
print(cat1.species)
print(cat2.species)
 
print(cat1.name)
print(cat2.name)
 
// russian blue
// russian blue
// 냥1
// 냥2
cs

생성자는 객체가 생성되었을 때 실행된다. 여기서 객체 마다 가지는 인스턴스 변수들을 초기화한다.

species 는 모든 객체가 가지고 있는 클래스 변수다.

파이썬에서 객체를 어떻게 다루는지 위 코드로 알 수 있다.

[ QUIZ ]
1. 파이썬은 모든 것이 '객체'로 표현된다.
2. '클래스'는 대상을 추상화하여 담는 틀이다.
3. '클래스 속성'은 공유 개념이고, '인스턴스 속성'은 개별 개념이다.
4. 'self' 키워드는 메소드의 첫 번째 인자로 와야 한다.

과제2. 사용자 정의 클래스 선언하기

앞서 배운 클래스 개념을 빈 칸을 채워 실습하는 과제다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class User():
    species = "영장류"
    
    def __init__ (self, name, gender, city):
        self.name = name
        self.gender = gender
        self.city = city
    
    def get_user_info(self):
        return "이름은: " + self.name + "\n성별: " + self.gender + "\n사는 곳: " + self.city;
    
    def get_species(cls):
        return "사람은 모두 " + cls.species + "입니다."
 
 
user = User("문성재""남성""수원")
print(user.get_user_info())
print(user.get_species())
 
'''
코드 실행 결과
이름은: 문성재
성별: 남성
사는 곳: 수원
사람은 모두 영장류입니다.
'''
cs

클래스에서 클래스 메소드를 선언할 때는 self 대신 cls 가 들어가는 것을 확인할 수 있다.

메소드 안에서 클래스 변수에 접근할 때는 cls 변수로 접근할 수 있다.

04. 모듈과 패키지

모듈(Module)이라 파이썬 코드를 하나로 묶어서 사용(하나의 *.py)하는 것을 말한다.

같은 디렉토리 안에 sub.py 파일과 main.py 파일을 작성한다.

- sub.py

1
2
def sum(x, y):
    return x + y
cs

- main.py

1
2
3
4
5
6
7
8
import sub
print(sub.sum(11))
 
from sub import sum
print(sum(11))
 
from sub import sum as s
print(s(11))
cs

전체 파이썬 모듈을 불러올 수 있다. 파이썬 모듈 중 원하는 함수나 객체를 불러올 수 있다.
그리고 그것에 as 키워드로 별칭을 붙일 수 있다.

파이썬에서 모듈을 찾는 순서는 다음과 같다.

1. 현재 Directory
2. 환경변수에 지정된 경로
3. 파이썬 라이브러리 경로

이제 우리가 전에 설치도 해봤던 패키지에 대해 알아보자

패키지(Package)는 여러 개의 모듈들의 집합이다.

from 패키지 import 모듈

로 패키지 안에 있는 여러 개의 모듈 중 하나의 모듈을 가져올 수 있다.

패키지 불러오는 것을 실습하기 위해 디렉토리를 다음과 같이 구성한다.


package 디렉토리를 생성하고 그 안에 pck.py 파일을 만들었다.


그 pck.py 모듈에는 앞서 만든 sum 함수가 있다.


이제 main.py 파일에서 패키지에 있는 모듈을 가져와보자.


1
2
3
4
5
from package import pck
print(pck.sum(12))
 
from package import pck as p
print(p.sum(12))
cs

모듈에서 객체를 가져올 때와 같이 as 키워드로 별칭을 정할 수 있다.

[ QUIZ ]
1. '모듈'은 하나의 *.py 파일이다.
2. 모듈을 불러오기 위해 'import'을 사용한다.
3. '패키지'는 여러 개의 모듈 집합이다.

과제3. 모듈 만들고 import 해보기

패키지와 모듈을 만들고 불러오는 실습을 했다.

먼저 디렉토리를 다음과 같이 작성한다.


user.py 는 이전에 작성한 User 클래스다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
'''
작성 부분
'''
from package.sub.user import User
 
user = User("홍길동""남성""대한민국")
 
print(user.get_user_info())
print(user.get_species())
 
'''
코드 실행 결과
이름은: 홍길동
성별: 남성
사는 곳: 대한민국
사람은 모두 영장류입니다.
'''
cs


상단에 User 클래스를 불러오는 코드를 작성했다.


package.sub.user 모듈에서 User 객체를 가져왔다.


만약에 from package.sub import user


로 불러왔다면 User 객체를 가져온 것이 아니라 user.py 모듈을 가져온 것이다.


이 때 User 클래스를 사용하려면 user.User(...) 으로 사용해야 한다.


그러나 원본은 그렇지 않았으므로 객체 자체를 가져왔다.



05. 컬렉션

파이썬의 기본 자료형은 앞서 과제 문서에서 확인하였으나 정리를 하자면 다음과 같다.

1. 정수형(int)
2. 실수형(float)
3. 논리형(bool)
4. 문자열(string)
5. None(null)

파이썬에는 컬렉션이라는 자료형이 있다. 여러 개의 값을 다룰 때 이용한다.
파이썬 컬렉션의 종류는 다음과 같다.

1. 리스트(List)
2. 딕셔너리(Dictionary)
3. 튜플(Tuple)
4. 셋(Set)

첫 번째 리스트를 알아보자.

리스트(List)는 동적 배열(Mutable type)이다. 바로 코드로 알아보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 리스트 생성
num_list = [12345]
 
# 인덱스 0부터 시작
print(num_list[0], num_list[-1])
 
for i in num_list:
    print(i)
 
# 슬라이싱 (범위) 시작:끝-1
print(num_list[0:3])
print(num_list[1:])
 
# 리스트 끝에 값 추가
num_list.append(6)
num_list.append(7)
 
# 리스트 삭제
# del num_list[-1]
del num_list[len(num_list) - 1# 맨 마지막 삭제
 
# 리스트 인덱스 접근
num_list[0= 0
 
print(num_list)
cs

특이한 점은 음수 인덱스다. 음수 인덱스로 마지막 인덱스부터 값에 접근할 수 있다.

마지막은 -1, 그 전은 -2 이런 식이다.
인덱스 범위는 다음과 같다.
-N -N+1 ... 0 ... N-1

두 번째로 딕셔너리(Dict)이다.
딕셔너리는 키(keys)와 값(values) 쌍으로 이루어져 있다.

예제 소스는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 키와 값으로 이루어진 딕셔너리 만들기
num_dict = {"m""Moon""s""Seong"}
 
# 딕셔너리 키로 값 가져오기
print(num_dict["m"])
 
# keys(), values()
for key, val in num_dict.items():
    print(key, val)
 
# 키의 존재 유무 확인. 없으면 추가, 있으면 수정
num_dict["j"= "Jae"
 
# 딕셔너리 삭제
del num_dict["m"]
 
# 키로 값 가져오기
print(num_dict.get("k")) # 입력받은 키가 딕셔너리에 없다면 None 반환
cs


[ QUIZ ]

1. '리스트'는 동적 배열로서 인덱스로 접근 가능하다.
2. '딕셔너리'는 키와 값 형태로 구성되며, 키를 통해 값에 접근한다.
3. 'in' 연산자는 조건에 맞는 값을 하나씩 반환한다.

과제4. 리스트 딕셔너리 사용하기

문서를 확인하여 기초 정렬 알고리즘을 실습하는 과제다.

문서가 정말 자세하게 써져있다.

컬렉션 복습을 물론 정렬 알고리즘과 그 중 하나인 삽입 정렬을 설명한다.



삽입 정렬 실습 코드는 다음과 같다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
num_list = [15432]
 
print("[Before]")
for i in num_list:
    print(i, end= ' ')  # 1, 5, 4, 4, 5
print()
 
for i in range(1len(num_list)):
    j = i-1  # 삽입할 요소보다 앞의 인덱스
    key = num_list[i]  # 삽입할 값
    while num_list[j] > key and j >= 0:  # 반복문 조건 비교
        num_list[j+1], j = num_list[j], j-1  # 값을 대입
    num_list[j+1= key  # 요소 삽입
 
print("[After]")
for i in num_list:
    print(i, end= ' ')  # 1, 2, 3, 4, 5
cs


리스트의 두 번째 인덱스부터 마지막 전 인덱스까지 반복문을 돌며

그 전 인덱스부터 첫 번째 인덱스까지 반복문으로 값을 비교하여 바꾼다.

마지막에 삽입할 위치에 요소를 삽입한다.



요즘 유행한다는 파이썬을 실습해봤다.


파이썬은 문법이 간단하다는 장점이었는데


직접 실습해보니 문법이 굉장히 간결한 편이라는 것을 체감했다.


어서 다양한 라이브러리들을 실습해보고 싶다.







댓글