이 장에서 저자는 파이썬 데이터 모델을 간략하게 소개하며, 주로 파이썬의 몇 가지 특별한 방법을 소개합니다. 예를 들어 __len__, __getitem__입니다. 그리고 카드 프로그램을 사용하여 이러한 방법을 설명합니다
먼저 Tuple과 nametuple의 차이점을 소개하겠습니다.
Nametuple은 tuple과 유사한 데이터 유형입니다. 인덱스를 사용하여 데이터에 액세스할 수 있을 뿐만 아니라 편리한 속성 이름을 사용하여 데이터에 액세스할 수도 있습니다.
전통적인 튜플 액세스는 다음과 같습니다. 각 요소에 대한 액세스는 인덱스를 통해 찾아야 합니다. 이 찾기 방법은 매우 비직관적입니다. .py", line 17, in
t1.age+=1
AttributeError: can't set attribute
살펴보겠습니다. 책에 나오는 플레잉 카드 예제는 다음과 같습니다.tup1=(,,) tup1[1]
tup2=namedtuple(,[,,]) t1=tup2(,,) t1 t1.age t1.height t1.name
실제로 len(deck)인 것을 볼 수 있습니다. __len__ 메소드를 호출합니다. Deck[1]은 __getitem__
을 호출합니다. __getitem__ 메서드로 인해 다음과 같이 반복 액세스도 수행할 수 있습니다.
得到结果如下,namedtupel中tuple2是类型名,name,age,height是属性名字
반복 가능하므로 무작위 거래 메커니즘을 시뮬레이션할 수 있습니다.
从上面的访问可以看到,直接用t1.age的方法访问更加直观。当然也可以用索引比如t1[0]的方法来访问
t t1: t
결과 얻기:
Card(rank='9',suit='hearts')
벡터 연산에 대한 또 다른 예를 살펴보겠습니다. 예를 들어 벡터 1의 벡터1(1,2)과 벡터 2의 벡터2(3,4)가 있습니다. 그러면 벡터1+벡터2의 결과는 (4,6)이 되어야 합니다. Vector1과 vector2는 모두 벡터입니다. 작업을 구현하는 방법은 무엇입니까? 메소드는 __add__, __mul__코드는 다음과 같습니다.和元组一样,namedtupel中的元素也是不可变更的。如果执行t1.age+=1。将会提示无法设置元素
collections namedtuple Card=namedtuple(,[,]) FrenchDeck: ranks=[str(n) n range(2,11)] + list() suits=.split() __init__(self): self._cards=[Card(rank,suit) suit self.suits
여기서 __add__, __mul__, __abs__는 각각 벡터 덧셈, 곱셈, 모듈러스 연산을 구현합니다.
__repr__ 방법을 언급할 가치가 있습니다. 이 메소드는 객체를 인쇄해야 할 때 호출됩니다. 예를 들어 벡터(1,2)를 인쇄하면 벡터(1,2)가 됩니다. 그렇지 않으면 개체를 나타내는 문자열입니다: <0x0000의 벡터 개체> __repr__과 __str__의 기능은 비슷합니다
rank self.ranks] __len__(self): len(self._cards) __getitem__(self, position): self._cards[position] __name__==: deck=FrenchDeck() len(deck) deck[1]
위 내용은 파이썬 학습 여정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!