Re: [Tutor] corresponding command in Python to "eval" in Matlab
Eric Brunson wrote: > 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. This will only work at global scope where locals() is globals() and writable. In function scope assigning to locals()[...] does not change the local namespace: In [27]: def foo(): : locals()['x'] = 1 : print x : : In [28]: foo() Traceback (most recent call last): File "", line 1, in File "", line 3, in foo : global name 'x' is not defined Kent ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] corresponding command in Python to "eval" in Matlab
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] A better way to do this is to make a dictionary that holds the values: values = dict(var1=data[:,1]... vark=data[:,k]) or perhaps just a list with the columns as I have already shown you in a separate email. Python is not Matlab, it will serve you well in the long run to learn the Python way of Python instead of trying to write Matlab programs in Python. Python's support for lists and dictionaries is very strong and useful. Kent ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] corresponding command in Python to "eval" in Matlab
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
Re: [Tutor] corresponding command in Python to "eval" in Matlab
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] corresponding command in Python to "eval" in Matlab
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