오늘은 파이썬의 강력한 기능 중 하나인 장식자를 공부 했던 내용을 정리해보려고 합니다. 


장식자 (Decorator)


는 어떤 함수를 어떤 특별한 기능을 가진 함수로 감싸려는 목적으로 만들어진 함수입니다.


왜 감쌀까요?



예를 들면, 저희가 편의점에서 자주 볼 수 있는 1+1 상품이 있다고 가정을 해보시죠!


1+1 상품은 하나를 구매하면 하나를 더 주는 편의점의 꽃인 상품이죠.


인터넷 쇼핑을 할 때도 1+1 제품을 볼 수 있는데요.


만약 1+1 상품을 구매하는 기능을 만든다고 하죠! (원래 쇼핑몰은 이렇게 주문기능을 구현하지 않습니다. 쉽게 설명하기 위해 들은 예입니다.)


저희 가게 상품은 비틀즈(beatles), kicker, 메로나(merona) 가 있다고 가정해 보겠습니다.


그 중 beatles와 kicker는 1+1 제품이라고 하면



이렇게 주문마다 num= num*2를 해줘야 하지만, 


장식자( decorator )를 이용하면 다음과 같이 코드를 간소화 할 수 있습니다.




너무 쉬운예제를 들어 코드가 줄어 들은 것 같지가 않지요?........


1+1 상품이 1000개가 있다면요?


if item_event == True:

@onel_plus_one

def order()

else:

def order()


이런식으로 하면 어떨 까요? 그냥 이해를 돕기위한 코드로 실제는 저런 코드를 이용하지는 않습니다.



먼저 이해를 돕기 위해 가장 간단한 코드로 구현해보았습니다. 조금만 기다려주세요!


이런식으로 one_plus_one decorator를 만들어 놓은다면 1+1 행상기간에는 장식자를 붙여주고 아니면 그냥 삭제하면 됩니다.


어느날 merona도 1+1 행사를 하게됬다면 그냥 위에 @one_plus_one 장식자를 추가해줍니다.


장식자를 이용하면 코드를 이해하기도 쉽고 간결해 집니다.



그런데 갑자기 하나를 사면 무조건 10배를 주는 event를 하게 됐다고 생각해보시죠. 생각하면 신나죠..ㅎㅎ


갑자기 코드를 고쳐야 합니다.....


여기서 또 장식자에 변수를 전달하여 이용하면 쉽게 구현할 수 있습니다. 20개를 사면 200개를 주겠죠....!



decorator에 변수를 전달해서 이를 쉽게 바꿀 수 있습니다!



다음 예제는 ASK DJANGO 강의에서 다뤘던 예제입니다.


http://nomade.kr 강의 사이트 주소입니다.


import time

def long_mysum1(x, y):

    time.sleep(1)

return x + y 


위 함수는 엄청 복잡한 함수라? 1초의 시간이 걸립니다. 


이런경우 만약 기존에 계산한 결과를 cache 에 보관하여 꺼낸다면 엄청나게 실행속도가 빨라질 것입니다.




def memoize(fn):
    cached = {}
    def wrap(x, y):
        key = (x, y)
        if key not in cached:
            cached[key] = fn(x, y)
        return cached[key]
    return wrap


이미 계산한 결과를 cached에 저장하여 만약 계산한 적이 있다면 이를 바로 반환할 수 있도록 돕는 장식자입니다.



(1,2) ,(3,2) 두 번만 함수가 실행되고 나머지는 cached에 데이터를 가져온 것을 확인할 수 있습니다.


다음에 장식자에 대해서 더 자세히 알아보겠습니다.

오늘 복습할 내용은 



파이썬의 호출 가능한 객체입니다!



--------------------------------------------------



파이썬의 class 를 정의한 후에 객체를 생성하면 객체를 호출할 수 있을까요 없을까요?


o , x ?


--------------------------------------------------




정답은........... 그때 그때 달라요! 



class에서 def __call__ 멤버함수를 정의해주면 가능하고,

아니라면 호출 할 수 없습니다.


클래스 객체를 호출하는 방법과 어떻게 언제 이용하는지 공부해보도록 하겠습니다.



호출할 수 있는 객체에는 함수, 클래스가 있습니다.



다음과 같이 함수를 일급객체로 사용하여 호출할 수도 있습니다!



이제 오늘의 본론으로 들어가 클래스의 객체를 호출하는 방법과 사용법에 대해서 알아보겠습니다.


위와 같이 객체를 그냥 호출할 수 있는 것은 아닙니다!


class 정의 시! __call__ 멤버함수가 필요합니다!




인스턴스를 호출하면 멤버함수 __call__ 을 호출합니다!



언제 쓰면 우리는 객체를 호출하는데 유용하게 사용할 수 있을까요?!


1) 값을 유지하는 함수를 만들 때!



다음과 같이 값을 유지하는 함수를 만드는데 유용하게 사용할 수 있습니다 !



2) 기존의 함수와 비슷한 함수를 만들어야 할 때



제가 요청한 url의 html의 글자수를 count하여 출력하는 함수입니다.


이 함수와 비슷한 함수인 html의 한글로 되어있는 글자수를 count하여 출력하는 함수를 만든다면 ... 만약 함수를 이용한다면



다음과 같이 비슷한 코드를 다시 작성해야 합니다!!


이는 너무 비효율적 !! 입니다 .


여기서 class를 이용하면~~ 



다음과 같이 5줄의 코드만 더하면 끝입니다!





4줄의 코드만 추가하면 됩니다! 함수처럼 다시 같은 코드를 반복할 필요가 없어 효율적입니다!!


오늘은 호출가능한 객체에 대해서 공부했습니다!!


공부하시는데 작은 도움이라도 되면 좋겠네요~~!


  1. 공순이 2017.09.16 00:21 신고

    좋은 자료네요!

  2. 파이썬 2017.09.17 17:08 신고

    좋은자료네요 !공부하는데참고할게요~~!

