본문 바로가기
ML&DATA/python for data analysis

파이썬 - (시멘틱, 바인딩, 타입 등)

by sun__ 2020. 7. 18.

파이썬 내장함수, 파이썬 자체 기능 등 메모

 

**모든 것은 객체

모든 수, 문자열, 자료구조, 함수, 클래스, 모듈 등은 파이썬 인터프리터에서 파이썬 객체라고하는 어떤 상자안에 저장됨.각 객체는 자료형과 내부 데이터를 가지고 있음.

 

**변수와 인자 전달

a = [1,2,3]
b = a
a.append(4)
b  
#output : [1,2,3,4]

대입연산자는 우항 객체에 대한 참조를 생성해 전달함.

변수에 값(객체)을 할당하는 것은 이름(값)을 객체에 연결하는 것이므로 바인딩이라고 한다. 값이 할당된 변수를 바운드 변수라고 부르기도 함.

 

def append_(list_, elem):
	list_.append(elem) 

a = [1,2,3]    
append_(a, 4)
a
#output: [1,2,3,4]

함수에 객체를 인자로 넘기면 깊은 복사.

 

 

**동적 참조와 강한 타입

객체 참조에 타입이 관여하지 않는다.

a = 5
type(a) #output: int
a = 'foo'
type(a) #output: str

변수는 특정한 네임스페이스 안에 존재하는 객체의 이름이라고 할 수 있다. 자료형에 대한 정보는 객체에 있는 것. (파이썬은 자료형이 있는 언어다.)

 

a = 4.5
isinstance(a, (int,float)) #output: True

isinstance함수로 어떤 객체가 무슨 자료형인지 검사할 수 있다. 위와 같이 튜플을 넘겨서 주어진 튜플 중 하나인지 검사할 수도 있다.

 

 

**모듈

모듈이란 파이썬 코드가 담긴 .py파일을 말한다.

import test_module1
from test_module2 import func1, func2, constant1, object1
import test_module3 as tm3

 

 

** is 예약어

a = [1,2,3]
b = a
c = list(a)
d = None
a is b	 #output: True
a is c 	 #output: False
d is None #output: True

is는 두 참조 변수가 같은 객체를 가리키고 있는지 검사할 때 사용한다. 변수가 None인지 검사할 때 흔히 사용

 

list는 항상 새로운 파이썬 리스트를 생성함.

None 인스턴스는 하나만 존재함. (null의미)

 

 

**뮤터블, 이뮤터블 객체

문자열, 튜플은 이뮤터블.

리스트, 딕셔너리, numpy 배열 등 대부분의 객체는 뮤터블

 

 

**바이트와 유니코드

val = '파이썬'
val_utf8 = val.encode('utf-8')
#out: b'\xed\x8c\x8c\xec\x9d\xb4\xec\x8d\xac'
type(val_utf8)
#out: bytes

val_utf8.decode('utf-8')
#out: '파이썬'

 

**형변환

str,bool,int,float 등 형변환을 위한 함수로 사용됨.

 

 

**날짜와 시간 (정확한 쓰임은 구글링, 본문 79pg)

파이썬 내장 datetime모듈은 datetime, date, time형 지원함.

strftime 메서드: datetime->문자열

strptime 메서드 : 문자열->datetime

포맷 규칙 (%Y, %y, %m, %d, %S, %w, %U, %F ..등)

 

datatime.datatime은 이뮤터블. 이런 메서드들은 항상 새로운 객체 반환.

 

datatime객체의 차(-연산)는 datatime.timedelta 객체 반환함.

 

 

**range

range함수는 연속된 정수를 넘겨주는 iterator를 반환한다. start, end, step 지정 가능. 인덱스로 시퀀스를 반복하기 위해 흔히 사용함. 메모리 사용량 매우 적음

list(range(3))		 #out: [0,1,2]
list(range(0,8,2)) 	 #out: [0,2,4,6]

seq = [2,5,1,7]
for i in range(len(seq)):
	#do something with seq[i]

 

 

**삼항 표현식

<true expr> if <condition> else <false expr>

가독성 떨어뜨림. c++과 순서가 조금 다름.