0
0 комментариев

Есть шаблон строки, который я хочу заполнить значениями за два (или за N) вызова str.format():

template = 'foo{a}bar{b}buzz'

Сначала так:

step1 = template.format(a=' A ')
print (step1)
 
> foo A bar{b}buzz

Потом:

step2 = step1.format(b=' B ')
print(step2)
 
> foo A bar B

Однако Python не позволяет передать в format() список меньшего размера или словарь не со всеми значениями.

Можно ли как-то выполнить «каррирование», то есть частичный str.format()? (Я понимаю, что это совсем не каррирование, поэтому кавычки. Grundy подсказывает, что это можно называть «частичным применением»).


Разумеется, я могу сделать так:

'foo{a}bar{b}buzz'.format(a=' A ', b='{b}')

Но это грязный хак, мне он не нравится тем, что нужно каждый раз перечислять параметры, то есть способ не универсален.

Ещё можно использовать чистое каррирование и создавать промежуточный объект-метод. Но он не является строкой, его нельзя передать в какой-то сторонний метод, который ждет именно строку.


Интересны решения для Python2 и Python 3.


Добавить комментарий