본문 바로가기

Python

Python Basic

<Python Basic>

    0. Python Overview

    1. Python Environment

    2. Variable & Operator

    3. Data Structure


Python 특징

 

  • 플랫폼 독립적인 인터프리터 언어

코드와 인터프리터만 있으면 어디서든 실행 가능.

 

인터프리터 언어는 컴파일 언어와 대조적인 언어로 대표적으로 Python, JAVA Script 등에서 쓰인다.

C와 C++ 등에서 쓰이는 컴파일 언어와 다르게, 인터프리터 언어는 작성된 코드를 MAC, Windows, Linux 등 다양한

시스템에 인터프리터기를 이용해 어디서든 호환이 가능하다는 장점이 있다.

다만, 중간에 인터프리터기가 존재해 컴파일 언어보다 실행이 느리다는 단점이 있지만, 요즘에는 많이 개선되어 차      이가 줄어들고 있다.

 

 

  • 완전 객체 지향 언어

class나 method 등을 포함한 Python의 모든 것은 객체로 이루어져 있다.

 

 

  • 동적 타이핑 언어

코드를 실행하던 중에 타이핑이 가능하다.

 

 

  • 쉬운 문법과 다양한 기능

Python은 다른 언어에 비해 문법 자체가 간결하고 쉬워서 높은 생산성을 가지고 있다는 장점이 있다.

 

 

  • 다양한 라이브러리

Python은 다양한 라이브러리를 쉽게 설치 및 관리할 수 있는데, 수많은 사람들이 다양한 라이브러리를 기여 및 공개하고 있어서 접근성이 좋다. 

 

 

  • 널리 쓰임

현재 Python은 널리 사용되고 있는 언어 중 하나로, 인터넷에서 관련 문서 및 도움을 받기 유리하다.

또한, Python은 분야를 가리지 않고 다양한 목적으로 사용 가능하다.

특히, Python은 데이터 분석 및 가공에서 타 언어에 비해 압도적으로 많이 쓰인다.

 

 

"Life is short, You need Python"

 


Python 환경 설정

 

Window: 친숙함, 워드, 한컴 사용 가능. 하지만, 특정 라이브러리 설치 어려움

Linux: 서버 호환 쉬움. 라이브러리 설치 용이, 무료. 하지만, 대부분의 사용자가 친숙하지 않은 편.

MAC: 서버 사용 용이. 하지만, 가격이 비쌈.

 

 

Window 환경에서 서버 호환성 높이는 방법

  • 가상 환경 사용(Virtual Box)
  • WSL 사용 → 가장 추천
  • colab, goormide, 클라우드 기반 서비스 사용

 

Integrated Development Environment(IDE)

  • Visual Studio Code
  • PyCharm

 

Web-based IDE

  • Jupyter Notebook
  • Jupyter Lab

 

Cloud-based IDE

  • Google Colab
  • Goorm IDE

 

다양한 외부 라이브러리 사용 자동화 도구

  • PIP + Virtual env: Python 기본 패키지 관리 프로그램
  • Anaconda3: 기계학습 및 수치해석 특화 패키지 관리 프로그램

 

 

Best Local 환경

1. Window + WSL + VsCode + Anaconda

장점: Window와 Linux를 아우르는 개발 환경

단점: 윈도우 11에서만 GPU 지원, 매우 복잡한 설치

 

2. (Local) Window + VsCode/PyCharm (SSH 외부 서버)→ (Server) Linux + Anaconda

장점: 고성능의 서버자원 이용 가능

단점: 서버 필요

 

3. Window + Chrome/Firefow (web)→ Colab

장점: 대안이 없는 사람들을 위한 개발 환경으로 매우 쉽고 간단, 따로 설치할 것이 없음

단점: 패키지 관리가 매우 불편, 12시간 Session 만료, 실개발 환경으로 권장하지 않음

 

 

Jupyter

파이썬의 Interactive한 Shell 환경을 그대로 살릴 수 있는 Ipython 커널을 기반으로 한 Interactive 한 파이썬 Shell 프로그래밍

  • .ipynb 파일 확장자
  • Jupyter라는 웹 기반 IDE를 기반으로 실행
  • VsCode 및 PyCharm, Colab에서 사용 가능
  • 미디어, 코드, 수식 등을 하나의 문서 형태 표현 가능

 


Variable & Operator

 

변수

  • 값을 저장하는 공간('=' 연산자로 대입 연산)
  • 모든 변수는 메모리 주소를 가르친다. (모든 것은 포인터다)
  • 변수 명 

     - 선언한 변수에 특정 공간이 생기는 개념이 아님

     - 필요하면 공간을 만들고 변수명을 붙이는 격

     - 알파벳, 숫자, 언더스코어(_)로 선언

       (언더스코어는 알파벳 취급하기 때문)

     - 숫자로 변수명을 시작할 수 없음

     - 변수명은 그 변수의 특징이 잘 살아 있게 작성

        (가독성)

     - 변수명은 대소문자 구분

        (변수 abc와 변수 Abc는 서로 다른 변수)

     - 변수명으로 쓸 수 없는 예약어 존재

        ex) for, if, else, True 등

  • C와 달리 대입 연산이 딱히 반환 값을 가지지 않는다
  • 연속해서 대입 가능

     (뒤에서 부터 대입) ex) a = b = c = 10

  • (Python 3.9 이상) := 연산으로 대입과 동시에 반환 가능

     ex) (a := 2) == 2

 

 

