* 개념 정리도 중요하지만 cmder, jupyter, vscode에 익숙해지는게 우선일 듯.
- OS(Operating System, 운영체제)는 프로그램이 동작할 수 있는 구동 환경을 의미
- 파일 시스템 : OS에서 파일을 저장하는 트리 구조 저장체제
- 터미널 : mouse가 아닌 키보드로 명령을 입력하고 프로그램을 실행. Command Line Interface
Python은 플랫폼 독립적인 인터프리터 언어이다.
- 플랫폼 독립적인 : OS에 상관없이 한 번 프로그램을 작성하면 사용 가능.
- 인터프리터 언어 : 통역기를 사용하는 언어. 소스코드를 바로 실행할 수 있게 지원하는 프로그램 실행방법
Python은 객체 지향 동적 타이핑 언어.
- 객체 지향 : 실행 순서가 아니라 단위모듈(객체)를 중심으로 프로그램을 작성하는 방식.
- 동적 타이핑 언어 : 실행하는 시점에 프로그램이 사용해야 할 데이터에 대한 타입을 결정하는 방식.
비교할 때 is 연산 사용 주의.
- is 연산은 메모리의 주소를 비교하기 때문에 문제가 발생가능.
a = [1, 2, 3]
b = a[:]
a is b # False
a = [1, 2, 3]
b = a
a is b # True
Python에서 함수는 객체 참조에 의한 호출(call by object reference) 방식이다.
- Call by Value : 값에 의한 호출. 함수에 인자를 넘길 때 값만 넘김. 함수 내 인자값 변경시 호출자에게 영향 없음.
- Call by Reference : 참조에 의한 호출. 함수에 인자를 넘길 때 메모리 주소를 넘김. 함수 내 인자값 변경시 호출자 값도 변경.
- Call by Object Reference : 객체 참조에 의한 호출. 객체의 주소가 함수로 전달되는 방식. 전달된 객체를 참조하여 변경시 호출자에게 영향을 주지만 새로운 객체를 만들 경우 영향 주지 않음.
def spam(eggs):
eggs.append(1)
eggs = [2,3]
ham = [0]
spam(ham)
# ham = [0, 1]
# eggs = [2, 3]
파이썬 기본 데이터 구조
- 스택(stack) : 선입후출(LIFO : Last In First Out). 리스트로 구현 가능. append & pop()
- 큐(queue) : 선입선출(FIFO : First In First Out). 리스트로 구현 가능. append & pop(0)
- 튜플(tuple) : 값 변경 불가능한 리스트.
- 집합(set) : 값을 순서없이 저장. 중복 불허하는 자료형.
- 사전(dictionary) : Key, Value 순서쌍으로 저장
- Collection 모듈
deque : queue를 지원하는 모듈. 리스트에 비해 효율적
defaultdict : dict type의 값에 기본값을 지정. 신규값 생성시 사용
Counter : sequence type의 data element 개수를 dict 형태로 반환
namedtuple : 튜플 형태로 data 구조체를 저장하는 방법. 저장되는 data의 variable을 사전에 지정해서 저장.
Pythonic code
- split : string type의 값을 기준값으로 나눠서 list로 전환
- join : 리스트 내 문자열을 하나의 문자열로 합침
- list comprehension : 기존 리스트로 간단히 다른 리스트를 만드는 기법. for loop 구문보다 효율적.
[i for i in range(10)] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- enumerate : list에서 번호와 element를 동시에 추출
- zip : 두 개의 리스트를 병렬적으로 추출
- lambda : 함수 이름없이 함수처럼 쓸 수 있는 익명함수
- map : 두 개 이상의 list에도 함수를 적용가능하게 함. list comprehension으로 대체 가능.
def f(x): return x + 5
ex = [1,2,3,4,5]
list(map(f, ex)) # map
[f(value) for value in ex] # list comprehension
- reduce : list에 똑같은 함수를 적용해서 통합.
from functools import reduce
print(reduce(lambda x, y : x + y, [1,2,3,4,5])) # 15
- iterable object : sequence형 자료형에서 데이터를 순서대로 추출하는 object.
- generator : iterable object를 특수한 형태로 사용해주는 함수로서 element가 사용되는 시점에 값을 메모리에 반환.
yield를 사용해 한 번에 하나의 element만 반환함. [ ] 가 아닌 ( ) 로 표현함. 메모리를 적게 차지.
def generator_list(value):
result = []
for i in range(value):
yield i
generator_list(50) #
gen_ex = (n * n for n in range(50)) # ()를 이용한 표현
function passing argument
- keyword argument : 함수에 입력되는 parameter를 인용해서 직접 argument를 입력
- default argument : parameter에 기본값을 지정. 따로 입력하지 않으면 기본값이 입력됨.
- variable-length asterisk(가변인자) : 변수의 개수가 정해지지 않은 경우, asterist(*) 기호로 표현. 튜플 타입으로 변환.
- keyword variable-length : **로 표현. dict 타입으로 변환.
def asterist_test(a, b, *args): # variable-length
return a + b + sum(args)
print(asterist_test(1,2,3,4,5)) # 15
def kwargs_test(**kwargs): # keyword variable-length
print(kwargs)
print(type(kwargs))
kwargs_test(firts=3, second = 4, third=5)
print(*[1,2,3,4]) # unpacking # 1 2 3 4
ex = ([1,2],[3,4],[5,6],[5,6]) # unpacking
for value in zip(*ex):
print(value) #(1,3,5,5) (2,4,6,6)
- cf) asterisk는 tuple, dict 자료형에 들어있는 값을 unpacking하는 용도로도 사용
Naming rule in Python
snake_case : 함수명/변수명
CamelCase : 클래스명
객체 지향 프로그래밍 (OOP : Object-Oriented Programming)
- 객체는 속성(Attribute)과 행동(Action)을 가지고 각각 변수(variable)와 함수(method)로 표현한다.
- 객체 지향 프로그래밍은 클래스(class)와 그 구현체인 인스턴스(instance)로 나뉨
- Attribute 추가는 __init__, self를 사용
__init__ : 객체 초기화 함수
self : 생성된 인스턴스 자신 - Method 구현은 함수와 비슷하지만 self를 추가해야 한다는 차이 존재
* OOP에서 알면 좋을 3가지
- Inheritance(상속) : 부모클래스의 속성/method를 물려받는 자식클래스 생성 가능
- Polymorphism(다형성) : 같은 이름 메소드의 내부로직을 다르게 작성
- Visibility(가시성) : 객체 정보를 볼 수 있는 레벨을 조절. 모든 사람이 모든 변수를 볼 필요가 없기 때문. __로 구현
* Decorate(@)
- 파이썬 함수는 first-class object(일급객체). 일급객체란 변수나 데이터 구조에도 할당이 가능한 객체를 뜻함.
즉 파이썬 함수를 parameter/return값으로 사용 가능하다. - inner function : 파이썬에서는 함수 내에 또 다른 함수를 정의할 수 있다.
- decorator : 복잡한 함수식을 간단히 할 수 있음.
모듈 & 패키지
- 모듈(Module) : 작은 프로그램 조각들로, 모듈을 모아 하나의 프로그램을 만든다.
- 패키지(Package) : 모듈을 모아놓은 단위. 하나의 프로그램
* 모듈 namespace
- import 모듈 (as 별칭)
- from 모듈 import 함수/클래스 (as 별칭)
- from 모듈 import * : 모든 함수/클래스 호출
가상환경 설정하기(Virtual Environment)
- 프로젝트 진행시 필요한 패키지만 설치하는 환경
- 패키지 관리도구 : virtualenv, conda
conda create -n my_project python=3.9 # 가상환경이름 # 파이썬 버전
conda activate my_project # 가상환경 실행
conda install matplotlib # 패키지설치
conda install tqdm
conda deactivate # 가상환경 종료
예외 처리 (Exception)
- 예상 가능한 예외 : 개발자가 명시적으로 처리해야 한다. → if/else문으로 처리
- 예상 불가능한 예외 : 인터프리터 과정에서 발생하는 예외. → Exception Handling
- Exception 처리 해주면 중간에 코드가 멈추지 않아 안정적이다.
try:
<예외 발생 가능 코드>
except <Exception Type>:
예외 발생시 대응하는 코드
else:
예외가 발생하지 않을 때 동작하는 코드
finally:
예외 발생 여부와 무관하게 동작하는 코드
- raise 구문 : 필요에 따라 강제로 예외 발생
- assert 구문 : 특정 조건에 만족하지 않을 경우 예외 발생
raise <Exception Type>
assert <예외 조건>
Logging
- 프로그램이 실행되는 동안 일어나는 정보를 기록 남기기
- Log level : DEBUG > INFO > WARNING > ERROR > CRITICAL
(cf) print로 기록을 남기고 싶을 수 있다. but print문은 console창에만 남겨져 분석시 사용 불가.
CSV
- CSV(Comma Separate Values, Character - ), TSV(Tab - ), SSV(Single Space -)
- CSV 객체로 CSV 처리 가능 → 추후에는 Pandas로 csv를 다룰 예정
HTML(Hyper Text Markup Language) & XML(eXtensible Markup Langauge)
- 웹상의 정보를 구조적으로 표현하는 언어
- TAG로 둘러싸임.
- 정규식 표현을 통해 원하는 정보 찾는 연습 요망.
정규식(Regular expression)
- regexp, regex 로 표현
- 복잡한 문자열 패턴을 정의하는 문자 표현 공식
- 특정한 규칙을 가진 문자열 집합을 추출.
- www.regexr.com에서 연습
'네이버 부스트캠프 AI Tech > Deep Learning Basics' 카테고리의 다른 글
[부스트캠프 AI Tech] 확률론 맛보기 (0) | 2022.01.22 |
---|---|
[부스트캠프 AI Tech] Deep learning basics (0) | 2022.01.22 |
[부스트캠프 AI Tech] Gradient descent (0) | 2022.01.22 |
[부스트캠프 AI Tech] numpy (0) | 2022.01.20 |
[부스트캠프 AI Tech] Vector & Matrix (0) | 2022.01.18 |
댓글