Dick Moores wrote: > I've been trying to learn new things from the Cookbook, but here's a > recipe the utility of which I don't understand at all. Why interpolation > (whether the ruby way or not)? Maybe a better example than the couple > given would help me? <snip>
Normal string formatting in Python works by including in the string a sort of type definition (e.g. '%s' means 'insert a string here', '%d' is 'insert an integer here', etc.). You have to supply the arguments after the format string, in a tuple. For example: >>> print 'Name: %s\nAge: %d' % (username, userage) Name: John Doe Age: 39 With the recipe provided, you can put the variables you want inserted directly in the format string - it's no longer necessary to append them in a tuple. So for the example above, it would become: >>> print interp('Name: #{username}\nAge: #{userage}') As you see, it's slightly shorter and more ad-hoc - or it would be, if it were built into the language and you didn't have to call the interp function. It also has the advantage that you don't have to make sure you provide the right number (and type) of arguments in the tuple - it's easy to e.g. decide to no longer print the age and forget to update the tuple, like this: >>> print 'Name: %s' % (username, userage) Traceback <snip> TypeError: not all arguments converted during string formatting That's a particularly annoying source of errors that isn't caught even in (most? all?) machine-code compiled languages. The opposite may also occur, that you e.g. decide to also print a phone number, include that in the format string, yet forget to include it in the tuple as well. The recipe has some disadvantages: - you have put your variable names in a string. This is bad practice - if you rename variables, it's easy to overlook them in strings. - format strings can be used to translate an application. You just give the translator your 'Name: %s' string and he gives you 'Borkbork: %s' or whatever. The translation doesn't need to be modified if you decide to make a user class and get rid of the username and userage vars. - format strings give you more control, so you can e.g. specify how many digits a float should have when formatted. -- Yours, Andrei ===== Mail address in header catches spam. Real contact info: ''.join([''.join(s) for s in zip( "[EMAIL PROTECTED] pmfe!Pes ontuei ulcpss edtels,s hr' one oC.", "rjc5wndon.Sa-re laed o s npbi ot.Ira h it oteesn edt C")]) _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor