Python - 00 (Python의 장점 및 자료형)

Python

왜 Python을 배워야 할까?

  • 프로그래밍 언어를 배우고 싶은데 어떤 언어를 배우면 될까?
    • C, C++, C#, Java, Javascript, Python, Ruby, C#, Go, Rust, Scala Perl, Obj-C, PHP, R, Julia 등
    • 여러가지 언어가 존재하지만 가장 진입장벽이 낮다.

Python의 장점

  • Python 언어의 장점
    • 문법이 간결
    • 다양한 운영체제 지원
    • GUI Application 개발(PyQT)
    • 범용 언어(네트워크, 웹, 데이터 분석, 머신러닝 등)
    • 방대한 라이브러리 지원
      • data science : Numpy, Pandas, Matplotlib, scikit-learn, statsmodels, tensorflow, keras, Pytorch
      • web : Django, Flask 등
      • crawling : scrapy, BeautifulSoap, requests 등

Python은 어떤 언어인가?

  • Python is an interpreted high-level programming language for general-purpose programming.wikipedia)
  • Python의 특징

    • 플랫폼에 독립적
    • 인터프리터 언어
    • 객체지향적
    • 동적타이핑
  • 위의 용어에대해 잘 모르겠다면, 먼저 컴퓨터에 대해 알아보자.

컴퓨터를 이해해 보자!

  • 컴퓨터는 계산을 수행하는 기계이다.

  • 컴퓨터를 구성하는 기본 요소

    • CPU(Central Processing Unit)
    • RAM(Random Access Memory)
    • ROM(Read-Only Memory)
  • OS(Operating System : 운영체제)

    • Kernel
      • 하드웨어를 컨트롤하는 소프트웨어 (운영체제의 핵심)
    • CPU, RAM, ROM 자원을 사용하는 방법을 정의
  • App(Application : 어플리케이션)

    • OS 기반 응용 프로그램
    • 대부분의 프로그래밍의 영역

컴퓨터 구조

컴퓨터에서 프로그램의 동작원리는?

  • CPU, RAM, ROM은 0과 1밖에 모른다는 사실은 상식적으로 다들 알고 있을 것이다.

  • 그런데, 프로그램 언어는 숫자와 알파벡과 특수기호를 사용한다. 이는 각 언어의 Compiler가 코드를 0과 1의 이진수로 변환하여 주는 컴파일러 언어이기 때문이다.

  • 컴파일러 언어

    • 모든 코드를 컴파일링 후에 컴퓨터에서 처리 -> 처리속도가 빠르지만 프로그램 실행을 위해 컴파일링 시간을 기다려야한다.
  • 인터프리터 언어

    • 한줄씩 코드를 컴파일링 하면서 컴퓨터에서 처리 -> 처리속도가 느리지만 컴파일링 시간 없이 바로바로 프로그램을 실행한다.
  • 결론적으론, 코드를 잘 만들면 컴퓨터가 효율적으로 일할 수 있다는 것이다!!!

Computer와 프로그래밍 언어의 상호작용 이미지

Python은 어떤 언어인가?

  • 플랫폼에 독립적

    • 어떠한 종류의 OS에도 같은 문법을 사용할 수 있다.
    • 즉, Window, Mac OS, Linux등 여러 OS에서 사용가능하다는 의미이다.
  • 인터프리터 언어

    • 한줄씩 컴파일링 하면서 코드를 수행한다.
  • 객체지향적

    • 실제 세계를 모델링하여 공통적인 기능을 묶어서 개발하는 방식
    • 추상화(abstraction), 캡슐화(encapsulation), 상속(inheritance), 다형성(polymorphism)의 특징을 갖는다.
    • 참고로, 반대의 개념은 절차지향이다.
  • 동적타이핑

    • 변수 선언시 데이터 타입을 지정해 주지 않아도 데이터에 따라서 자동으로 타이핑된다.

Python의 종류는?

  • Cpython

    • C로 만들어진 파이썬
    • 우리가 코딩하는 부분은 인터프리터이지만 안에서는 다 컴파일러언어인 C로 동작되어 속도가 빠르다. 그러므로 인터프리터 언어가 갖는 속도가 느리다는 점을 보완할 수 있어 데이터 분석에 용이하다.
  • Jython

    • Java로 만들어진 파이썬
  • IronPython

    • C#으로 만들어진 파이썬
  • Pypy

    • Python으로 만들어진 파이썬
    • Cpython 보다 빠르게 수행되는 것을 목표로 한다. http://pypy.org/

프로그래밍을 한다는 것은?

  • 컴퓨터와의 효율적인 커뮤니케이션으로 자신이 생각하는 목적을 컴퓨터가 잘 처리할 수 있도록 시스템의 구조를 잘 설계하고 코드를 작성하는 것이다.

1. PEP(Python Enhance Proposal)

Python 기본 핵십 이해하기

값(value) 처리

  • Python은 실행되는 모든것을 객체로 관리하므로 객체를 일관성을 가지고 평가할수 있는 규칙을 도입했기 때문에 모든 것을 값(value)으로 처리한다. 값을 재사용을 하기 위해선 변수에 저장해야한다.

  • 위의 설명이 아직 까진 잘 이해가 가지 않을 것이다.

literal(리터럴)

  • literal이란 프로그래밍 언어로 작성된 코드에서 값을 대표하는 용어이다. 예를 들면, Python에서는 기본으로 사용되는 정수, 부동 소수점 숫자, 문자열, Boolean 등의 객체로 평가되며 모든 것을 값으로 처리하고 이를 통해 결과를 출력한다.
정수형 리터럴값 정의
1
1
실행결과
1
1

Expression(표현식)

  • literal은 단순히 하나의 값을 처리한다. 여러 개의 값을 하나로 묶어서 처리하는 방법을 표현식이라고 한다. 표현식은 프로그래밍 언어가 해석하는 하나 이상의 명시적 값, 상수, 변수, 연산자 조합이고 함수도 실행되면 하나의 값이 되어 이를 조합해도 표현식으로 인식한다. 표현식을 평가해서 실행될 때에는 우선순위 및 연관 규칙에 따라 해석하여 실행되며 평가된 결과는 하나의 값인 literal로 표현된다. 표현식 처리순서는 좌측부터 우측으로 가며 평가하고 () 연산자를 최우선으로 처리된다.
표현식 평가
1
3 + 4
위의 표현식 결과
1
7
표현식 평가
1
"문자" + "열"
위의 표현식 결과
1
"문자열"

condition expression(조건식)

  • 표현식에서 특정 조건문 등에 제한적으로 사용되는 것을 조건식이라고 한다. 주로 특정 문장인 if문이나 while 문에서 처리된다. 처리된 결과 값은 Boolean 값을 갖는다.
조건식 평가
1
bool("")
조건식 평가 결과
1
False

이름(name) 처리

  • 프로그램을 작성한다는 것은 값들을 저장하고, 다음에 필요할 경우 이를 읽어와서 계산하고 다시 저장해서 처리한다는 뜻이다. 프로그램에서 이런 값들의 변화를 저장해서 관리하는 기준이 필요하고, 파이썬에서는 이를 위해 Name space를 만들어서 관리한다. 이름으로 지정할 요소들은 변수(variable), 함수(function), 클래스(class), 모듈(module), 패키지(package)등 이다. 이 중에 변수를 빼면 다 객체로 사용되므로 값으로 관리되는 것을 알 수 있다.

  • 파이썬은 변수, 함수, 클래스 등에 대한 이름을 구별하지 않으므로 변수, 함수, 클래스 등의 명명 규칙을 명확히 해서 각각을 이름으로 식별할 수 있어야 한다.

예약어(keyword)

  • 파이썬에서 변수, 함수, 클래스 등은 예약어와 동일한 이름으로 정의할 수 없고 파이썬 내부 문법 규칙에서만 사용할 수 있도록 정의한 것을 예약어라고 한다.

  • 파이썬에서 모듈(module)은 프로그램을 관리하는 하나의 단위이고 이 내부에 변수, 함수, 클래스 등을 지정해서 관리한다. 파이썬 내부의 예약어를 보여주기 위해 하나의 모듈로 관리하며 그 모듈의 이름이 keyword이다.

Keyword 모듈 알아보기
1
2
3
4
from pprint import pprint
import keyword

pprint(keyword.kwlist, width=60, compact=True)
Keyword 모듈 리스트
1
2
3
4
5
6
['False', 'None', 'True', 'and', 'as', 'assert', 'async',
'await', 'break', 'class', 'continue', 'def', 'del',
'elif', 'else', 'except', 'finally', 'for', 'from',
'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal',
'not', 'or', 'pass', 'raise', 'return', 'try', 'while',
'with', 'yield']

명명 규칙(naming convention)

  • 파이썬은 하나의 프로그램을 작성하는 기준이 모듈이므로 모듈 단위로 이름을 관리할 수 있는 하나의 영역이 존재한다. 이렇게 모듈 단위로 관리하는 하나의 이름 관리 영역을 전역 네임스페이스(global name space)라고 한다.

  • 변수와 함수 등이 동일한 이름으로 정의될 경우 최종적으로 할당된 값을 갖으므로 최대한 명명 규칙을 준수해야 버전이 변경될 경우에도 일관성 있는 규칙을 준수할 수 있다.

식별자 : Identifiers

변수, 함수, 클래스, 모듈 등을 구분하기 위해 사용되는 이름을 식별자라고 합니다. 이 식별자는 몇가지의 규칙이 있습니다.

  • 대소문자를 구분
  • 소문자(a-z), 대문자(A-Z), 숫자(0-9), 언더스코어( _ ) 사용 가능
  • ( _ )를 제외한 특수문자는 사용 불가
  • 가장 앞에 ( __ ) 사용 지양 (reserved global variable)
  • 가장앞에숫자사용불가
  • 예약어사용불가
  • 예약어
    • Fasle, class, finally, is, return, None, continue, for, lambda, try, True, def, from, nonlocal, while, and, del, global, not, with, as, elif, if, or, yield, assert, else, import, pass, break, except, in, raise
파이썬 권장 명명 규칙: 모듈, 패키지
  • 모듈 이름은 짧아야 하고, 전부 소문자로 작성하는 것을 권장한다. 가독성을 위해 언더스코어( _ )를 쓸 수 있다.

  • 패키지 이름 또한 짧아야 하고, 전부 소문자로 작성하지만, 언더스코어( _ )는 권장하지 않는다.

파이썬 권장 명명 규칙: 클래스
  • 클래스 이름은 Capitalized words 형식(단어를 대문자로 시작)을 따르며, 카멜 표기법도 사용이 가능하다.
파이썬 권장 명명 규칙: 상수, 변수, 함수, 메서드
  • 변수, 함수와 메서드의 이름은 원칙적으로 소문자여야하고, 가족성을 위해서 언더스코어( _ )단어로 쓰는 것을 권장한다.
    • 보호 속성일 때는 맨앞에 _ 를 추가적으로 붙인다.
    • 키워드와 동일 변수일 때는 맨 뒤에 _ 를 추가적으로 붙인다.
    • 비공개 속성일 때는 맨 앞에 __ 하나를 붙인다.
    • 스페셜 속성일때는 앞과 뒤에 __ 하나씩 붙인다.

Variable(변수)

  • 파이썬에서 변수는 다른 언어의 변수와 차이가 크다. 동적타이핑의 특성을 지니므로 변수에 특정한 자료형 등을 배정하지 않는다는 점이다. 변수는 단순히 이름만 지정하고 이 변수에 값을 할당해서 사용하므로 다양한 자료형이 할당된다.

  • 파이썬에서 변수는 단순히 값을 보관하는 장소가 아니라 값들의 임시 저장 장소로만 사용한다. 프로그램 내에서 변수는 단순히 이름으로 구별하는 것이고 변수에는 값인 객체가 어디에 있는지에 대한 주소인 reference만 보관한다. 즉, 변수는 단순히 자료형으로 만들어진 객체에 대한 주소만을 관리하는 역할을 수행한다.

1
2


1
2