Maison > développement back-end > Tutoriel Python > parcours d'apprentissage de Python

parcours d'apprentissage de Python

巴扎黑
Libérer: 2017-06-23 15:53:48
original
1241 Les gens l'ont consulté

Dans ce chapitre, l'auteur présente brièvement le modèle de données Python, principalement certaines méthodes spéciales de Python. Par exemple, __len__, __getitem__. Et utilisez un programme de cartes à jouer pour expliquer ces méthodes

Tout d'abord, introduisons la différence entre Tuple et nametuple :

Nametuple est similaire à un type de données tuple. En plus de pouvoir accéder aux données à l'aide d'index, il prend également en charge l'accès aux données à l'aide de noms de propriétés pratiques.

L'accès traditionnel aux tuples est le suivant. L'accès à chaque élément doit être trouvé via index. Cette méthode de recherche est très peu intuitive

tup1=(,,)
tup1[1]
Copier après la connexion

Utilisez nametuple pour construire :

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

namedtupe1 prend également en charge l'accès itératif :

t t1:
    t
Copier après la connexion
和元组一样,namedtupel中的元素也是不可变更的。如果执行t1.age+=1。将会提示无法设置元素
Copier après la connexion

Traceback (dernier appel le plus récent) :

Fichier "E:/py_prj/fluent_py.py", ligne 17, dans < ;module>

t1.age+=1

AttributeError : impossible de définir l'attribut

Jetons un coup d'œil à l'exemple de carte à jouer dans le book, le code Comme suit :

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
Copier après la connexion
rank self.ranks]
    __len__(self):
        len(self._cards)
    __getitem__(self, position):
        self._cards[position]

__name__==:
    deck=FrenchDeck()
    len(deck)
    deck[1]
Copier après la connexion

Définit d'abord le tuple de la carte Card, le rang représente le numéro de la carte et la couleur représente la couleur de la carte. Ensuite, FrenchDeck définit d’abord la signification spécifique des rangs et des couleurs. Initialisez self._cards dans __init__.

__len__ renvoie la longueur des self._cards. __getitem__ renvoie la valeur spécifique de la carte.

Le résultat est le suivant, la longueur de la carte est de 52, où le deck[1] est Card(rank='3',suit='spades')

Vous pouvez voir que len(deck) appelle en fait la méthode __len__. deck[1] appelle __getitem__

Grâce à la méthode __getitem__, un accès itératif peut également être effectué, comme suit :

d deck:
    d
Copier après la connexion

Puisqu'il est itérable, alors nous peut simuler le mécanisme de distribution aléatoire de cartes.

from random import choice
Copier après la connexion
print choice(deck)
Copier après la connexion

Obtenez le résultat :

Card(rank='9', suit='hearts')

Regarder ensuite Un autre exemple, concernant les opérations vectorielles. Par exemple, il existe le vecteur 1, vecteur1(1,2) et le vecteur 2, vecteur2(3,4). Alors le résultat de vecteur1+vecteur2 devrait être (4,6). Vector1 et vector2 sont tous deux des vecteurs, comment mettre en œuvre l'opération ? La méthode est __add__, __mul__

Le code est le suivant :

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)
Copier après la connexion
__name__==:
    v1=vector(1,2)
    v2=vector(2,3)
    v1+v2
    abs(v1)
    v1*3
Copier après la connexion

Le résultat de l'opération est le suivant :

Ici, __add__ ,__mul__,__abs__ implémentent respectivement les opérations d'addition, de multiplication et de modulo vectorielles.

Il convient de mentionner la méthode __repr__. Cette méthode est appelée lorsque l'objet doit être imprimé. Par exemple, lors de l'impression de vector(1,2), vous obtenez vector(1,2). Sinon, c'est une chaîne représentant l'objet : . Les fonctions de __repr__ et __str__ sont similaires

.

<br>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal