Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!goblin1!goblin.stu.neva.ru!uio.no!news.tele.dk!news.tele.dk!small.news.tele.dk!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.001 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'syntax': 0.04; 'that?': 0.05; 'subject:Python': 0.06; 'assign': 0.07; 'responding': 0.07; 'variables': 0.07; 'arguments': 0.09; 'compact': 0.09; 'function,': 0.09; 'handful': 0.09; 'seemed': 0.09; 'stack,': 0.09; 'subject:2.7': 0.09; 'used.': 0.09; 'cc:addr:python-list': 0.11; 'subject:Help': 0.11; 'dict': 0.16; 'dictionaries': 0.16; 'dictionary,': 0.16; 'dictionary.': 0.16; 'expression,': 0.16; 'message-id:@me.com': 0.16; 'received:mac.com': 0.16; 'redundant': 0.16; 'shorthand': 0.16; 'tuple': 0.16; 'unpack': 0.16; 'unpacking': 0.16; 'flexibility': 0.16; 'wrote:': 0.18; 'code.': 0.18; 'trying': 0.19; 'passing': 0.19; 'seems': 0.21; 'code,': 0.22; 'preferred': 0.22; 'cc:addr:python.org': 0.22; 'creating': 0.23; 'decide': 0.24; 'cc:2**0': 0.24; 'cc:no real name:2**0': 0.24; '>': 0.26; 'class.': 0.26; 'equivalent': 0.26; 'mention': 0.26; 'pass': 0.26; 'values': 0.27; 'function': 0.29; 'andrew': 0.30; 'returned': 0.30; 'especially': 0.30; 'url:mailman': 0.30; 'code': 0.31; 'easier': 0.31; 'breaking': 0.31; 'allows': 0.31; 'class': 0.32; 'text': 0.33; 'url:python': 0.33; 'call.': 0.33; 'guess': 0.33; 'subject:from': 0.34; 'subject:with': 0.35; "can't": 0.35; 'advice': 0.35; 'something': 0.35; 'but': 0.35; 'add': 0.35; 'there': 0.35; 'url:listinfo': 0.36; 'doing': 0.36; 'charset:us-ascii': 0.36; 'thanks': 0.36; 'url:org': 0.36; 'changing': 0.37; 'two': 0.37; 'implement': 0.38; '(i.e.,': 0.38; 'received:17': 0.38; 'pm,': 0.38; 'little': 0.38; 'url:mail': 0.40; 'how': 0.40; 'skip:u 10': 0.60; 'liked': 0.60; 'results.': 0.60; 'worry': 0.60; 'new': 0.61; 'simply': 0.61; 'more': 0.64; 'love': 0.65; 'great': 0.65; 'content-type:multipart/related': 0.67; 'natural': 0.68; 'of:': 0.68; 'goal': 0.75; 'yourself': 0.78; '2014,': 0.84; 'actually,': 0.84; 'batchelder': 0.84; 'header:In-reply-to:1': 0.84; 'try,': 0.84; 'responses': 0.93; 'ultimate': 0.93 MIME-version: 1.0 Content-Type: multipart/alternative; boundary="Boundary_(ID_eHafZk95FNkRyicCsnmgKg)" To: Ned Batchelder From: Andrew Konstantaras Subject: Re: Help with changes in traceback stack from Python 2.7 to Python 3.x Date: Mon, 28 Apr 2014 19:50:05 +0000 (GMT) X-Mailer: iCloud MailClient14B.126622 MailServer14B.15638 X-Originating-IP: [66.194.65.197] In-reply-to: X-MANTSH: 1TEIXREEbG1oaGkdHB0lGUkdDRl5PWBoaHhEKTEMXGx0EGx8SBBscHwQdHhAbHho fGhEKWE0XSxEKbX4XGhEKTFkXGxobGxEKWUkXEQpZXhdobnkRCkNOF0sbHhpiTk1mHB9/XRl4c wcZeRsTHxpoHBEKWFwXGQQaBB0HTUsdEkhJHEwFGx0EGx8SBBscHwQdHhAbHhofGxEKXlkXYUZ sfWURCkxGF2hraxEKQ1oXGx0EGx8SBBscGwQTExEKQl4XGxEKRFgXGBEKREkXGxEKQkUXbB5YR XpfaEtYfGkRCkJOF2tFGlJQHkNcWVxoEQpCTBdtfB9fZFJHS2tpExEKQmwXb2B7e21mUn9kRkQ RCkJAF20TeGZHXk1TeGlOEQpwaBdnaQF4eFlcQU9gZhEKcGgXZUN8YXMee1sTQR8RCnBoF24bU kJscAVMZn1CEQpwaBdmUBxOekd+R0UTbBEKcGgXbhJtHEh6XmtmUn8RCnB/F2dgG1BGTgVsbEs dEQpwfxdjRUcbU1JDb2IZcxEKcF8XaExhGkZHbEdMU2gRCnBsF2h+Qh5eX2BtSXxkEQpwTBdkS RJ7SW4Yf11TUhEKcEMXZ3xoXUFhWR0cQ3IR X-CLX-Spam: false X-CLX-Score: 1011 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.11.96,1.0.14,0.0.0000 definitions=2014-04-28_03:2014-04-28,2014-04-28,1970-01-01 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=7.0.1-1402240000 definitions=main-1404280309 Cc: python-list@python.org X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 168 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1398718221 news.xs4all.nl 2935 [2001:888:2000:d::a6]:48552 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:70694 --Boundary_(ID_eHafZk95FNkRyicCsnmgKg) Content-type: text/plain; charset=utf-8; format=flowed Content-transfer-encoding: quoted-printable On Apr 28, 2014, at 12:36 PM, Ned Batchelder wrote= : > On 4/27/14 5:51 PM, Andrew Konstantaras wrote: > > I guess I am missing something big as I am looking for a shorth= and way > > of doing the following: > > > > dctA =3D dict(x=3Dx, y=3Dy, ... n=3Dn) > > > > Yes, your makeDict(x, y) is a shorthand for dict(x=3Dx, y=3Dy), but ther= e > are many things you can do with dict that you can't do with makeDict. > What is the makeDict equivalent of: > > dict(x=3D12, y=3Dself.y, z=3Da+b) > > The code you have allows you more compact expression, but it brings > fragility and surprise. > > > This is, as I understand it a very natural way of using a dicti= onary. > > It seems that this syntax is unnecessarily redundant and hence = my goal > > of writing something more compact. Perhaps the way I am doing i= t is a > > little unorthodox, but the ultimate use of a dictionary is, as = I > > understand it, completely in line with how dictionaries were de= signed to > > be used. In my other code, I often use these dictionaries to pa= ss > > 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. > > Perhaps you want to create a class instead? If you find yourself > passing more than a handful of arguments to a function, and especially > more than a handful of values returned from a function, then a class > with methods might be a better way to combine state and behavior. > > Also, keep in mind that you can return a tuple from a function if you > want to return two or three values and assign them to names: > > x, y, z =3D compute_xyz() > > You mention unpacking your dictionary after the function call. How do > you do that? Isn't that a cumbersome and repetitive operation? One of the reasons I like using the dictionary over the tuple is that if I= have a function that grows in functionality (i.e., I decide to return mor= e data for new scenarios), I can just add the new object to the dictionary= and I don't have to worry about changing the code every where else that u= sed to call the function.=20 =20 Actually, that is one of the nice features of using a dictionary, I can ch= eck if the key is there and if it is pull it out. As I was dusting off th= is old code, I considered trying to implement this functionality through b= y creating a class. I never liked going through the stack, it seemed hack= y, but I came to love using dictionaries as they have some great built in = features.=20 Again, thanks for the advice and I will focus on the class implementation. =EF=BB=BF > > > > > I will give the locals approach a try, it seems a little more c= lumsy > > than simply passing the variables to the function. > > > > Thanks again for your input. > > > > ---Andrew > > BTW, it's a little easier to follow the threads of conversation if you > put your responses after the text you are responding to. This is known > as bottom-posting, and is preferred to top-posting as you did here. > > > --=20 > Ned Batchelder, http://nedbatchelder.com > > --=20 > https://mail.python.org/mailman/listinfo/python-list --Boundary_(ID_eHafZk95FNkRyicCsnmgKg) Content-type: multipart/related; boundary="Boundary_(ID_8vuJVmZQDQz8qG4ivfJYyg)"; type="text/html" --Boundary_(ID_8vuJVmZQDQz8qG4ivfJYyg) Content-type: text/html; CHARSET=US-ASCII Content-transfer-encoding: quoted-printable


On Apr 28, 2014, at 12:36 PM, Ned Batchelder <n= ed@nedbatchelder.com> wrote:

On 4/27/14 5:51 PM, Andrew Konsta= ntaras wrote:
       > I guess I am missing som= ething big as I am looking for a shorthand way
      &n= bsp;> of doing the following:
       >
&= nbsp;      > dctA =3D dict(x=3Dx, y=3Dy, ... n=3Dn)
=        >

Yes, your makeDict(x, y) is a short= hand for dict(x=3Dx, y=3Dy), but there
are many things you can do with= dict that you can't do with makeDict.
What is the makeDict equivalent= of:

dict(x=3D12, y=3Dself.y, z=3Da+b)

The code you have al= lows you more compact expression, but it brings
fragility and surprise= .

       > This is, as I understand it a ve= ry natural way of using a dictionary.
       > = It seems that this syntax is unnecessarily redundant and hence my goal
=        > of writing something more compact. Perhap= s the way I am doing it is a
       > little un= orthodox, 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
      &nbs= p;> arguments to functions and return results. It allows me great
&= nbsp;      > flexibility without breaking existing code.= I pack a dictionary before
       > passing an= d unpack when retrieving.

Perhaps you want to create a class instea= d? If you find yourself
passing more than a handful of arguments to a = function, and especially
more than a handful of values returned from a= function, then a class
with methods might be a better way to combine = state and behavior.

Also, keep in mind that you can return a tuple = from a function if you
want to return two or three values and assign t= hem to names:

x, y, z =3D compute_xyz()

You mention unpacki= ng your dictionary after the function call. How do
you do that? Isn't = that a cumbersome and repetitive operation?
One of the reasons I like using the dictionary over the tuple i= s that if I have a function that grows in functionality (i.e., I decide to= return more data for new scenarios), I can just add the new object to the= dictionary and I don't have to worry about changing the code every where = else that used to call the function. 
 

Actually, = that is one of the nice features of using a dictionary, I can check if the= key is there and if it is pull it out.  As I was dusting off this ol= d code, I considered trying to implement this functionality through by cre= ating a class.  I never liked going through the stack, it seemed hack= y, but I came to love using dictionaries as they have some great built in = features. 

Again, thanks for the advice and I will focus on t= he class implementation.


       >
&nbs= p;      > I will give the locals approach a try, it seem= s a little more clumsy
       > than simply pas= sing the variables to the function.
       >        > Thanks again for your input.
  =      >
       > ---Andrew
=
BTW, it's a little easier to follow the threads of conversation if you=
put your responses after the text you are responding to. This is know= n
as bottom-posting, and is preferred to top-posting as you did here.<= br>

--
Ned Batchelder, http://nedbatchelder.com
--
htt= ps://mail.python.org/mailman/listinfo/python-list
= --Boundary_(ID_8vuJVmZQDQz8qG4ivfJYyg)-- --Boundary_(ID_eHafZk95FNkRyicCsnmgKg)--