However, I didn't actually answer your question.

As Kent has already mentioned, eval is quite dangerous in python and to 
be avoided when possible.  I think it would be safer to do something 
like this:

l = locals()
for x, y in zip( varlist, data ):
    l[x] = y

or, more tersely:

[ locals()[x] = y for x, y in zip( varlist, data ) ]


This will accomplish what you're trying to do, but a dict really gives  
you greater functionality than assigning to local variables.

Python is *not* Matlab.  Functions that have the same name are not 
necessarily equivalent.  Plus, you should start to "think in Python" 
rather than "thinking in Matlab" and transliterating.


Eric Brunson wrote:
> A good python coder would probably not choose to pollute his name space 
> like that.  My choice would be to assign the elements of "data" to a 
> dictionary indexed by the strings in varlist like this:
>
> vardict = dict( zip( varlist, data ) )
>
> and reference "var1" as:
>
> vardict['var1']
>
> Happy Deer wrote:
>   
>> Dear all-
>>
>> I wonder whether there is a way in Python which can do what "eval" in 
>> Matlab  does.
>> Say, varlist is a 1 by k tuple/list, which contains strings for 
>> variable names.
>> For example, varlist=['var1','var2',...'vark']
>> data is a n by k matrix.
>> I want to assign each column in data to each variable in varlist and 
>> get var1=data[:,1]... vark=data[:,k]
>>
>> Anyone knows how to do this?
>>
>> Fangwen
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Tutor maillist  -  Tutor@python.org
>> http://mail.python.org/mailman/listinfo/tutor
>>   
>>     
>
> _______________________________________________
> Tutor maillist  -  Tutor@python.org
> http://mail.python.org/mailman/listinfo/tutor
>   

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to