On 3 January 2016 at 13:27, yehudak . <katye2...@gmail.com> wrote: > Hi there, > In a program I wrote the following line (Python 3.5): > > print("You've visited", island, '&', new + ".") > > A programmer told me that it's a bad habit, and I should have used instead: > > print("You've visited {0} {1} {2}{3}".format(island, "&", new, ".")) > > May I understand why? > _______________________________________________ > Tutor maillist - Tutor@python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor
The programmer was not very intelligent in his use of str.format in the first place. A more sensible way to write this is: print("You've visited {0} & {1}.".format(island, new)) Formatting with constant strings is pointless, just include it in the original input. However, string formatting is not. Here are a couple of reasons: * String formatting works everywhere, but this syntax is specific to print() — if you use something else, you might end up producing faulty code * The corrected string formatting usage is more readable than the original print() * String concatenation with + requires that all arguments are strings, which is even less readable * With string formatting, you can apply special formatting to your inputs (eg. set width, number precision…), which is hard or impossible with print() * Using print() with commas adds spaces between all entries, which might look bad (and it does in this example); the only way to prevent that is by setting `sep=`, but then you need to remember about a space after "visited" and around the ampersand… * Easy to localize (translate into different languages), which is generally impossible with any of the other options (some languages might rearrange the sentence!) -- Chris Warrick <https://chriswarrick.com/> PGP: 5EAAEA16 _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor