On Wed, Jun 13, 2018 at 10:43:43PM +0200, Michel Desmoulin wrote: > str.replace come to mind. It's a annoying to have to chain it 5 times > while we could pass optionally a tuple.
Its not so simple. Multiple replacements underspecifies the behaviour. The simplest behaviour is to have astring.replace((spam, eggs, cheese), new) be simply syntactic sugar for: astring.replace(spam, new).replace(eggs, new).replace(cheese, new) which is nice and simple to explain and nice and simple to implement (it's just a loop calling the method for each argument in the tuple), but its probably not the most useful solution: # replace any of "salad", "cheese" or "ham" with "cheesecake". s = "Lunch course are cheese & coffee, salad & cream, or ham & peas" s.replace("salad", "cheesecake").replace("cheese", "cheesecake").replace("ham", "cheesecake") => 'Lunch course are cheesecake & coffee, cheesecakecake & cream, or cheesecake & peas' which is highly unlikely to be what anyone wants. But it isn't clear what people *will* want. So we need to decide what replace with multiple targets actually means. Here are some suggestions: - the order of targets ought to be irrelevant: replace((a, b) ...) and replace((b, a) ...) ought to mean the same thing; - should targets match longest first or shortest first? or a flag to choose which you want? - what if you have multiple targets and you need to give some longer ones priority, and some shorter ones? - there ought to be a single pass through the string, not multiple passes -- this is not just syntactic sugar for calling replace in a loop! - the replacement string should be skipped and not scanned. -- Steve _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/