Maison >développement back-end >Tutoriel Python >Questions délicates sur Python
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) ?
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
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
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
Si vous avez dit :
arg2 == 2
Vous avez raison ! En Python, nous avons 3 façons de passer un argument :
def myFun(arg1): print(arg1) myFun('arg1')
def myFun(*arg1): print(*arg1) my_tuple = ('arg1', 'arg2') myFun(my_tuple)
Retour à la question 3
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!