Explication des tâches Python avec entretiens d'embauche

Salut, Khabrovites! En prévision du lancement d'un nouveau fil de discussion sur le cours "Développeur Web en Python" nous souhaitons partager une nouvelle traduction utile. C'est parti!



Ayant de nouveau passé plusieurs entretiens et réussi les tests, j'ai remarqué que les enquêteurs aiment les tâches comme les suivantes.

def f(x, l=[]): for i in range(x): l.append(i * i) return l >>> f(2) >>> f(3, [0, 1, 2]) >>> f(3) 


Question: Que produira ce code?

La sortie des deux premières lignes est assez évidente, mais le résultat de la troisième ligne f(3) ne m'a pas semblé aussi simple. Voyons ce qui se passe après l'initialisation de la fonction f . Pour exécuter ce code, j'utiliserai IPython .

 >>> f <function __main__.f(x, l=[])> >>> f.__defaults__ ([],) 


La liste vide que nous voyons du résultat de l'exécution de f.__defaults__ est la variable l dans le code de la fonction.

 >>> f(2) [0, 1] 


Rien de spécial.

 >>> f <function __main__.f(x, l=[0, 1])> >>> f.__defaults__ ([0, 1],) 


Cependant! Nous voyons maintenant que la variable l a la valeur [0, 1] raison de la variabilité de l'objet liste en Python et en passant les arguments de la fonction comme référence.

 >>> f(3, [0, 1, 2]) [0, 1, 2, 0, 1, 4] >>> f <function __main__.f(x, l=[0, 1])> 


Rien de spécial non plus. Juste passer l'objet list tant que variable l .

 >>> f(3) [0, 1, 0, 1, 4] >>> f <function __main__.f(x, l=[0, 1, 0, 1, 4])> 


Et maintenant le plus intéressant. Lorsque vous exécutez f(3) , Python n'utilise pas la liste vide définie dans le code de fonction, il utilise la variable l avec les valeurs de f.__defaults__ ([0, 1]) .

PS

Si vous avez besoin d'une fonction qui utilise une liste vide après chaque appel, vous devez utiliser quelque chose comme ça (définissez la valeur de 'l' sur 'None' ).

 def f(x, l=None): if l is None: l = [] for i in range(x): l.append(i * i) return l >>> f(2) [0, 1] >>> f(3, [0, 1, 2]) [0, 1, 2, 0, 1, 4] >>> f(3) [0, 1, 4] 


Conclusion


J'ai donc identifié l'une des tâches de test les plus populaires pour une interview. Cet article est destiné à montrer que vous ne pouvez pas toujours compter sur votre intuition, comme moi-même :-).

Nous espérons que cette traduction vous sera utile. Traditionnellement, nous attendons vos commentaires et à bientôt sur le parcours .

Source: https://habr.com/ru/post/fr459518/


All Articles