파이썬 askdjango를 강의로 복습하던 중에 파이썬의 클래스를 부분을 포스팅하지 않은 것을 발견했습니다!


그래서 늦었지만 Class 부분을 복습하면서 그 내용을 포스팅 하겠습니다! 



지난 번에 다룬 함수(function) 은 데이터의 처리방법을 구조화하여 코드의 반복을 줄여줬었습니다.


하지만 함수는 데이터 자체는 구조화하지 못한다는 한계가 있습니다.


이를 보완할 수 있는 것이 바로 class 입니다 !



그럼 복습 시작하겠습니다.


• Object Oriented Programming (OOP, 객체 지향 프로그래밍)

• Class (클래스)

  1. Object Oriented Programming(OOP) 배경
  2. 지원 언어: python, ruby, c++, swift, objective-c,java, c# 등
  3. 함수 -> 데이터 처리방법을 구조화
    데이터 -> ?? 함수는 데이터를 구조화하지는 못했기 때문에 도입
  4. 큰 문제를 작게 쪼개는 것이 아니라, 먼저 작은 문제들을 해결할 수 있는 객체
    들을 만든 뒤, 이 객체들을 조합해서 큰 문제를 해결하는 상향식(bottom-
    top) 해결법을 도입


Class


• 단순히 <사용자 정의 데이터 타입>
• 관련된 다수의 변수와 함수의 묶음으로 구성

  • ex) Circle 클래스, Rectangle 클래스, Person 클래스, Book 클래스

  • Tip: 파이썬에서 함수명은 snake_case, 클래스명은 CamelCase 


snake_cae 는 my_sum 이런식으로 이어가는 형태를 말하고, CamelCase는 낙타의 혹부분을 대문자로 생각하시면 될 것 같아요!

class의 예로 어떤 예가 좋을지 생각하다 스타크래프트의 마린을 생각해봤습니다.

스타크래프트에서 마린을 만들 때 모든 마린은 똑같습니다. 이동속도, 체력, 공격력 ! (업그레이드 안했다는 가정에 ㅎㅎ)

그러면 class 로 정의해놓은다면 저희는 쉽게 마린을 생성할 수 있습니다.






스타크래프트로 생각한다면

if user.clickon(마린생산버튼):
marine = Marine('현재위치')
~~~

이런식이 되지 않을까요??

이처럼 클래스를 이용하면 응집도 있게 관련된 변수와 함수들을 만들고 관리할 수 있습니다.


클래스 변수와 인스턴스 변수 


다음은 클래스 변수와 인스턴스 변수입니다.

- 클래스 변수:

클래스 공간에 저장

ex) class Marine:
height = 100;

def __init__(self~~): ~~~~

        이처럼 모든 인스턴스들이 같은 값을 가질 변수에 사용하면 유용합니다. 모든 마린의 크기는 같겠죠?? 스팀팩 쓰고 그런다고 커지지는 않 .           겠죠??? 제가 스타크래프트를 많이 안해봐서...

- 인스턴스 변수:
 
각 인스턴스마다 개별 공간에 저장

위에 예에서 hp, mp 이런 변수들이 인스턴스 변수입니다. 마린마다 남은 체력과 마나는 다를 수 있습니다. 그렇기 때문에 각자의 데이터를 저장할 공간이 필요합니다.



 # java 에서의 클래스와의 차이점은 python에서는 접근자가 없다는 점입니다.

이것으로 파이썬 class에 대해서 살펴봤습니다.

이해를 돕기 위해 스타크래프트의 마린을 예로 들어봤는데 도움이 되셨다면 좋겠네요!!

오늘도 화이팅입니다~~!

아! 혹시 도움이 되셨다면 공감 ! 눌러주세요~

그리고 혹시 

for 문으로 인스턴스들을 여러개 만들고 싶은데

지역은 ranedom.choice() 를 이용해서 여러개 하면 될 것 같은데 인스턴스 이름을 각각 다르게 하고 싶은데

방법이 잘 생각안나네요ㅠㅠ 혹시 좋은 방법 아시는분 댓글 달아주세요!

for i in range(5):
marine = Marine('서울')


참고한 자료:

askdjango github: https://github.com/askdjango


아 그리고 저는 페이스북 , 유튜브 askdjango 에서도 도움을 많이 받아요.

https://www.facebook.com/groups/askdjango/


아 이번에 python /django 강의 사이트가 오픈했는데 저는 강의를 통해 큰 도움을 받고 있습니다.

 nomade.kr 

 

  1. 입문자 2017.08.13 11:46 신고

    좋은자료 감사합니다~~!

  2. 컴공 2017.11.07 10:57 신고

    파이썬에 접근자랑 설정자가 있지않나요?

    • jordan_bae jordan17 2017.11.07 22:27 신고

      댓글 감사합니다.
      정확하지는 않지만 제가 알기로는 파이썬은 접근제어자 키워드가 존재 하지는 않고 작명법으로 접근제어를 하는걸로 알고 있습니다.
      public, private 등 접근자는 존재 하지 않지만 작명법 _name, __name 이렇게 접근제어하는걸로 알고 있었는데 ..혹시 자세히 알고 계시면 알려주시면 감사하겠습니다. 저도 한 번 찾아볼게요!

안녕하세요 ~~ 한 동안 글 포스팅을 하지 못했네요....ㅠㅠ


사실 저의 복습을 목적으로 글을 게시하고 있는데 한 동안 복습을 못했네요! 


django 강의를 다 듣고 파이썬 강의를 들을면서 이제 다시 틈틈이 정리해볼까합니다!



그 전에 쉬어가는 시간으로 파이썬의 선, 파이썬의 zen 을 확인하는 방법을 가르쳐드리면서 쉬어가려고 합니다!


명령창에서 python의 zen을 확인하는 방법은



