Supposons que je veuille exécuter du code, par exempleexec() bytecode avec des locales arbitraires?
value += 5
l'intérieur d'un espace de noms de mon propre (si le résultat est essentiellement mydict['value'] += 5
). Il y a une fonction exec()
, mais je dois passer une chaîne là:
exec('value += 5', mydict)
et déclarations passant comme des chaînes semble étrange (par exemple il n'est pas colorisé de cette façon). Peut-il être fait comme:
def block():
value += 5
???(block, mydict)
? Le candidat évident pour la dernière ligne était exec(block.__code__, mydict)
, mais pas de chance: il soulève UnboundLocalError
environ value
. Je crois qu'il exécute essentiellement block()
, pas le code à l'intérieur du bloc, donc les affectations ne sont pas faciles - est-ce exact?
Bien sûr, une autre solution possible serait de démonter block.__code__
...
Pour votre information, je suis arrivé à la question en raison de this thread. En outre, c'est pourquoi certains (moi indécis) appel à une nouvelle syntaxe
using mydict:
value += 5
Notez comment cela ne jette pas l'erreur, mais ne change pas mydict
soit:
def block(value = 0):
value += 5
block(**mydict)
Quel est le problème avec les définitions de classes simples? –
Je ne suis pas sûr de ce que vous voulez dire à propos des cours. Je vais essayer de poster une réponse décrivant une idée possible que vous pourriez vouloir dire, mais n'hésitez pas à me corriger. –