원시 자료형: 가장 기본이 되는 자료형

유형 비고 예시
수치자료 정수 int Overflow가 발생하지 않음
(C와의 차이점)
명시적인 Short type 등이 없음
1 2 3 100 -50 123124124215125
실수 float 부동소수점, Double precision 1.7 -5.7 3e5
.08 9. → 앞, 뒤 0 생략 가능!
복소수 complex 실수부와 허수부로 표현
허수부는 j 또는 J로 표현
1+8j 1.6+8J
문자열 string 따옴표로 표현, Unicode
큰 따옴표, 작은 따옴표 차이 없음
'text' "한글도 돼요" "a"
논리 bool  참/거짓을 표현
True, False 값 밖에 없음
True False
→ if, while 문에서 많이 사용!
None None None 타입, 일종의 null
None 값 밖에 없음
None

 

산술 연산자: 산술 연산을 위해서 활용

연산자 비고
+ 덧셈
- 뺄셈
* 곱셈
** 거듭 제곱
/ 나누기
// 나누기의 몫
% 나누기의 나머지

 

비트 연산자: 비트 연산을 위해 활용

연산자 비고
~ 비트 부정
| 비트합
& 비트곱
^ 배타적 비트합
>> << 비트 시프트

 

 

산술 연산자와 비트 연산자는 대입 연산자와 함께 축약 가능

  • Out-place: 명시적으로 새로운 객체 생성
     a = a + 1
  • In-place: 기존 객체를 수정 시도하고, 불가능할 시 새로운 객체 생성
     a += 1

 

  • a++ 연산은 C와는 다르게 Python에서는 존재하지 않음

 

문자열 (str) 타입은 따옴표 또는 큰 따옴표로 정의

  • sentence = "hello", sentence = 'python'
  • 기능상 차이는 없으나 한쪽을 쓰면 다른 쪽을 Text에 넣을 수 있음

      ex) "hello 'python'"

 

 

원시자료형들은 불변 타입이다.

  • Python의 모든 것은 객체이기 때문에 원시자료형들 역시 객체
  • 그러나 볼변 타입들은 저장된 값이 변하지 않는다
  • 모든 타입은 물리적 메모리 주소를 가르침 (C에서의 pointer)
  • 원시자료형과 Tuple을 제외한 다른 모든(거의 대부분의) 파이썬 객체는 가변 타입

 

Python에서 대입은 원칙적으로 메모리 주소 복사

(값을 복사하는 게 아닌 같은 주소를 공유)

  • 불변형의 경우 수정이 필요한 경우에 새로운 객체를 생성
a = 10

b = a

a += 1

     → a = 11, b = 10 (불변 type)     

 

a = [1, 2, 3]

b = a

a += [4]

     → a = [1, 2, 3, 4], b = [1, 2, 3, 4] (가변 type)

 

a = a + [5]

     → a = [1, 2, 3, 4, 5], b = [1, 2, 3, 4] (불변 type)

 

 

 

파이썬에서 적당한 크기의 원시 자료형 대입은 기존 객체를 할당 (불변 타입이라 상관없음)

  • a와 b는 같은 주소 이기 때문에! (a is b)

      → 작은 값에서만 적용

  • None 값 비교는 '==' 보다 'is'를 더 많이 쓴다

      ex) a is None

 

 

Python은 코드 실행 지점에서 데이터의 타입을 결정한다.

  • C의 'int 변수'처럼 데이터의 타입을 지정하지 않아도 된다
  • bool → int → float → complex 순으로 자동으로 데이터 타입 결정
  • None 타입과 str 타입은 별개
  • int 간의 나누기 시, float 형태로 변환 (정수 나누기는 //)

 

 

Type(value)로 명시적 형 변환 가능하다.

  • int(a), float(text), str(value)
  • 적절한 text는 적절한 값으로 변형
  • 실수 → 정수: 소수점 내림

     cf) round(value): 값을 반올림

  • 빈 문자열, 0, None은 False로 변환

 

Type(value)로 변수의 타입 확인 가능

  • type(a)
  • isintance(value, type)으로 변수가 지정된 타입인지 확인 가능

      → 결괏값: True/False

  • float('75.75')의 결괏값은 75.75로 나온다!

 


Data Structure

 

 

배열(List)

  • 일련의 데이터를 하나로 묶음
  • 대괄호로 선언 []
  • 아무 타입이나 삽입 가능
  • 길이가 정해져 있지 않음

List Indexing

  • list[index] 형태로 요소 하나 접근
  • 0부터 숫자 세기 시작
  • 음수 가능 (뒤에서부터 접근)

List Slicing

  • list[start: end: step] 형태로 List 자르기

     → end는 '미만'이다!

  • end번째는 포함하지 않음

List Operator

  • 리스트 합치기: list1 + list2
  • 리스트 내 값 바꾸기: list[inx] = value
  • 곱하기로 여러 개를 여러 번 합치기: list * 2→ list 값이 두 번 생성
  • 리스트 안 요소 확인: value in list  → 결괏값 True/False
  • 리스트 길이 구하기: len(list)
  • 리스트 맨 뒤에 요소 추가: list.append(value)
  • 리스트 맨 뒤에 리스트 추가: list.extend([value])
  • 특정 index에 요소 추가: list.insert(idx, value)
  • del list[idx]: 특정 index값 삭제
  • list.remove(value): 특정 요소 삭제

 

예약어 내장함수 메소드
일종의 문법적 요소
괄호를 쓰지 않음
재정의 불가능
기본 정의된 함수
별개의 함수 사용
재정의 가능
편의성 향상
객체 내의 정의된 함수
.method()로 접근
Overrriding
해당 객체를 다룸
del
if ... else ...
assert
len()
sum()
range()
.append()
.insert()
.extend()

→ 이외 외부 library 접근!

 

 

리스트 안에 리스트 넣기 가능

  • [1, 2, 3, ['oh', 'someting']]
  • 리스트 안에 다른 모든 객체를 넣기 가능
  • 2차원 배열 역시 비슷하게 구현

 

리스트는 가변 타입이다.

(In-place)

a = [1, 2, 3, 4, 5]

b = a

a += [6]

→ b = [1, 2, 3, 4, 5, 6]

 

(Out-place)

a = 'Something'

b = a

a += '?'

→ b = 'Something', a = 'Something?'

 

 

Python List는 동적 배열로 구현된다.

 

 

 

Tuple

  • 불변 타입인 List: 수정 불가능
  • ()로 선언, 괄호 생략 가능
  • 리스트의 연산, 인덱싱, 슬라이싱 등을 동일하게 사용
  • 일반적으로 함수에서 2개 이상 요소를 반환할 때 사용

     요소 하나 Tuple: a = (1, )

  • Tuple은 불변 타입이지만, Tuple 안의 요소는 가변 타입일 수도 있음
  • 문자열 타입의 경우 일종의 문자 tuple로 생각 가능 → Indexing 및 Slicing이 가능

 

 

Packing: 여러 데이터를 묶기

   ex) t = 1, 2, 3, 4, 5

Unpacking: 묶인 데이터를 풀기

   ex) a, b, c, _, _ = t

         → '_'는 관습적으로 사용하지 않는 변수에 할당

       a, *b, c = t

         → (1, [2, 3, 4], 5)

 

 

Dictionary

  • 일종의 mapping을 위한 데이터 구조
  • Key: Value 형태로 구현
  • 불변 타입으로만 이루어져 있으면 key로 사용 가능
  • {Key1: Value1, Key2: Value2 ...} 형태로 선언
  • dict[idx]: 대괄호로 indexing
  • dict[1, 2, 5] → value는 Tuple이다! (괄호가 생략된 Tuple 형태)
  • dict[Key] = [Value]로 요소 삽입
  • Key는 중복이 불가능하다(덮어 씌워짐)
  • 요소 삭제: del dict['Key']
  • 크기 확인: len(dict)
  • dict.itmes(): Key와 Value값을 반환 → Tuple List로 반환!
  • dict.keys(), dict.values() → List로 반환
  • (Key, value) in dict.items() → 결괏값: True/False
  • Ditctionary는 Hash로 구현: indexing 속도가 O(1)

     → 일종의 Table을 통해 구현

        ("Hashable 하다" = "index형태로 변환 가능하다")

 

 

 

Set

  • Dictionary의 Key만 모여 있는 형태 → 집합형

    {}에서 Key 값만 존재

  • set([])로 선언
  • 특정 요소 추가: set.add()
  • 특정 요소 제거: set.remove()
  • 여러 요소 추가: set.update([])
  • 요소 삭제, 존재하지 않을 시 무시: set.discard()
  • set 비우기: set.clear()
  • 수학적 집합 연산자가 존재

    set1 & set2: 교집합

    set1 | set2: 합집합

    set1 - set2: 차집합

    set1 ^ set2: 배타적 합집합 (set1과 set2의 교집합을 제외한 합집합)

    

'Python' 카테고리의 다른 글

Colab Runtime 유지  (0) 2022.08.01
I&O, Setting & Exception & Logging, Web  (0) 2022.05.01
Advanced Data Structure & String  (0) 2022.04.28
OOP, Module & Package  (0) 2022.04.27
Python Programming  (0) 2022.04.26