위와 같습니다!


python을 실행시킨후 import this만 입력하시면 확인할 수 있습니다!!


아주 간단하죠?!


저는 개인적으로 1,2,3 번째가 와닿네요~~


앞으로 다시 한 번 열심히 복습해보겠습니다!

Askdjango) python 기본문법 정리1.python 코드 실행방법, python데이터 : http://myjorney.tistory.com/1


Askdjango) python 기본문법 정리)2.파이썬의 기본 자료구조 , python data structure(list/tuple/set/dict): http://myjorney.tistory.com/2


Askdjango) python 기본문법 정리)2.파이썬의 기본 자료구조 , python data structure(list/tuple/set/dict)(2): http://myjorney.tistory.com/3


Askdjango) python 기본문법 정리3)python 파이썬 블록문, 들여쓰기, 주석http://myjorney.tistory.com/4


Askdjango) 파이썬 기본문법 정리 4)python 파이썬 flow control (if,for,while) : http://myjorney.tistory.com/5


Askdjango) 파이썬 기본문법 정리 5)python 파이썬 함수, 파이썬 function, 파이썬 arguments , 파이썬 인자 : http://myjorney.tistory.com/6


Askdjango) 파이썬 기본문법 정리 6)python 파이썬 덕타이핑, 파이썬 duck typing : http://myjorney.tistory.com/9


Askdjango) 파이썬 기본문법 정리 7) 파이썬 iterable 객체 , python iterable 객체 : http://myjorney.tistory.com/10


Askdjango) 파이썬 기본문법 정리 8) 파이썬 callable 객체 , python callable 객체 :  http://myjorney.tistory.com/11


Askdjango) 파이썬 기본문법 정리 9) 파이썬 빌트인함수 , 파이썬 sorted 함수 :  http://myjorney.tistory.com/12


Askdjango) 파이썬 기본문법 정리 10) 파이썬 빌트인함수 , 파이썬 map,max,min 함수 :  http://myjorney.tistory.com/14


askdjango) 파이썬 기본문법 정리 13) 파이썬 빌트인함수 , 파이썬 sort 함수: http://myjorney.tistory.com/16


Askdjango) 파이썬 기본문법 정리 14) 파이썬 대소비교, 대소비교 homework 코딩: http://myjorney.tistory.com/17


Askdjango) 파이썬 기본문법 정리 15) 파이썬 import , module , package : http://myjorney.tistory.com/19


Askdjango) 파이썬 기본문법 정리 16) 파이썬 인코딩, 디코딩 , 파이썬 encoding , decoding : http://myjorney.tistory.com/21




17 번째 포스팅입니다!


한 3일? 정도 동안 포스팅을 하지 못했네요... 공부한 것을 틈틈히 정리해야 하는데 쉽지가 않네요ㅠㅠ 스터디라도 해야겠어요~




오늘은 askdjango를 통해서 file object에 대해서 공부했던 것을 정리해보겠습니다.

 

file object는 원하는 파일을 read하거나 또는 원하는 데이터를 파일로 write하는데 주로 쓰임니다. 


추가로 기존 파일에 내용을 append 할 수 있습니다.



askdjango_chap11_file object

  • 이번 chapter의 agenda
    • 파일에 저장하고 읽어오기
    • with 절

  1. open( 파일 쓰기/읽기 함수)
  2. file_obj.close()
    • 주로 쓰는 file object의 멤버함수
  3. .write() , .read() ,.close() 
  4. encoding 옵션
    • 자동 인코딩/ 디코딩 인코딩 옵션
    • text mode 시에만 지정 가능하고, binary 모드에서는 지정불가
    • 미지정시에 OS 설정에 따라, 다른 인코딩이 지정
      • 한글 윈도우: cp949
      • 맥/리눅스: 대개 utf-8
        • 가급적이면 모든 파일은 utf-8 로 인코딩으로 생성하는게 정신 건강에 좋아요!



기본적으로 파일 쓰기/읽기를 지원하는 함수는 open 입니다!


우리는 often 함수를 통해 file_object 를 read하거나 write할 수 있습니다.



file_obj = open(파일경로, mode='r', encoding=None, 그외 옵셥생략)  바로 이런 형식으로 쓰이게 됩니다!



그럼 한 번 어떤 mode들이 있는지 살펴 보겠습니다.


파일을 열 때, 6가지 모드

  • r(read) ,w(write) ,a(append)
  • 인코딩 모드
    • t(text): 자동 인코딩/ 디코딩 모드
    • b(binary): 바이너리 모드
  • 지정 예
    rt, rb, wt, wb, at, ab

어떤 동작을 할 것인가와 인코딩 모드에 따라 대략 6가지 모드로 나뉘게 됩니다.



가장 먼저 , read 모드에 대해서 살펴보겠습니다.


r (read)

  • filecontent_unicode = open('filepath.txt', 'rt',
    encoding='utf8').read()

• 지정 경로에 파일이 없을 경우 IOError 예외 발생

• 지정 경로의 파일에 대해 읽기권한이 없을 경우 PermissionError 예 외 발생


mymelon_search = open('/Users/----/djangogirls/core/melon_search.py','rt',encoding='utf-8')



다음 코드를 보시면 제가 melon_search.py 라는 file을  read text 모드로 utf-8 형식으로 인코딩하여


mymelon_search라는 file instance에 저장하였습니다.



그 다음에 for 문과 print를 이용하여 결과를 출력하였습니다.


한 줄씩 print하기 위해 file class 의 멤버함수인 readlines()를 이용하였습니다. 



인터넷 서비스를 만들 때 서버에서 내용을 불러올 경우가 많기 때문에 그럴 때 이용하면 좋을 것 같습니다 !


w (write)

  • open('filepath.txt', 'wt', encoding='utf8').write('i want to be 해적왕') # unicode str

• 지정한 경로에 파일이 없으면 해당 내용으로 새 파일 생성.

