list와 tuple 의 차이
list : 가변성, 더 느림
tuple : 불변성(수정 불가), 더 빠름
Python 주요 특징
interpreted language : 실행 전 컴파일 필요 없음
dynamically typed : 변수 사용 전 선언할 필요 없음
객체지향적 프로그래밍 : 상속 등과 함께 class 정의 허용
함수가 first-class object : 변수에 할당 가능, 다른 함수에서 반환 및 전달 가능
Scripting & Programming Languate
Scripting : 자동화 가능 / 주어진 데이터에서 정보 제공
Programming : script 또는 다른 상위 코드 내에서 실행
PEP8
python 개선 제안서 : 어떻게 code 구상할지 알려주는 스타일 가이드
memory 관리
python private heap space에서 관리됨
내장된 garbage collector가 있어서 사용되지 않는 메모리 재사용 가능
namespace
이름 충돌 피하기 위해 고유한 이름인지 확인하는 이름 지정 시스템
PYTHONPATH
-- module이 import되는 환경변수
Global & Local Variables
Global Variables : 모든 global 영역에서 접근 가능한 변수
Local Variables : function 안에서 정의되는 변수
대소문자 구별하는 case-sensitive한 언어
형변환 방식
int() / float() / ord() : char -> int /
hex(): int -> 16진수 / oct() : int -> 8진수 /
complex() : 실수 -> 복소수
tuple() / set() / list() / dict() / str()
Array와 List 차이
array : 요소의 data type 동일해야 함 (import array)
list : 요소의 data type 상관없음
init
method or constructor
새로운 객체나 class가 생성됐을 때 메모리 할당
lambda 함수
이름이 정해져 있지 않은 함수로, 여러 parameter 받아 결과 return
a = lambda x,y : x+y
self
class의 인스턴스 또는 객체
break / continue / pass
break : loop 종료
continue : loop의 일부분 skip
pass : 실행 건너뛰기
[::-1] 의미 : 순서 반대로
list 순서 randomize
from random import shuffle
iterators
collection이나 문자열 하나씩 데이터 처리할 수 있는 iterable 객체의 iterator를 return
it = iter(객체명) -> next(it)로 객체 하나씩 return
generator
iterator의 특수 함수 형태
함수 내 yield를 통해 데이터 하나씩 return
range와 xrange 차이
둘 다 일정 간격 정수 반환
xrange == generator의 yield : range보다 더 적은 메모리 사용하며, type이 다름 ( range=list, xrange=xrange )
pickling과 unpickling
pickle : 어떤 객체도 문자열 표현으로 변환하여 파일로 dump (import pickle; pickle.dump(dir,file);)
unpickling : 저장된 문자열 표현에서 객체로 변환
help / dir
help() : 해당 documentation 반환
dir() : 내장 함수 이름 list 반환
Python 나갈 때 왜 모든 memory가 할당 해제되지 않는가?
C에서 예약된 메모리 할당 해제는 불가능
ternary operator (삼항 연산자)
[true_value] if [condition] else [false_value]
args / **kwargs
args : 얼마나 많은 argument가 함수에 전달될지 모르는 경우 or 저장된 list, tuple 함수에 전달할 때 사용
**kwargs: 얼마나 많은 keyword argument가 함수에 전달될지 모르는 경우 or 저장된 dictionary를 함수에 전달할 때 사용
re module 기능
split() : regex pattern으로 string을 list로 쪼개기
sub() : regex pattern에 match되는 부분 변경
subn() : sub() + 변경된 횟수 반환
numpy array 장점 (list와 비교)
list는 vector화된 작업(addition, multiplication) 지원 X
numpy array가 더 빠르고 효율적
array에 value 더하기
append(ele)
extend([ele1, ele2, ele3])
insert(idx, element)
pop(idx)
remove(element)
Shallow / Deep copy
Shallow copy : 새로운 instance가 생성될 때 사용
Deep copy : 이미 복사된 값 저장할 때 사용
Multithreading
멀티스레딩 패키지가 있음
하지만 Python은 GIL (Global Intervirator Lock) 구조로 되어있기 때문에 멀티스레딩을 하더라도 같은 CPU가 교대로 작업됨
Compilation & Linking
새로운 확장자를 오류 없이 적절하게 컴파일하도록 함
Linking은 컴파일된 절차 통과해야 수행됨
새로운 확장자 파일을 Modules/ 경로에 넣고 Setup.local 파일에 행을 추가하고 spam file.o를 이용해 실행 후 make 명령어로 재빌드
상속 (Inheritance)
다른 class의 모든 멤버(속성, method) 받는 것
python은 multiple inheritance도 가능해서 여러 부모 class로부터 상속 가능
Monkey Patching
런타임에 class / module 동적 수정
Overloading & Overriding
Overloading : 같은 공간 내 동일 이름 함수 정의 But 매개변수 유형, 갯수 다르게
Overriding : 상위 class의 method를 하위 class에서 재정의
Call by reference & Call by object
Call by value : 인자로 받은 값을 복사해 처리
Call by reference : 인자로 받은 값의 주소값을 참조
Call by object : Python 내에서는 모든 것을 객체로 보고 immutable object(int, float, str, tuple)은 call by value로 동작 / mutable object(list, dict, set)은 call by reference로 동작
Polymorphism
부모 class 내의 method를 자식 class에서 overriding
Encapsulation
code와 data를 하나로 묶어 외부에서 code를 통해서만 data에 접근 가능하도록 하는 정보 은닉 방식
data 추상화
필요 세부사항만 제공하고 구현은 숨기는 것
추상 class 사용
Access specifier (접근 제어자)
따로 public, private 지정해주지 않음
비어있는 class 만들기
class a: pass
class 내 개체 밖에서 정의 가능
object() 역할
특징 없는 객체 반환, 매개변수 필요 X
Flask vs Pyramid vs Django
Flask : 간단한 구조 제공 + 외부 library 사용 필요
Pyramid : 상대적으로 무거움
Django : 구현 위한 기본 틀을 제공해줌 + ORM(객체 관계 매핑)
Django 아키텍쳐
MVT : Model + View + Template
# Bubble sort
def bubblesort(a):
b = len(a) -1
for x in range(b):
for y in range(b-x):
if a[y] > a[y+1]:
a[y], a[y+1] = a[y+1], a[y]
return a
# Star tree
def startree(r):
for x in range(r):
print(' '*(r-x-1) + '*'*(2*x*1))
# 피보나치 배열
def fibonacci(num):
if num < 2:
return num
else:
return fibonacci(num-1) + fibonacci(num-2)
def fibonacci2(num):
a, b = 0, 1
for i in range(num):
a, b = b, a+b
return a
# 소수 판별
def primenumber(num):
if num !=1:
for f in range(2, num):
if num % f == 0:
return False
else:
return False
return True
### 에라토스테네스의 체
n = 1000
a = [False, False] + [Ture]*(n-1)
primes = []
for i in range(2, n+1):
if a[i]:
primes.append(i)
for j in range(2*i, n+1, i):
a[j] = False
print(primes)