point
point
Exemple de portée et d'espace de noms
def scope_test():
def do_local():
spam = "local spam"
def do_nonlocal():
nonlocal spam
spam = "nonlocal spam"
def do_global():
global spam
spam = "global spam"
spam = "test spam"
do_local()
print("After local assignment:", spam)
# After local assignment: test spam
do_nonlocal()
print("After nonlocal assignment:", spam)
# After nonlocal assignment: nonlocal spam
do_global()
print("After global assignment:", spam)
# After global assignment: nonlocal spam
scope_test()
print("In global scope:", spam)
# In global scope: global spam
Définition de classe
class className:
<Phrase 1>
.
.
.
<Phrase N>
point
point
MyClass.i
et MyClass.f
sont valides dans les cas suivants)Référence d'attribut
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
Instanciation de classe
x = MyClass()
__init __ ()
est définie, __init () __
sera automatiquement appelée pour l'instance nouvellement créée.__init__()une fonction
def __init__(self):
self.data = []
__init __ ()
Instanciation de classe(Avec argument)
class Human:
def __init__(self, height, weight):
self.height = height
self.weight = weight
x = Human(165, 55)
print('height:', x.height, 'weight:', x.weight)
# height: 165 weight: 55
point
Référence des attributs de données et des méthodes
class MyClass:
def __init__(self):
pass
def f(self, word):
print(word)
x = MyClass()
#Ajouter / référencer des attributs de données
x.counter = 1 #Les attributs de données n'ont pas besoin d'être déclarés à l'avance
while x.counter < 10:
x.counter = x.counter * 2
print(x.counter) # 16
del x.counter
#Référence de la méthode
x.f("hello kawauso")
Stocker l'objet de méthode dans une variable
xf = x.f
xf('hello kawauso again') #production: hello kawauso again
point
Exemples de variables de classe et d'instance
class Dog:
kind = 'Shiba' #Variable de classe
def __init__(self, name):
self.name = name #Variable d'instance
taro = Dog('Taro')
jiro = Dog('Jiro')
#Référence aux variables de classe
print(taro.kind) #Shiba
print(jiro.kind) #Shiba
#Référence aux variables d'instance
print(taro.name) #Taro
print(jiro.name) #Jiro
point
self
(pas un mot réservé, mais tout le monde y est habitué)point
Échantillon d'héritage
class base():
def a(self):
print('Je base.est un.base.Appeler b')
self.b()
def b(self):
print('Je base.b.der.Remplacé par b')
class der(base):
def b(self):
print('Je der.b.')
b = base()
d = der()
b.a()
#Je base.est un.base.Appeler b
#Je base.b.der.Remplacé par b
d.a()
#Je base.est un.base.Appeler b
#Je der.b.
point
Python permet la définition de classe avec plusieurs classes de base
Il semble y avoir du volume, donc je vais résumer cela séparément
point
Exemple de mandaring de nom
class Mapping:
def __init__(self, iterable):
self.items_list = []
self.__update(iterable)
def update(self, iterable):
for item in iterable:
self.items_list.append(item)
__update = update #↑ mise à jour()Copie privée de la méthode
class MappingSubclass(Mapping):
# update()Tout en offrant une nouvelle signature de
#Existant__init__()Peut être utilisé sans détruire
def update(self, iterable):
for item in zip(keys, values):
self.items_list.append(item)
class Employee:
pass
john = Employee()
john.name = 'Jhon Doe'
john.dept = 'computer lab'
john.salary = 1000
read ()
ou readline ()
dans une classe qui récupère les données d'un tampon de chaîne, vous pouvez la passer comme argument à une fonction qui reçoit et formate les données d'un objet fichier.point
point
__next__ ()
, qui lève une exception StopIteration
lorsque les éléments sont épuisés, et la boucle for se termine là-dessus.__iter__()Quand__next__()
# __next__()Renvoie un objet avec une méthode__iter__()Définir une méthode
#Déjà__next()__Dans la classe définie par__iter__()Reviens toi-même
class Reverse:
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.data[self.index]
rev = Reverse('spam')
iter(rev)
for char in rev:
print(char)
# m
# a
# p
# s
point
yield
dans la partie qui renvoie les données__iter__ ()
et __next__ ()
, il est donc facile de générer des itérateurs.Exemple de générateur
def reverse(data):
for index in range(len(data)-1, -1, -1):
yield data[index]
for char in reverse('golf'):
print(char)
# f
# l
# o
# g
point
()
pour l'appliquer facilement.Exemple d'expression de générateur
sum(i*i for i in range(10)) #Total au carré
xvec = [10, 20, 30]
yvec = [7, 5, 3]
sum(x*y for x,y in zip(xvec, yvec)) #produit intérieur
from math import pi, sin
#table des péchés
sine_table = {x: sin(x*pi/180) for x in range(0, 91)}
#Mots uniques sur la page
unique_words = set(word for line in page for word in line.split())
#Président des anciens
valedictorian = max((student.gpa, student.name) for student in graduates)
data = 'golf'
list(data[i] for i in rage(len(data)-1, 1, -1))
Recommended Posts