# Quelle serait la sortie de ce code ?
def f(a,list=[]):
for i in range(a):
list.append(i*i)
print(list)
f(3)
f(2,[1,2,3])
f(2)
关键:当函数被定义时,list对象只能被创建一次.
分析和结论:f(3)和f(2)传入参数的时候没有带list对象,所以在函数第一次创建时,即f(3),list最后被创建为list=[0,1,4]; 接f(2,[1,2,3])这里是传入了list参数,所以之前的list不会被采用;而到了第三次创建函数对象f(2)的时候,list=[0,1,4]任然存在于内存中,所以第三个函数f(2)输出的是[0,1,4,0,1]
1.2,函数参数问题>>> def add(a, b=3): ... return a + b ... add(1, 2) add(1)
3 41.3, 函数参数
def add(a, b):
... print("a ", a)
... print("b ", b)
... return a + b
...
add(b=4, a=2)
a 2 b 4 61.4 *args, **kwargs 2, docstring
lien=http://t.csdn.cn/GiLRe
3, POO 3.1 methode magique ou dunder3.2Quelles sont les méthodes dunder ou magiques?
Les méthodes ayant deux préfixes soulignement des suffixes sont appelées méthodes dunder ou magiques. Ils sont principalement utilisés pour surcharger les méthodes. Certaines des méthodes que nous pouvons surcharger dans les classes sont __str__, __len__, __setitem__, __getitem__, etc.
>>> class Car:
... def __init__(self, color):
... self.color = color
...
... def change_color(self, updated_color):
... """This method changes the color of the car"""
... self.color = updated_color
...
>>> car = Car('red')
>>> help(car.change_color)
Help on method change_color in module __main__:
change_color(updated_color) method of __main__.Car instance
This method changes the color of the car
>>>
4, is和==的区别
== : 比较值
is : 比较内存地址
不可变数据类型比较
d=2 c=d c=2 d==c, id(d),id(c) # (True, 8463240, 8463240) d is c, id(d),id(c) # (True, 8463240, 8463240)
可变数据类型比较
a=[] b=[] a==b,id(a),id(b) # (True, 54770768, 58121256) 每次更新id值都变化 a is b,id(a),id(b) #(False, 54770768, 58121256)5 une copie superficielle et profonde
Copie superficielle: il crée la copie exacte comme l’original sans changer les références des objets. Désormais, les objets copiés et originaux font référence aux mêmes références d’objet. Ainsi, changer un objet affectera l’autre.
Le copie méthode de la copie module est utilisé pour la copie superficielle.
>>> from copy import copy >>> a = [1, [2, 3]] >>> b = copy(a) >>> a[1].append(4) >>> a [1, [2, 3, 4]] >>> b [1, [2, 3, 4]]
Copie profonde : il copie récursivement les valeurs de l’objet d’origine dans le nouvel objet. Nous devons utiliser le tranchage or copie profonde fonction du copie module pour la copie profonde.
>>> from copy import deepcopy >>> a = [1, [2, 3]] >>> b = deepcopy(a) >>> a[1].append(4) >>> a [1, [2, 3, 4]] >>> b [1, [2, 3]] >>> b[1].append(5) >>> a [1, [2, 3, 4]] >>> b [1, [2, 3, 5]]6 Que sont les itérateurs ?
lien =
Les itérateurs sont des objets en Python qui mémorisent leur état d’itération. Il initialise les données avec le iter méthode et renvoie l’élément suivant à l’aide de la Suivant méthode.
Nous devons appeler le suivant(itérateur) pour obtenir l’élément suivant de l’itérateur. Et nous pouvons convertir un type de données de séquence en un itérateur en utilisant le iter méthode intégrée.
>>> a = [1, 2] >>> iterator = iter(a) >>> next(iterator) 1 >>> next(iterator) 2 >>> next(iterator) Traceback (most recent call last): File "7 Que sont les générateurs ?", line 1, in StopIteration >>>
Les générateurs sont les fonctions qui renvoient un itérateur comme un objet générateur. Il utilise le rendement pour générer les données.
>>> def numbers(n): ... for i in range(1, n + 1): ... yield i ... >>> _10 = numbers(10) >>> next(_10) 1 >>> next(_10) 2 >>> next(_10) 3 >>> next(_10) 48 sequence
https://docs.python.org/3/library/stdtypes.html#other-built-in-types