• 지정한 경로에 파일이 존재할 경우, 존재했던 파일의 내용을 무시하고 새로 파일 생성.

• 지정 경로의 파일이 존재하지만, 쓰기권한이 없을 경우 PermissionError 예외 발생

• 지정 경로 내에 없는 디렉토리가 지정된 경우, FileNotFoundError 예외 발생


a ( append)

  • open('filepath.txt', 'at', encoding='utf8').write('i want to fiy') #
  • unicode str

• w (write) 와 유사

• 지정경로파일이존재할경우,해당내용에이어서,내용추가


t (text)

  • with open('filepath.txt', 'wt', encoding='utf8') as f: f.write('가나다')

• 지정 encoding으로, 자동 인코딩/디코딩과 함께 파일 쓰기/읽기


b (binary)

  • with open('filepath.txt', 'wb') as f:
    f.write('가나다'.encode('utf8'))

• 자동 인코딩/디코딩없이 파일 쓰기/읽기

• encoding 옵션 지정 불가

• 문자열이 아닌 파일을 읽어들일 때에는 인코딩/디코딩을 수행하면 안 되므로, 필히 binary모드를 지정

  • with open('myphoto.jpg', 'rb') as f:
    photo_data = f.read() # bytes 타입

with open('/Users/--/askdjango/askdjango_document/file_exam.txt','wt',encoding='utf8') as f:

    f.write('how have you been?')


이번에는  how have you been? world이라고 file_exam.txt 파일에 쓴 후 다시


read_file=open('/Users/----/askdjango/askdjango_document/file_exam.txt','rt',encoding='utf8')


read 모드로 접근하여 파일객체에 저장한 후 읽어 보았습니다.




닫고 싶어도...

  • 닫고 싶어도 닫기 전에 예외가 발생하면 닫을 수가 없.....
    ex) f = open('sample.txt', 'wt' ,encoding='utf8') f.write('hello') 1/0 # ZeroDivisionError 예외가 발생 f.close()
  • 다음과 같이 예외처리를 통해, 꼭 닫아줘야합니다.
    f= open('sample.txt', 'wt', encoding='utf8')

  •  try:
    • f.write('hello ')
    • 1/0 # ZeroDivisionError 예외가 발생

  • finally: # 예외 발생여부에 상관없이 무조건 실행 
    • f.close()
    • print('file closed.')



chap.11 file object 


오늘은 python의 파이썬 file objext 에 대해 알아봤습니다.


다음은 python with 절 에 대해 공부하겠습니다.


아 그리고 혹시 자료가 도움이 된다면 공감! 한 번씩 눌러주세요~~~ !




참고한 자료:

askdjango github: https://github.com/askdjango


아 그리고 저는 페이스북 , 유튜브 askdjango 에서도 도움을 많이 받아요.

https://www.facebook.com/groups/askdjango/


아 이번에 python /django 강의 사이트가 오픈했는데 저는 강의를 통해 큰 도움을 받고 있습니다.


 nomade.kr 



 



Askdjango) python 기본문법 정리1.python 코드 실행방법, python데이터 : http://myjorney.tistory.com/1


Askdjango) python 기본문법 정리)2.파이썬의 기본 자료구조 , python data structure(list/tuple/set/dict): http://myjorney.tistory.com/2


Askdjango) python 기본문법 정리)2.파이썬의 기본 자료구조 , python data structure(list/tuple/set/dict)(2): http://myjorney.tistory.com/3


Askdjango) python 기본문법 정리3)python 파이썬 블록문, 들여쓰기, 주석http://myjorney.tistory.com/4


Askdjango) 파이썬 기본문법 정리 4)python 파이썬 flow control (if,for,while) : http://myjorney.tistory.com/5


Askdjango) 파이썬 기본문법 정리 5)python 파이썬 함수, 파이썬 function, 파이썬 arguments , 파이썬 인자 : http://myjorney.tistory.com/6


Askdjango) 파이썬 기본문법 정리 6)python 파이썬 덕타이핑, 파이썬 duck typing : http://myjorney.tistory.com/9


Askdjango) 파이썬 기본문법 정리 7) 파이썬 iterable 객체 , python iterable 객체 : http://myjorney.tistory.com/10


Askdjango) 파이썬 기본문법 정리 8) 파이썬 callable 객체 , python callable 객체 :  http://myjorney.tistory.com/11


Askdjango) 파이썬 기본문법 정리 9) 파이썬 빌트인함수 , 파이썬 sorted 함수 :  http://myjorney.tistory.com/12


Askdjango) 파이썬 기본문법 정리 10) 파이썬 빌트인함수 , 파이썬 map,max,min 함수 :  http://myjorney.tistory.com/14


askdjango) 파이썬 기본문법 정리 13) 파이썬 빌트인함수 , 파이썬 sort 함수: http://myjorney.tistory.com/16


Askdjango) 파이썬 기본문법 정리 14) 파이썬 대소비교, 대소비교 homework 코딩: http://myjorney.tistory.com/17


Askdjango) 파이썬 기본문법 정리 15) 파이썬 import , module , package : http://myjorney.tistory.com/19




벌써 하다보니 ! 16개의 포스팅이 쌓였네요..! 


회사를 다니고 혼자 공부하다보니 공부하는 속도도 느리고 양도 많이 부족하지만 꾸준히 하다보면 언젠가는 python의 p자는 알 수 있지않을까요..!




그럼 오늘은 askdjango에서 encoding , decoding에 대해서 공부했던 것을 정리해보겠습니다.


다른 것은 몰라도 인코딩과 디코딩이 정확하게 먼지 개념을 확실히 집고 넘어가면 좋을 것 같아요!



askdjango_chap10_encoding,decoding


- 이번 chapter의 agenda


    - 문자 인코딩 / 디코딩

    

    - 유니코드

    

1. bit and byte


