function in a function accessing vars

Diez B. Roggisch deets at nospam.web.de
Wed Jun 6 05:58:18 EDT 2007


Jorgen Bodde wrote:

> Hi all,
> 
> I wanted to solve a small problem, and I have a function that is
> typically meant only as a function belonging inside another function.
>>From the inner function I want to access a variable from the outer
> function like;
> 
> def A():
>   some_var = 1
>   def B():
>     some_var += 1
> 
>   B()
> 
> 
> But this does not work, the function B does not recognize the
> some_var. In my mind I thought the scope would propagate to the new
> function and the vars would still be accessible.
> 
> How can I go about this?

The problem here is the way python determines which variables are local to a
function - by inspecting left sides.

I'm not sure if there are any fancy inspection/stackframe/cells-hacks to
accomplish what you want. But the easiest solution seems to be a
(admittedly not too beautiful)

def A():
   some_var = [1]
   def B(v):
       v[0] += 1

   B(some_var)


Or you should consider making A a callable class and thus an instance, and
some_var an instance variable. Always remember: "a closure is a poor
persons object, and an object is a poor mans closure"

Diez



More information about the Python-list mailing list