728x90
파이썬의 특징
- 인터프리터 언어 : 컴파일 과정이 없음
- 파이썬 코드는 인터프리터를 통해 .pyc라는 binary 파일로 변환
- Cross-Platform으로 동작 가능
- Dynamic Typing(Duck Typing) : 타입 명시가 필요 없음
- 단순한 문법
파이썬의 Value :
- 프로그램에 의해 사용될 수 있는 객체 표현
- 숫자 : 정수(Int), 실수(Float), 허수(3+j), Boolean(True, False)
- 허수는 .real, .imag로 실/허수를 분리해낼 수 있음
- 숫자 : 정수(Int), 실수(Float), 허수(3+j), Boolean(True, False)
문자열
- "" / '' - 한 줄
- """ """ - 여러 줄
- 특수문자는 (키보드 ₩ 표시)뒤의 문자로 입력 가능
- 문자열 메소드
- ''.join : 문자열을 인자와 함께 이어 붙임
- split('') : 문자열을 인자 기준으로 나눔
- float, int : 문자열을 숫자로 (int의 경우 진수 지정 가능)
- strip / lstrip / rstrip : 양옆 / 왼쪽 / 오른쪽 공백 제거
- whitespace : 공백 문자로 처리하는 문자를 확인
- find, rfind : 시작/끝에서 문자를 찾아 인덱스 반환 (없으면 -1)
- startswith, endswith : 해당 문자열로 시작/끝나는지 여부
리스트(배열) : [], list()
- C와 달리 여러 타입의 값이 같이 들어갈 수 있음
- [ 1, "123", [1,2,3] ]
- 파이썬의 리스트 인덱스는 음수로도 가능
- 리스트 처음의 인덱스는 0 혹은 -(리스트 길이)
- 리스트 마지막 인덱스는 (리스트 길이 - 1) 혹은 -1
- 슬라이스 : 리스트의 일부분을 추출해낼 수 있음
- range와 유사하게 동작
- a = [1,2,3,4,5]
- a[:] = [1,2,3,4,5]
- a[:2] = [1,2]
- a[1:3] = [2,3]
- 파이썬 리스트 함수
- x=[1,2,3], y=[4,5,6]
- len(x) : 리스트의 길이 반환 (3)
- x[len(x):] = y, x 리스트의 뒤에 y를 연결할 수 있음
- [1,2,3,4,5,6]
- x.extend(y), x[2:3] = y로도 가능
- x+y로도 가능
- x[:0] = [1,2,3] : x 리스트의 앞에 [1,2,3]으로 연장
- [4,5,6,1,2,3]
- x.append(10) : 리스트 끝에 추가
- [1,2,3,10]
- x.insert(n, element) : n번째 인덱스 앞에 element 추가
- x.insert(0,-1) = [-1,1,2,3]
- del x[] : 리스트 원소를 지울 수 있음
- del x[1] = [1,3]
- del x[:] = []
- x.remove(2) : x리스트 안의 원소 2를 지움
- [1,3]
- x.reverse() : 리스트 x를 역순으로 정렬
- [3,2,1]
- z = [1,3,2] - z.sort() 리스트를 크기순으로 정렬
- [1,2,3]
- z를 변화시키며 리턴값 없음
- y = sorted(z) : 정렬된 새 리스트를 반환
- z = [1,3,2], y=[1,2,3]
- in : 값이 리스트에 있는지 확인
- 1 in [1,2,3] : True
- 5 in [1,2,3] : False
- 5 not in [1,2,3] : True
- min, max : 리스트 내의 최대/최소값 반환
- x.index(1) : 해당 원소가 존재할 경우 인덱스 반환
- 0
- k = [1,1,1,2,2,3] - k.count(1) : k 리스트 내의 원소 개수 반환
- 3
튜플 : (), tuple()
- 수정 불가능한 리스트
- (1,) : 하나의 원소를 갖는 튜플 - (1)는 정수 1임
- 튜플의 활용 : 변수 선언의 간소화
- extend unpacking * : *이 붙은 원소는 길이가 맞지 않는 모든 값을 흡수
x=1
y=2
z=3
w=4
#에서
(x,y,z,w)=(1,2,3,4)#로
# Extend unpacking
a, *b, c = (1,2,3,4,5)
'''
a=1
b=[2,3,4]
c=5
'''
a,b,c,*d=(1,2,3)
'''
a=1
b=2
c=3
d=[] : 빈 리스트
'''
딕셔너리 : {}, dict()
- 키 - 값 관계를 갖는 자료 구조
- d = {1:"one", 2:"two}일 때, d[1] = "one"을 반환
세트 : set()
- 중복이 없는 자료 구조
- set([1,2,3,4,1,2,3,4]) = set([1,2,3,4])
- |, & : 합집합, 교집합 계산
- -: 차집합
- ^ : XOR 연산과 동일
- frozenset([]) : Immutable한 set
- set 안의 set을 구현하기 위해 사용
- seta = {1,2, frozenset([3,4,5])}
- set은 unique한 값을 갖는 객체를 해쉬로 구현하는데, set은 Mutable하므로 값이 바뀔 수 있어 set 안의 set 구현이 불가능. 이로 인해 set in set을 구현하기 위해 frozenset이 필요
파이썬 객체
- 프로그램이 조작 가능한 데이터
- Scala : Int, Float, Bool, None - 분리 불가능한 최소 단위
- None : 반환값이 없는 함수에 사용(None을 반환)
- Non-scala ; List, Tuple, Dictionary, defined Class - Scala Type에 기반해서 만들어지는 자료형
Type
() : 자료형 변환이 가능(C의 type-casting)- 값과 변수
- Value : 값을 표현
- Variable : 데이터가 저장된 곳을 이름으로 표현
- 값을 변수에 할당하여 사용 (Variable = Value : pi = 3.14)
- 만약 x=3으로 할당 후, x=4로 할당하면, x = 3의 연결이 끊어지고, 4와 x가 bind됨
- 3의 값은 python에서 자체적으로 메모리를 정리해줌
- del(x) : 변수 x를 삭제
- 객체 복사
- 파이썬의 모든 변수는 레퍼런스(포인터)로 동작
- a=3, b=3의 코드를 가정
- C의 경우 a, b의 메모리 공간에 각각 3을 저장
- python의 경우 a, b가 3의 값을 갖는 객체의 주소를 가리킴
- a=4가 될 경우, c는 a변수의 메모리 공간을 지우고 4를 넣지만, python은 4의 값을 갖는 객체를 만들고, 그 주소를 a가 가리키게 됨
- 리스트 역시 각 위치가 포인터로 동작
- [1, 2, 3]은, 리스트의 0, 1, 2번째 인덱스가 각각 1,2,3의 값을 갖는 객체를 가리키는 상태
- shallow copy : 리스트를 대입한 후 연산을 할 경우, 같은 리스트 변수에도 영향을 줌
- 파이썬의 모든 변수는 레퍼런스(포인터)로 동작
li1 = [1,2,3]
li2 = li1 #shallow copy
li2 = li1 * 2 # li1, li2 모두 [2,4,6]
# Deep copy : 분리하여 복사
import copy
li2 = copy.deepcopy(li1)
- 파일 객체
- open('파일명', '읽기/쓰기 여부')로 호출
- 존재하는 파일을 쓰기로 호출할 경우, 덮어쓰는 식으로 파일 작성
Immutable / Mutable
- 파이썬의 객체 분류 기준
- Immutable : Number, Boolean, Tuple
- Mutable : List, Set, Dictionary
- Object ID : id() 함수는 객체의 id를 반환
- Immutable한 객체들의 id는 모두 동일
- Mutable 객체(ex. list)의 경우 매번 새로 생성되므로 다른 id 할당
- is 연산자로 두 객체가 완전히 같은지 확인 가능
- ==는 두 객체의 값을 비교
주석
- 코드가 어떻게 동작하는지를 설명
- 실제 코드에는 영향을 주지 않음
#
: 한 줄 /''' '''
: 여러 줄
# comment in one line
'''
comment
in
lines
'''
파이썬의 코딩 스타일 - PEP 8
- 개발 편의를 위한 코딩 규칙
- 모듈명, 패키지명 : 모두 소문자로, 필요할 때만 _로 구분 (imp, sys)
- 함수, 변수명 : 모두 소문자로, 가독성을 위해 언더바 사용 (my_func(), my_var)
- 클래스명 : 각 단어마다 대문자로 시작(MyClass)
- 상수 : 모두 대문자, 가독성을 위해 언더바(MY_CONSTANT)
- 들여쓰기 : tab 대신 스페이스 4번으로 사용할 것
- 비교 : True, False와 직접적인 대조를 하지 말 것
- if my_var == True >> if my_var
- if my_var == False >> if not my_var
728x90