- 컴퓨터 데이터의 크기를 나타내는 단위


- 1 bit: 0과 1 -> 2가지 데이터를 표현 가능


- 1 byte: 8bit, 256(2**8)가지 데이터를 표현 가능 


2. character encoding (문자 인코딩)


- 문자나 기호들의 집합을 부호화(인코딩)하는 방법 


- 인코딩의 2가지 의미


    - 변환하는 방법: ascii, cp949, utf8, utf16, utf32 등

    

    - 변환하는 행위


- 하나의 동영상을 avi, mp4, mkv 등으로 인코딩(변환) 할 수 있듯이, 

  

  문자열도 여러가지 인코딩으로 변환할 수 있음.


- 인코딩의 방법에 따라 표현가능한 글자와 범위가 다름.



위의 예시를 확인해보면 chr(9) 는 \t -> 즉 tak 을 의미하는데 '\t'  라는 데이터를 ascii code 로 변환하면 십진수로 9


16진수도 0x09 가됩니다. 


자세한 사항은 나무위키에서 보시면 자세히 나와있어요!


https://namu.wiki/w/%EC%95%84%EC%8A%A4%ED%82%A4%20%EC%BD%94%EB%93%9C 



# Encoding & Decoding


- 일반적인 인코딩의 의미: 어떠한 값을 특정 룰에 맞춰 다른 형식으로 변환


    - 디코딩: 역변환

    

- 파이썬 유니코드 문자열(str) 에서의 인코딩 의미


     - 하나의 문자를 하나의 숫자로서 표현하는 다양한 mapping rule(인코딩에 따라 rule이  

       다름)

     - 해당 mapping rule에 맞춰 변환하는 것.

 

- 파이썬 바이트(bytes) 에서의 디코딩 의미


    - 해당 바이트를 유니코드로 디코딩할 수 있음을 알고 있다.

    

    - 해당 바이트가 인코딩된 인코딩에 따라, 디코딩을 수행하여 유니코드 문자열(str)을 획득


- 다양한 인코딩


    • ascii : 7비트를 사용한 인코딩

    • utf8, utf16, utf32 : 유니코드를 따르는 인코딩 방식

    • code page 949 : Microsoft의 한국어 문자 인코딩 테이블

    • code page 932 : Microsoft의 일본어 문자 인코딩 테이블



Unicode (유니코드)

  • 기존 인코딩의 한계를 극복하고, 전 세계의 모든 문자를 일관되게 표현할 수 있도록 설계된
    산업표준
  • UTF-8
    • 모든 유니코드 문자 표현 가능
    • 가변 길이 문자 인코딩 방식: 1바이트 ~ 4바이트

파이썬에서의 인코딩/디코딩

  • 유니코드 문자열(str 타입) -> 인코딩 -> bytes 타입 문자열
  • bytes 타입 문자열 -> 디코딩 -> 유니코드 문자열(str 타입)



저는 제 이름에 포함되어 있는 '두'라는 글자를 utf-8 이라는 인코딩 방식으로 인코딩(부호화) 하였습니다!


그랬더니 3byte의 부호인 b(byte를의미) '\xeb\x91\x90' 가 나왔습니다.



밑의 예는 다른 인코딩방식인 cp949 방식으로 인코딩했고 다른 값이 나오는 것을 확인할 수 있습니다.


또, '두'를 인코딩하여 저장한 변수 utf_string을 디코딩 방식인 ('utf-8')으로 디코딩해서 원래 글자인 '두'를 얻었습니다.



여기서 깨달으셨겠지만! 항상 인코딩한 방식으로 디코딩해야 인코딩한 사람이 전달하려고 했던 


대로 데이터를 전달받을수 있습니다.


이를 지키지 않으면..!



이런 errorcode가 발생할거에요!!!ㅎㅎ



파이썬에서의 인코딩/디코딩 tip

  • 파이썬 코드 안에서는 모두 유니코드 처리
    • 유니코드로 문자열을 처리하면, 글자수 세기도 쉬움.
  • 현재 파이썬 프로그램 밖과 문자열 데이터를 주고 받을 때
    • 보낼 때: 최대한 늦게 특정 인코딩으로 인코딩한 후에 전송
    • 받을 때: 최대한 빨리 인코딩으로 디코딩하여, 유니코드로 처리

** 어떤경우


- 문자열을 파일에 저장 & 읽어오기


- 데이터베이스 통신


- android & ios 앱과 통신


- 그 외, 다수 상황




출처 : Unicode 이해의 다양한 단계들

  1. 최종 사용자. ᄉᄇ 한글 깨지네.
  2. 습관적으로 ... charset=cp949 따위의 기존 레거시 코드를 ... 복사함.
  3. UTF-8을 쓰니 Unicode 완비되었다고 생각하는 사람.
  4. 세상에는 여러 종류의 인코딩이 존재하고 있다는 것을 아는 사람.
  5. 특정 문자셋을 사용하는 문자(열)을 바이트열로 인코딩하는 방식이 ...
  6. Unicode에 여러 평면(plane)이나 카테고리(category), ...
  7. Unicode 전문가. 각종 Unicode 정규화 형식에 대해 잘 알고 있고, ...


chap.10 끝


오늘은 python의 인코딩 디코딩 에 대해 알아봤습니다.


다음은  python file objext 에 대해 공부하겠습니다.


아 그리고 혹시 자료가 도움이 된다면 공감! 한 번씩 눌러주세요~~~ !




참고한 자료:

askdjango github: https://github.com/askdjango


아 그리고 저는 페이스북 , 유튜브 askdjango 에서도 도움을 많이 받아요.

https://www.facebook.com/groups/askdjango/


아 이번에 python /django 강의 사이트가 오픈했는데 저는 강의를 통해 큰 도움을 받고 있습니다.

 nomade.kr 





Askdjango) python 기본문법 정리1.python 코드 실행방법, python데이터 : http://myjorney.tistory.com/1


