У меня возникла интересная проблема, которую я не могу решить. У меня довольно сложная система, которая вызывает инструмент форматирования, который определяется как класс для каждого поддерживаемого формата. Имя класса определяется динамически и значение форматируется на основе документации нашего клиента для POST API.Функция Force Python для возврата типа 'tuple'
Проблема, с которой я столкнулся, заключается в том, что для некоторых значений требуется одна пара ключей/значений (key, value)
, тогда как некоторым требуется несколько пар, которые я ввел в список кортежей [(key1, value1), (key2, value2)]
.
Что мне нужно сделать, это получить ключ (ы)/значение (ы) и создать кортеж кортежей и передать его для доставки. Я не могу использовать словарь, так как порядок может иметь значение позже.
Общая структура этого кода довольно обширна, поэтому я попытаюсь разбить ее на мелкие кусочки для удобства чтения.
calling_function:
def map_lead(self, lead):
mapto_data = tuple()
for offer_field in self.offerfield_set.all():
field_name = offer_field.field.name
if field_name not in lead.data:
raise LeadMissingField(lead, field_name)
formatted_list = format_value(offer_field.mapto, lead.data[field_name])
if type(formatted_list).__name__ == 'list':
for item in formatted_list:
mapto_data += (item,)
elif type(formatted_list).__name__ == 'tuple':
mapto_data += (formatted_list)
return mapto_data
example_format_type1:
@staticmethod
def do_format(key, value):
area_code, exchange, number = PhoneFormat.format_phone(value)
return [
(PhoneFormat.AREA_CODE_MAPTO, area_code),
(PhoneFormat.PHONE_EXCHANGE_MAPTO, exchange),
(PhoneFormat.VANTAGE_MEDIA_HOME_PHONE_NUMBER_MAPTO, number)
]
example_format_type2:
@staticmethod
def do_format(key, value):
if len(value) > 3:
value = value[:3] + '-' + value[3:]
if len(value) > 7:
value = value[:7] + '-' + value[7:]
return key, value
Я попытался явно определить возвращаемое значение example_format_type2
быть кортежем:
@staticmethod
def do_format(key, value):
if len(value) > 3:
value = value[:3] + '-' + value[3:]
if len(value) > 7:
value = value[:7] + '-' + value[7:]
formatted_value = tuple()
formatted_value += (key, value)
return formatted_value
Но кажется, что независимо от того, что я делаю, это интерпретируется как список в calling_function
.
Итак, я всегда получаю type(formatted_list).__name__ == 'list'
. Итак, если это кортеж, я возвращаю цикл for
, который проходит через каждый элемент в кортеже и добавляет его как одно значение в кортеж mapto_data
.
Есть ли способ заставить Python вернуть значение от example_format_type2
так, что оно будет интерпретировано в calling_function
как кортеж?
EDIT1:
Оказывается, проблема была в map_lead
где я добавлял к mapto_data
кортежа. Я пропустил заднюю запятую.
К сожалению, я не вас. То, что вы называете «call_function» (это «map_lead», справа) даже не пытается рассуждать о типе его параметров. Вы уверены, что возвращение 'tuple' - это то, чего вы хотите достичь? Какова настоящая цель кода? – J0HN
примечание стороны: вы должны заменить 'type (formatted_list) .__ name__ == 'list'' с' isinstance (formatted_list, list) '. И то же самое для кортежа –
Не думаю, что я понял, что вы делаете - кажется, вы хотите, чтобы какая-то система отправки (но, возможно, для этого использовала классы), но вместо этого она не кажется так что, но в то же время вы пытаетесь заставить себя казаться !? Просто дайте нам главный абзац на английском языке, что вы пытаетесь сделать, без каких-либо технических деталей ... (это должно начинаться с «Что я хотел бы достичь ...» –