Maison >développement back-end >Tutoriel Python >Questions délicates sur Python

Questions délicates sur Python

PHPz
PHPzoriginal
2024-07-25 01:00:52875parcourir

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 mon travail actuel, d'autres étaient inspirées par le Web.

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

Tricky Python Questions

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

Vous avez 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 (permet de passer 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 passer des arguments clé=valeur (kwargs nous permet de transmettre un nombre variable d'arguments 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 objectifs 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 obtiendra 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.

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!

Déclaration:
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