What if it's done not by format method but by a separete method, say, format_partially or something? The method is different from format also in that it should leave "{{" and "}}" unaltered. On Fri, 28 Apr 2023 at 00:05, Matthias Görgens <matthias.goergens@gmail.com> wrote:
Does it have any use case that's not already served by functools.partial?
I guess you mean given partially_formatted_string = unformatted_string.format(color="blue") that partially_formatted_string.format would be equivalent to partial(unformatted_string.format, color="blue") However, I think a partially formatted string can help since it will have other methods than format as well. For instance, given unformatted_string = '{color}{text}' doing the following thing only with functools.partial could require more care than you would be willing to give. string = (unformatted_string.format(color="blue") + unformatted_string ).format(text="Spanish", color="red") (One of the easiest ways might be ``` from functools import partial from operator import call format_ = unformatted_string.format string = "".join(map(partial(call, text="Spanish"), (partial(format_, color="blue"), partial(format_, color="red"), ))) ``` However, note the following, more straight-forward code doesn't work: ``` string = "".join(map(partial(call, text="Spanish", color="red"), (partial(format_, color="blue"), format_, ))) ``` ) Now, how about this? ``` format_ = '{a}{b}{c}'.format string = ((format_(a=a0) + format_(b=b0)).format(c=c0) + (format_(a=a1) + format_(c=c1)).format(b=b1) + (format_(b=b2) + format_(c=c2)).format(a=a2) ).format(a=a3, b=b3, c=c3) ``` (For instance, the following code fails: ``` from itertools import chain string = "".join(map(partial(call, a=a3, b=b3, c=c3), chain.from_iterable( map(map, (partial(partial, c=c0), partial(partial, b=b1), partial(partial, a=a2), ), ((partial(format_, a=a0), partial(format_, b=b0), ), (partial(format_, a=a1), partial(format_, c=c1), ), (partial(format_, b=b2), partial(format_, c=c2), ), )) ))) ``` ) Best regards, Takuo Matsuoka