строковая замена Python с символом % / ** kwargs странность

я нашел, что методы set/методы get использования сделали мой код легче читать. Мне также нравится контроль, который это дает, когда другие классы используют методы и если я изменю данные, то свойство сохранит.

5
задан SilentGhost 28 October 2009 в 22:25
поделиться

3 ответа

Вероятно, вам понадобится строка формата %%% s %% вместо %% s% .

Два последовательных % Знаки интерпретируются как буквальные % , поэтому в вашей версии у вас есть буквальный % , буквальный s , а затем одинокий ]% , который ожидает спецификатор формата после него. Вам нужно удвоить каждый литерал % , чтобы он не интерпретировался как строка формата, поэтому вы хотите %%% s %% : literal % , ]% s для строки, литерал % .

15
ответ дан 18 December 2019 в 08:29
поделиться

вам нужно удвоить знак процента, чтобы избежать его:

>>> '%%%s%%' % 'PLAYER_ID'
'%PLAYER_ID%'

также при итерации по словарю вы можете распаковывать значения в операторе for, например:

def __init__(self, url, **kwargs):
    for key, value in kwargs.items():
        url = url.replace('%%%s%%' % key, str(value))
3
ответ дан 18 December 2019 в 08:29
поделиться

Адам почти был прав. Измените свой код на:

def __init__(self, url, **kwargs):
    for key in kwargs.keys():
        url = url.replace('%%%s%%' % key, str(kwargs[key]))

Если ключ - FOO, тогда '%%% s %%'% key приведет к '% FOO%' , и ваш url.replace будет делай что хочешь. В строке формата два процента дают результат в процентах.

1
ответ дан 18 December 2019 в 08:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: