À l'aide de la fonction Python syntaxe def f(**kwargs)
, dans la fonction d'un argument mot-clé dictionnaire kwargs
est créé, et les dictionnaires sont mutables, donc la question est, si je modifie l' kwargs
dictionnaire, est-il possible que je puisse avoir des effets en dehors de la portée de ma fonction?
De ma compréhension de la façon dont le dictionnaire du déballage et de l'argument mot-clé emballage fonctionne, je ne vois pas de raison de croire qu'il peut être dangereux, et il me semble qu'il n'y a pas de danger de ce en Python 3.6:
def f(**kwargs):
kwargs['demo'] = 9
if __name__ == '__main__':
demo = 4
f(demo=demo)
print(demo) # 4
kwargs = {}
f(**kwargs)
print(kwargs) # {}
kwargs['demo'] = 4
f(**kwargs)
print(kwargs) # {'demo': 4}
Cependant, est-ce spécifique à l'implémentation, ou fait-il partie de l'Python spec? Suis-je le surplombant de toute situation ou de mise en oeuvre (sous réserve des modifications à des arguments qui sont eux-mêmes mutable, comme kwargs['somelist'].append(3)
) ce genre de modification peut être un problème?