In diesem Kapitel stellt der Autor kurz das Python-Datenmodell vor, hauptsächlich einige spezielle Methoden von Python. Zum Beispiel __len__, __getitem__. Und verwenden Sie ein Spielkartenprogramm, um diese Methoden zu erklären
Lassen Sie uns zunächst den Unterschied zwischen Tuple und Nametuple vorstellen:
Nametuple ähnelt ein Tupel-Datentyp. Neben der Möglichkeit, über Indizes auf Daten zuzugreifen, unterstützt es auch den Zugriff auf Daten über praktische Eigenschaftsnamen.
Der traditionelle Tupelzugriff ist wie folgt. Der Zugriff auf jedes Element muss über einen Index erfolgen. Diese Suchmethode ist sehr unintuitiv
tup1=(,,) tup1[1]
Verwenden Sie nametuple, um Folgendes zu konstruieren:
tup2=namedtuple(,[,,]) t1=tup2(,,) t1 t1.age t1.height t1.name
得到结果如下,namedtupel中tuple2是类型名,name,age,height是属性名字
从上面的访问可以看到,直接用t1.age的方法访问更加直观。当然也可以用索引比如t1[0]的方法来访问
namedtupe1 unterstützt auch iterativen Zugriff:
t t1: t
和元组一样,namedtupel中的元素也是不可变更的。如果执行t1.age+=1。将会提示无法设置元素
Traceback (letzter Aufruf zuletzt):
Datei „E:/py_prj/fluent_py.py“, Zeile 17, in < ;module>
t1.age+=1
AttributeError: can't set attribute
Schauen wir uns das Spielkartenbeispiel im an Buch, der Code Wie folgt:
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
rank self.ranks] __len__(self): len(self._cards) __getitem__(self, position): self._cards[position] __name__==: deck=FrenchDeck() len(deck) deck[1]
Definiert zunächst das Kartentupel Karte, Rang repräsentiert die Kartennummer und Farbe repräsentiert die Kartenfarbe. Dann definiert FrenchDeck zunächst die spezifische Bedeutung von Rängen und Farbe. Initialisieren Sie self._cards in __init__.
__len__gibt die Länge von self._cards zurück. __getitem__ gibt den spezifischen Kartenwert zurück.
Das Ergebnis ist wie folgt: Die Länge der Karte beträgt 52, wobei Deck[1] Karte(Rang='3',Farbe='Pik') ist
Sie können sehen, dass len(deck) tatsächlich die Methode __len__ aufruft. deck[1] ruft __getitem__ auf
Aufgrund der __getitem__-Methode kann auch ein iterativer Zugriff wie folgt durchgeführt werden:
d deck: d
Da es iterierbar ist, dann wir kann den Mechanismus des zufälligen Kartenhandelns simulieren.
from random import choice
print choice(deck)
Ergebnis erhalten:
Karte(Rang='9', Farbe='Herzen')
Als nächstes ansehen Ein weiteres Beispiel zu Vektoroperationen. Beispielsweise gibt es Vektor 1, Vektor1(1,2) und Vektor 2, Vektor2(3,4). Dann sollte das Ergebnis von Vektor1+Vektor2 (4,6) sein. Vektor1 und Vektor2 sind beide Vektoren. Wie wird die Operation implementiert? Die Methode lautet __add__, __mul__
Der Code lautet wie folgt:
vector: __init__(self,x=0,y=0): self.x=x self.y=y __repr__(self): % (self.x,self.y) __abs__(self): hypot(self.x,self.y) __bool__(self): bool(abs(self)) __add__(self,other): x=self.x+other.x y=self.y+other.y vector(x,y) __mul__(self, scalar): vector(self.x*scalar,self.y*scalar)
__name__==: v1=vector(1,2) v2=vector(2,3) v1+v2 abs(v1) v1*3
Das Operationsergebnis lautet wie folgt:
Hier implementieren __add__, __mul__, __abs__ Vektoradditions-, Multiplikations- und Modulo-Operationen.
Erwähnenswert ist die __repr__-Methode. Diese Methode wird aufgerufen, wenn das Objekt gedruckt werden muss. Wenn Sie beispielsweise vector(1,2) drucken, erhalten Sie vector(1,2). Andernfalls handelt es sich um eine Zeichenfolge, die das Objekt darstellt:
<br>
Das obige ist der detaillierte Inhalt vonPython-Lernreise. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!