Askdjango) python 기본문법 정리)2.파이썬의 기본 자료구조 , python data structure(list/tuple/set/dict): http://myjorney.tistory.com/2


Askdjango) python 기본문법 정리)2.파이썬의 기본 자료구조 , python data structure(list/tuple/set/dict)(2): http://myjorney.tistory.com/3


Askdjango) python 기본문법 정리3)python 파이썬 블록문, 들여쓰기, 주석http://myjorney.tistory.com/4


Askdjango) 파이썬 기본문법 정리 4)python 파이썬 flow control (if,for,while) : http://myjorney.tistory.com/5


Askdjango) 파이썬 기본문법 정리 5)python 파이썬 함수, 파이썬 function, 파이썬 arguments , 파이썬 인자 : http://myjorney.tistory.com/6


Askdjango) 파이썬 기본문법 정리 6)python 파이썬 덕타이핑, 파이썬 duck typing : http://myjorney.tistory.com/9


Askdjango) 파이썬 기본문법 정리 7) 파이썬 iterable 객체 , python iterable 객체 : http://myjorney.tistory.com/10


Askdjango) 파이썬 기본문법 정리 8) 파이썬 callable 객체 , python callable 객체 :  http://myjorney.tistory.com/11


Askdjango) 파이썬 기본문법 정리 9) 파이썬 빌트인함수 , 파이썬 sorted 함수 :  http://myjorney.tistory.com/12


Askdjango) 파이썬 기본문법 정리 10) 파이썬 빌트인함수 , 파이썬 map,max,min 함수 :  http://myjorney.tistory.com/14


askdjango) 파이썬 기본문법 정리 13) 파이썬 빌트인함수 , 파이썬 sort 함수: http://myjorney.tistory.com/16


Askdjango) 파이썬 기본문법 정리 14) 파이썬 대소비교, 대소비교 homework 코딩: http://myjorney.tistory.com/17



이번에는 파이썬의 import , modules, package 에 대해 공부한 것을 복습해보겠습니다. 


파이썬에서도 그렇고 모든 프로그래밍 언어에서 import 는 정말 중요한 것 같습니다!


그 이유는 훌륭하고 정말 멋진 분들이 만들어주신 라이브러리! 들을 이용하면 개발하는데 시간을 엄청나게 줄이고


멋지게 만들 수 있기 때문이죠!




먼저 정의부터 내려 보겠습니다.


modules (모듈)

  • 다수의 함수/ 클래스들을 정의해둔 파이썬 소스코드 파일
-> 중요한 건 소스코드입니다. 그렇기 때문에 

장고를 예로 들면 views.py 파일에  Post_cbv 라는 클래스가 있다면

다른 파일에서 이 클래스를 이용하고 싶다면

ex)

from .views import Post_cbv  라고 선언해주면됩니다. (같은 디렉토리 안에 있다고 가정해서 .views 라고 썻습니다.)

여기서 module은 views..py 파일이 됩니다!


packages(팩키지)

  • 파이썬 소스코드가 들어있는 디렉토리
  • 해당 디렉토리에는 필히 init 파일이 있어야, 파이썬 패키지로 인식합니다. ( 파이썬 3.3 이상에서는 없어도 인식합니다)
  • 패키지를 import 할 때에는 init.py 가 import 대상이 됩니다.

패키지는 모듈들이 모아져 있는 디렉토리구나!

하나의 예를 들자면 저는 blog 라는 django 앱이 있다면 

blog 는 패키지가 되고, blog 안에 models.py 나 views.py 는 모듈이 되겠죠?!


import

  • 다른 파이썬 소스파일 내 함수/클래스등을 현재의 공간으로 가져오기
  • import 시점에서 해당 코드가 실행됩니다.



import module1 #module1.py 내 사항을 가져옴 module1.mysum(1,2) #module1.py 내 mysum 함수


import package1.package2 # package1/package2/init.py 사항을 가져옴 


package1.package2.mysum(1,2) # package1/package2/init.py 내 mysum 함수


import pkg1.pkg2.모듈 #package1/package2/모듈.py 내 사항을 가져옴 import 


package1.package2.모듈.mysum(1,2) # package1/package2/모듈.py 내 mysum 함수





import 한 이름 변경


from mylib import mysum4 


from mylib2 import mysum4 #앞서 import mysum4를 덮어씀


print(mysum(1,2,3,4)) #늦게 import된 mylib2.mysum4 만 사용됨




import시에 as를 통해 원하는 이름으로 변경 -> 저는 꽤 유용하게 쓰고 있습니다. 


beautifulsoup 같은 긴 클래스를 import 할 때 유용하더라고요!



from mylib import mysum4 as mylib_mysum4 


from mylib2 import mysum4 as mylib2_mysum4


print(mylib_mysum(1,2,3,4)) 


print(mylib2_mysum(1,2,3,4)



파이썬 소스코드 내 name

  • 해당 python 소스코드 파일명
    • pkg1/helloworld.py 일 경우: "helloworld"
  • 비교
    • 최초 진입 소스코드일 경우: "main" 으로 변경되어 실행
    • import 된 소스코드: 본래 name이 유지도니 채로 실행
  • 이를 통해, import시에는 실행되지 않고, 최초 진입 시에만 실행될 코드를 지정 가능.



오늘은 python의 package , module , import 에 대해 알아봤습니다.


다음은  python 인코딩, 디코딩 encoding , decoding 에 대해 공부하겠습니다.


아 그리고 혹시 자료가 도움이 된다면 공감! 한 번씩 눌러주세요~~~ !




참고한 자료:

askdjango github: https://github.com/askdjango


아 그리고 저는 페이스북 , 유튜브 askdjango 에서도 도움을 많이 받아요.

https://www.facebook.com/groups/askdjango/


아 이번에 python /django 강의 사이트가 오픈했는데 저는 강의를 통해 큰 도움을 받고 있습니다.

 nomade.kr 



- 지난 포스팅


Askdjango) python 기본문법 정리1.python 코드 실행방법, python데이터 : http://myjorney.tistory.com/1


