"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Questions délicates sur Python

Questions délicates sur Python

Publié le 2024-07-29
Parcourir:473

Au cours des deux dernières années, j'ai utilisé Python comme langage de programmation principal. J'ai pensé que c'était peut-être une bonne raison d'aller plus loin, comme je l'ai fait dans Tricky JavaScript Questions. Certaines des questions suivantes concernaient des problèmes que je devais résoudre dans le cadre de mon travail actuel, d'autres étaient inspirées par le Web.

Alors, êtes-vous prêt à vous époustoufler (à partir de la question Python) ?

Tricky Python Questions

Des questions

Avis 1 ! : À chaque question, il y a une réponse avec une explication (lien sous chaque élément).
Avis 2 ! : Pour chaque question, réfléchissez à quel sera le résultat.

Question 1
exapmle_dict = dict()
exapmle_dict.a = "string"
print(exapmle_dict)

Allez à la réponse 1

Question 2
class Json:
    def __init__(self, *args, **kwargs):
        import json

    def print_dict_as_json(self, obj):
        print(json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})

Allez à la réponse 2

Question 3
def myFun(arg1, arg3, **kwargs):
    for key, value in kwargs.items():
        print("%s == %s" % (key, value))


my_dict = {'arg1':1, 'arg2': 2}
myFun(**my_dict, arg3=3)

Allez à la réponse 3

Question 4
def add_to_all_1(arr):
    for i in range(len(arr)):
        arr[i]  =1

def my_func():
    arr = [1,2,3]
    add_to_all_1(arr)
    arr2 = arr
    print(arr2)

my_func()

Allez à la réponse 4

Réponses

Réponse à la question 1

Si vous avez dit :

{"a": "string"}

malheureusement, vous vous trompez, la réponse est :

AttributeError: 'dict' object has no attribute 'a'

Si vous m'aimez et que vous venez d'abord de javascript, le dictionnaire d'accès (objet en Javascript) n'est pas par point comme en Javascript, vous ne pouvez y accéder que par [], et à l'intérieur de la clé vous souhaitez définir "a".

Retour à la question 1

Réponse à la question 2

Si vous avez dit :

{"a": "string"}

Vous vous trompez encore, la réponse est :

...
NameError: name 'json' is not define

Vous connaissez peut-être les différences entre la portée locale et globale en Python (sinon, vous devriez lire ceci : Python Scope). Le __init__ est une fonction, l'importation se fait dans une portée locale donc elle ne sait pas ce qu'est json. Vous pouvez le réparer en l'important globalement comme ceci :

import json

class Json:
    def print_dict_as_json(self, obj):
        print(json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})

Ou de manière plus avancée :

class Json:
    import json as json
    def print_dict_as_json(self, obj):
        print(self.json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})

Vous pouvez voir l'utilisation de l'importation dans la classe pour plus de détails.

Retour à la question 2

Réponse à la question 3

Si vous avez dit :

arg2 == 2

Tu as raison! En Python, nous avons 3 façons de passer un argument :

  • Par l'argument lui-même :
def myFun(arg1):
   print(arg1)

myFun('arg1')
  • Par *args - liste ou tuples d'arguments (nous permet de transmettre un nombre variable d'arguments non-mots-clés à une fonction Python) :
def myFun(*arg1):
   print(*arg1)

my_tuple = ('arg1', 'arg2')
myFun(my_tuple)
  • Par kwargs peut transmettre des arguments clé=valeur (kwargs nous permet de transmettre un nombre variable d'arguments de mot-clé à une fonction Python) - comme dans la question. Si vous souhaitez en savoir plus sur le sujet, vous pouvez lire ici : freecodecamp - Comment utiliser *args et **kwargs en Python

Retour à la question 3

Réponse à la question 4

La réponse est:

[2, 3, 4]

Pour certaines personnes qui connaissent les domaines d'application et les missions, cela peut sembler une question assez simple. Pour ceux qui ne le savent pas, python enregistre la mémoire variable comme référence, donc dans ce cas, l'arr pointera vers une référence dans une mémoire -> la fonction changera les valeurs (mais toujours la même référence) -> arr2 le fera obtenir l'adresse de référence de arr mais après que les valeurs aient été modifiées.

Retour à la question 4

Merci d'avoir lu cet article. J'espère que vous avez apprécié et appris de nouvelles choses. Si vous avez des questions ou des suggestions, veuillez laisser un commentaire.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/tomeraitz/tricky-python-questions-45gg?1 En cas de violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3