파이썬의 요상한 문법 문제

파이썬에는 딕셔너리라는게 있는데, 참 편리한 놈이다. 여기서 원소를 불러오려면 pop과 get메소드 중에 하나를 쓰면 되는데…

a={‘abc’:1}

for i in range(10):

print a.pop(‘abc’)

위와 같은 코드는 에러가 난다.

a={‘abc’:1}

for i in range(10):

print a.get(‘abc’)

그러나 위와 같은 코드는 에러가 나지 않는다. 대체 뭐지…

위의 문제는 get과 pop의 작동 방식 차이에서 오는 것이다. get은 해당 키워드의 값을 되돌려주고 원래 자료에는 아무 일도 하지 않는다. 하지만 pop은 해당 키워드의 값을 꺼내서 되돌려주고 원래 자료에서는 없애 버린다. get은 얻어오는거고 pop은 뽑아오는 것. 이게 왜 이렇게 되었냐면, 원래 pop은 배열을 스택처럼 쓰기 위해서 그런거라 카더라.


다음과 같은 일도 있다.







class mytest():













m=[]













def __init__(self, **kwds):


































self.m=[]































self.m+=[kwds.pop(‘xyz’)]



mya=[]



for i in range(10):

















mya+=[mytest(xyz=i).m]



print mya






위의 코드와







class mytest():













m=[]













def __init__(self, **kwds):














































self.m+=[kwds.pop(‘xyz’)]



mya=[]



for i in range(10):

















mya+=[mytest(xyz=i).m]



print mya







위의 코드는 결과값이 다르다. 차이는 init 안에서 self.m이 있느냐 없느냐의 차이인데. 왜 차이가 나는지 모르겠다. 객체지향 따위는 갖다 버린 파이썬 같으니라고…

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

Proudly powered by WordPress | Theme: Baskerville 2 by Anders Noren.

Up ↑

%d 블로거가 이것을 좋아합니다: