Help with changes in traceback stack from Python 2.7 to Python 3.x

Andrew Konstantaras akonsta at icloud.com
Sun Apr 27 17:51:54 EDT 2014


I guess I am missing something big as I am looking for a shorthand way of doing the following:

           dctA = dict(x=x, y=y, ... n=n)

This is, as I understand it a very natural way of using a dictionary.  It seems that this syntax is unnecessarily redundant and hence my goal of writing something more compact.  Perhaps the way I am doing it is a little unorthodox, but the ultimate use of a dictionary is, as I understand it, completely in line with how dictionaries were designed to be used.  In my other code, I often use these dictionaries to pass arguments to functions and return results.  It allows me great flexibility without breaking existing code.  I pack a dictionary before passing and unpack when retrieving. 

I will give the locals approach a try, it seems a little more clumsy than simply passing the variables to the function.

Thanks again for your input.

---Andrew

On Apr 27, 2014, at 01:18 PM, Chris Angelico <rosuav at gmail.com> wrote:

> On Mon, Apr 28, 2014 at 4:56 AM, Andrew Konstantaras <akonsta at icloud.com  > wrote:
>        > Thanks for the response and I can certainly see that this old code can be
>        > improved, but I respectfully disagree on the utility of this function. The
>        > flexibility of passing any number of arguments to the function and returning
>        > a dictionary is much easier than writing out dict(x=x, y=y, ...n=n). I also
>        > believe that "makeDict" makes my code very readable.
>
> There is another option. You could pass a set of strings and a
> dictionary of all locals, and have it fetch them. However, I
> personally disagree about the readability; yes, it's nice and clean,
> but it does something which 99% of Python programmers won't expect.
> It's like writing a numeric type in C++ and then overloading the +
> operator to concatenate the decimal representations.
>
>        > My question is around finding the names of the variables passed to a
>        > function from within the function. I have spent many hours looking on the
>        > web looking for where in the frames and stacks this information is stored.
>        > Does anyone have any insight where/how I can find the variables associated
>        > with the arguments in
>        >
>        > dctA = makeDict(strA, intA)
>        >
>        > from within the function
>        >
>        > def makeDict(*args):
>        > .... #need to find the variable names "strA" and "intA" in this
>        > context
>
> It isn't stored. What would be the names provided if, for instance, you do this:
>
> dctA = makeDict("literal", intA + intB)
>
> ? There is no name for a literal or an expression. One of the
> principles of Python is that an object is itself, regardless of the
> name used to reference it. You're violating that by peeking into the
> source code; you're fundamentally going against what every Python
> programmer will expect.
>
> Please don't do this. Take a step back, see what problem you're really
> trying to solve, and solve that problem another way. Maybe a simple
> DSL will help here, or possibly even just string interpolation,
> depending on what you're trying to do. If you need help, show us some
> of the code that uses makeDict, and we can advise.
>
> Just please don't inflict makeDict onto any subsequent maintainer.
>
> ChrisA
> -- 
> https://mail.python.org/mailman/listinfo/python-list
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20140427/c50b4cc6/attachment.html>


More information about the Python-list mailing list