Per consentire al modulo di accedere allo spazio dei nomi dello script, è necessario passare lo spazio dei nomi alla funzione. Per esempio:
>>> import foo
>>> foo.set_a_to_three(globals(), locals())
>>> a
3
L'interno del codice sarebbe simile a questa:
def set_a_to_three(globalDict, localDict):
localDict['a'] = 3
Nota a margine: in questo caso, il dizionario globals non è necessaria, ma nei casi in cui è necessario modificare variabile globale, sarà necessario utilizzare il dizionario globale. L'ho incluso qui per questo motivo per rendere estensibile la funzione.
Tuttavia, sarebbe più semplice impostare a = 3
come ha detto Eli Sadoff. Non è una buona pratica passare lo spazio dei nomi ad altri programmi.
Che dire di solo 'a = 3'? –
È solo un esempio stupido. Farò cose più complesse che devono venire da "pippo" e essere assegnate da "pippo". So però come funziona l'assegnazione di Python normalmente. –
Non possibile, no. Si potrebbe fare in modo che una funzione modifichi i globali, ma può solo accedere ai globali del modulo in cui è definito, non da quello da cui proviene. – poke