Askdjango) python 기본문법 정리)2.파이썬의 기본 자료구조 , python data structure(list/tuple/set/dict): http://myjorney.tistory.com/2


Askdjango) python 기본문법 정리)2.파이썬의 기본 자료구조 , python data structure(list/tuple/set/dict)(2): http://myjorney.tistory.com/3


Askdjango) python 기본문법 정리3)python 파이썬 블록문, 들여쓰기, 주석http://myjorney.tistory.com/4


Askdjango) 파이썬 기본문법 정리 4)python 파이썬 flow control (if,for,while) : http://myjorney.tistory.com/5


Askdjango) 파이썬 기본문법 정리 5)python 파이썬 함수, 파이썬 function, 파이썬 arguments , 파이썬 인자 : http://myjorney.tistory.com/6


Askdjango) 파이썬 기본문법 정리 6)python 파이썬 덕타이핑, 파이썬 duck typing : http://myjorney.tistory.com/9


Askdjango) 파이썬 기본문법 정리 7) 파이썬 iterable 객체 , python iterable 객체 : http://myjorney.tistory.com/10


Askdjango) 파이썬 기본문법 정리 8) 파이썬 callable 객체 , python callable 객체 :  http://myjorney.tistory.com/11


Askdjango) 파이썬 기본문법 정리 9) 파이썬 빌트인함수 , 파이썬 sorted 함수 :  http://myjorney.tistory.com/12


Askdjango) 파이썬 기본문법 정리 10) 파이썬 빌트인함수 , 파이썬 map,max,min 함수 :  http://myjorney.tistory.com/14


askdjango) 파이썬 기본문법 정리 13) 파이썬 빌트인함수 , 파이썬 sort 함수 http://myjorney.tistory.com/16




이번에는 파이썬의 대소비교에 대해 공부한 것을 복습해보겠습니다. 


이번에도 역시 jupyter를 이용해 공부한 내용을 게시하겠습니다.



대소비교를 통해 우리는 정렬을 할 수 있습니다. 즉, 정렬을 하기위해서는 대소비교가 필요하죠!



대소비교

  • 정렬을 위해서는 각 값들간에 대소비교가 가능해야 합니다.
  • 대소비교가 불가능하면 정렬이 불가합니다.


먼저! 비교를 하기 위해서는 비교가능한 instance 끼리 비교를 해야합니다.


위와 같이 문자열과 int instance 를 비교하게 되면 TypeError 가 발생합니다.




문자열과 int로 구성된 list 비교입니다.


위의 예를 보면 친절하게 써있죠? 문자열은 첫번째 인덱스의 인스턴스부터 비교해서 판가름이 날 때까지 비교합니다.


list와 tuple도 문자열과 마찬가지라는 것을 확인할 수 있습니다.


강의자료에 다음과 같은 quiz 가 있었습니다. 같이 해보시면 좋을 것 같아요!




_____________________



저는 다음과 같이 design 해봤습니다!


먼저, 자릿수를 len() 함수로 파악했습니다. 그러면 1차 기준은 만족하죠.


len(str(value))


하지만, 2차 기준인 자릿수가 같은 것들 끼리도 일의 자리를 비교해야되기 때문에


저는 일의 자리숫자 순으로 더해줘서 반영해야 되는데    @. # , @ 를 자릿수, #을 1의 자리의 숫자크기로 반영해서 정렬해봤습니다.




이렇게요! 수고하셨습니다~


오늘은 대소비교와 과제 코딩 에 대해 복습했습니다.


다음은  python import 에 대해 공부하겠습니다.


아 그리고 혹시 자료가 도움이 된다면 공감! 한 번씩 눌러주세요~~~ !




참고한 자료:

askdjango github: https://github.com/askdjango


아 그리고 저는 페이스북 , 유튜브 askdjango 에서도 도움을 많이 받아요.

https://www.facebook.com/groups/askdjango/


아 이번에 python /django 강의 사이트가 오픈했는데 저는 강의를 통해 큰 도움을 받고 있습니다.

 nomade.kr 





- 지난 포스팅


Askdjango) python 기본문법 정리1.python 코드 실행방법, python데이터 : http://myjorney.tistory.com/1


Askdjango) python 기본문법 정리)2.파이썬의 기본 자료구조 , python data structure(list/tuple/set/dict): http://myjorney.tistory.com/2


Askdjango) python 기본문법 정리)2.파이썬의 기본 자료구조 , python data structure(list/tuple/set/dict)(2): http://myjorney.tistory.com/3


Askdjango) python 기본문법 정리3)python 파이썬 블록문, 들여쓰기, 주석http://myjorney.tistory.com/4


Askdjango) 파이썬 기본문법 정리 4)python 파이썬 flow control (if,for,while) : http://myjorney.tistory.com/5


Askdjango) 파이썬 기본문법 정리 5)python 파이썬 함수, 파이썬 function, 파이썬 arguments , 파이썬 인자 : http://myjorney.tistory.com/6


Askdjango) 파이썬 기본문법 정리 6)python 파이썬 덕타이핑, 파이썬 duck typing : http://myjorney.tistory.com/9


Askdjango) 파이썬 기본문법 정리 7) 파이썬 iterable 객체 , python iterable 객체 : http://myjorney.tistory.com/10


Askdjango) 파이썬 기본문법 정리 8) 파이썬 callable 객체 , python callable 객체 :  http://myjorney.tistory.com/11


Askdjango) 파이썬 기본문법 정리 9) 파이썬 빌트인함수 , 파이썬 sorted 함수 :  http://myjorney.tistory.com/12


Askdjango) 파이썬 기본문법 정리 10) 파이썬 빌트인함수 , 파이썬 map,max,min 함수 :  http://myjorney.tistory.com/14




이번에는 파이썬의 built-in 함수 중에 list의 멤버함수인 sort에 대해 공부한 것을 정리하도록 하겠습니다.


이번에도 역시 jupyter를 이용해 공부한 내용을 게시하겠습니다.


sort() 함수는 list 의 기본메서드로 지난번에 배운 sorted 함수와는 다릅니다.


다른 점을 비교해보고 어떻게 쓰이는지 공부해보도록 하겠습니다.



list의 sort 멤버함수

  • sorted: 다양한 iterable 객체를 정렬한 새로운 리스트를 리턴
    • 본 iterable 의 순서는 변경하지 않음.
  • list는 자체적으로 sort 함수를 지원
    • list의 순서를 변경.

-> 지난번에 공부한 sorted 함수는 list에서 사용할 수 있는 함수가 아닌 그냥 python에서 제공하는 함수였습니다.

위에 써있는 것처럼 sorted 함수는 원래 iterable 객체의 순서는 변경하지 않습니다.

예시를 통해 살펴보겠습니다! 


위에 말한 것과 같은 원래 exlist 는 그대로 입니다!


반면에 list의 멤버함수인 sort 는 해당 list의 객체 순서를 변경시킵니다.




차이점을 쉽게 아시겠죠?!



오늘은 built-in 함수 중에 list의 멤버함수 sort 에 대해 복습했습니다.


다음은  built -in function  대소비교에 대해 공부하겠습니다.


참고한 자료:

askdjango github: https://github.com/askdjango


아 그리고 저는 페이스북 , 유튜브 askdjango 에서도 도움을 많이 받아요.

https://www.facebook.com/groups/askdjango/


아 이번에 python /django 강의 사이트가 오픈했는데 저는 강의를 통해 큰 도움을 받고 있습니다.

 nomade.kr 








- 지난 포스팅


Askdjango) python 기본문법 정리1.python 코드 실행방법, python데이터 : http://myjorney.tistory.com/1


Askdjango) python 기본문법 정리)2.파이썬의 기본 자료구조 , python data structure(list/tuple/set/dict): http://myjorney.tistory.com/2


Askdjango) python 기본문법 정리)2.파이썬의 기본 자료구조 , python data structure(list/tuple/set/dict)(2): http://myjorney.tistory.com/3


Askdjango) python 기본문법 정리3)python 파이썬 블록문, 들여쓰기, 주석http://myjorney.tistory.com/4


Askdjango) 파이썬 기본문법 정리 4)python 파이썬 flow control (if,for,while) : http://myjorney.tistory.com/5


Askdjango) 파이썬 기본문법 정리 5)python 파이썬 함수, 파이썬 function, 파이썬 arguments , 파이썬 인자 : http://myjorney.tistory.com/6


Askdjango) 파이썬 기본문법 정리 6)python 파이썬 덕타이핑, 파이썬 duck typing : http://myjorney.tistory.com/9


Askdjango) 파이썬 기본문법 정리 7) 파이썬 iterable 객체 , python iterable 객체 : http://myjorney.tistory.com/10


Askdjango) 파이썬 기본문법 정리 8) 파이썬 callable 객체 , python callable 객체 :  http://myjorney.tistory.com/11


Askdjango) 파이썬 기본문법 정리 9) 파이썬 빌트인함수 , 파이썬 sorted 함수 :  http://myjorney.tistory.com/12


Askdjango) 파이썬 기본문법 정리 9) 파이썬 빌트인함수 , 파이썬 map,max,min 함수 :  http://myjorney.tistory.com/14





이번에는 파이썬의 built-in 함수 중에 map , max, min 함수에 대해 공부한 것을 정리하도록 하겠습니다.


이번에도 역시 jupyter를 이용해 공부한 내용을 게시하겠습니다.


map() 함수는 순회가능한 데이터에 있는 값들을 공통으로 변환하는데 사용할 수 있습니다.



예를 들어 , list1=[1,2,3,4,5] 모든 값들에 2씩 더하고 싶은데 하나씩 list1[0]= list[0] + 2 .... 이런식으로 하나씩 하기 귀찮습니다!!


이럴 때 map 함수를 이용하시면 됩니다!


map

  • 변형된 값의_generator = map(값을 변환할 함수, iterable)
  • 각 원소마다 지정함수가 호출되어, 리턴값으로 구성된 새로운 리스트를 리턴.


list인 [1,3,6,9] 의 모든 값들을 제곱하고 싶다면, 제곱하는 함수를 만든후 map(제곱하는 함수, [1,3,6,9] ) 를 하시면 원하는 값들을 얻을 수 있습니다.



max와 min 함수는 이름에서부터 알 수 있듯이 순회가능한 자료구조의 값들을 원하는 연산을 거친 후 가장 큰 값과 가장 작은 값을 반환합니다.



max / min

  • 최대값 = max(iterable, [, default=obj][, key=값을변환할함수])
  • 최소값 = min(iterable, [, default=obj][, key=값을변환할함수])
  • iterable에서 key 함수를 거친 결과값 중에 가장 큰 결과값의 원래값을 반환
  • iterable이 비었을 경우, default값을 반환
    -> 디폴트 갑을 지정하지 않고, iternable이 비었을 경우 valueerror:max()arg is an empty sequence 예외가 발생
  • default 값은 가급적으로 지정해주는 것이 좋다.







오늘은 built-in 함수 중에 map, max ,min 함수 에 대해 복습했습니다.


다음은  built -in function  list 의 멤버함수 중에 sort 에 대해서 다뤄보겠습니다.


참고한 자료:

askdjango github: https://github.com/askdjango


아 그리고 저는 페이스북 , 유튜브 askdjango 에서도 도움을 많이 받아요.

https://www.facebook.com/groups/askdjango/


+ Recent posts