¿Hay una manera de declarar que una función debe utilizar el alcance de la persona que llama?

Archop:

¿hay un feautre similar a C macros, que le permite la reutilización de código de una manera en línea, sin necesidad de crear un ámbito separado para ese pedazo de código?

por ejemplo:

a=3
def foo():
    a=4
foo()
print a

imprimirá 3, sin embargo lo quiero para imprimir 4.

Soy consciente de soluciones que implican objetos como clases o un diccionario global, sin embargo yo estoy buscando una solución más primitiva (como un decorador de la función, por ejemplo) que simplemente me permiten hacer cambios dentro del alcance de la persona que llama en su lugar.

muchas gracias

edit: cualquier solución que requiere que especifique cuáles son las variables que voy a utilizar o declarar un "espacio de nombres" como objetos mutabale de antemano no es una solución que estoy buscando.

jsbueno:

En este caso, sólo tiene que utilizar la globalpalabra clave:

a=3
def foo():
    global a
    a=4
foo()
print (a)

Que modifica el ámbito exterior, si es global.

Si el ámbito externo es una función, que se hace con la nonlocalpalabra clave en su lugar - que se introdujo con Python 3.0.

ámbito dinámico

Cambiar el ámbito de la función de llamada sin embargo, no es una premisa de Python, y es una característica del lenguaje.

Se puede hacer. Pero con sólo llamar C del API privada (para hornear valores 'locales' de nuevo en las variables locales rápidas) y no es una práctica buena definettely.

Hacerlo a través de un decorador de la magia también sería posible, pero el decorador tendría que volver a escribir el código de bytes en la función interna - reemplazando cada acceso a una variable 'no local' por recuperar y actualizar el valor de la caler locals, y, al final de la función - https://programtalk.com/python-examples/ctypes.pythonapi.PyFrame_LocalsToFast/

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=398976&siteId=1
Recomendado
Clasificación