我遇到了一个我似乎无法解决的有趣问题。我有一个非常复杂的系统,它调用格式化工具,它被定义为我们支持的每种格式的类。类名是动态确定的,值是根据我们客户的 API POST 文档格式化的。
我遇到的问题是有些值需要一个键/值对(key, value)
,而有些需要多个对,我将它们放入一个 tuples 列表中[(key1, value1), (key2, value2)]
。
我需要做的是获取键/值并创建一个元组并将其传递以进行交付。我不能使用字典,因为以后顺序可能很重要。
这段代码的整体结构非常庞大,因此我将尝试将其分解为小块以提高可读性。
调用函数:
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
为元组?
编辑1:
事实证明问题出在map_lead
我添加到mapto_data
元组的位置。我错过了那里的尾随逗号。