Heim > Backend-Entwicklung > Python-Tutorial > Python-Lernreise

Python-Lernreise

巴扎黑
Freigeben: 2017-06-23 15:53:48
Original
1238 Leute haben es durchsucht

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]
Nach dem Login kopieren

Verwenden Sie nametuple, um Folgendes zu konstruieren:

tup2=namedtuple(,[,,])
t1=tup2(,,)
t1
t1.age
t1.height
t1.name
Nach dem Login kopieren
得到结果如下,namedtupel中tuple2是类型名,name,age,height是属性名字
Nach dem Login kopieren
从上面的访问可以看到,直接用t1.age的方法访问更加直观。当然也可以用索引比如t1[0]的方法来访问
Nach dem Login kopieren

namedtupe1 unterstützt auch iterativen Zugriff:

t t1:
    t
Nach dem Login kopieren
和元组一样,namedtupel中的元素也是不可变更的。如果执行t1.age+=1。将会提示无法设置元素
Nach dem Login kopieren

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
Nach dem Login kopieren
rank self.ranks]
    __len__(self):
        len(self._cards)
    __getitem__(self, position):
        self._cards[position]

__name__==:
    deck=FrenchDeck()
    len(deck)
    deck[1]
Nach dem Login kopieren

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
Nach dem Login kopieren

Da es iterierbar ist, dann wir kann den Mechanismus des zufälligen Kartenhandelns simulieren.

from random import choice
Nach dem Login kopieren
print choice(deck)
Nach dem Login kopieren

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)
Nach dem Login kopieren
__name__==:
    v1=vector(1,2)
    v2=vector(2,3)
    v1+v2
    abs(v1)
    v1*3
Nach dem Login kopieren

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: Die Funktionen von __repr__ und __str__ sind ähnlich

<br>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonPython-Lernreise. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage