强制Python函数返回类型';元组';

强制Python函数返回类型';元组';,python,django,tuples,Python,Django,Tuples,我遇到了一个似乎无法解决的有趣问题。我有一个相当复杂的系统,它调用一个格式化工具,它被定义为我们支持的每种格式的一个类。类名是动态确定的,值的格式是基于客户端的API POST文档 我遇到的问题是,有些值需要单个键/值对(键,值),而有些值需要多个对,我将它们放入元组列表[(键1,值1),(键2,值2)] 我需要做的是获取键/值,创建一个元组,并将其传递给交付。我不能用字典,因为以后顺序可能很重要 这段代码的整体结构非常庞大,因此为了便于阅读,我将尝试将其分解为小块 调用函数: def map_

我遇到了一个似乎无法解决的有趣问题。我有一个相当复杂的系统,它调用一个格式化工具,它被定义为我们支持的每种格式的一个类。类名是动态确定的,值的格式是基于客户端的API POST文档

我遇到的问题是,有些值需要单个键/值对
(键,值)
,而有些值需要多个对,我将它们放入元组列表
[(键1,值1),(键2,值2)]

我需要做的是获取键/值,创建一个元组,并将其传递给交付。我不能用字典,因为以后顺序可能很重要

这段代码的整体结构非常庞大,因此为了便于阅读,我将尝试将其分解为小块

调用函数:

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
示例\格式\类型1:

@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)
        ]
示例\格式\类型2:

@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
我试图将
示例\u格式\u类型2
的返回值显式定义为元组:

@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
但似乎无论我做什么,它都会被解释为调用函数的
中的一个列表

所以,我总是得到
类型(格式化的\u列表)。\uu名称\uu=='list'
。因此,如果它是一个元组,我将返回
for
循环遍历元组中的每个项,并将其作为单个值添加到
mapto_data
元组中

有没有办法强制Python从
example\u format\u type2
返回值,以便在
调用函数时将其解释为元组

编辑1:


原来问题出在
map\u lead
中,我将其添加到
mapto\u数据
元组中。我遗漏了后面的逗号。

我相信您可以直接返回一个元组文字(idk,如果这就是它的名称)

>>def test():
...     返回(1,2)
... 
>>>事物=测试
>>>东西
(1, 2)
>>>类型(事物)
>>>键入(对象).\u名称__
“元组”

示例\u格式\u类型2
确实返回了一个元组,我很确定错误在其他地方。与
格式\u值
函数类似。请注意,如果将元组添加到+=的列表中,结果将是一个列表:

>>> a = [1, 2]
>>> a += (3, 4)
>>> print a
[1, 2, 3, 4]

还考虑使用该语法检查<代码>格式化列表> <代码>的类型:

if type(formatted_list) is tuple:
  ...

对不起,我不明白你的意思。你们所谓的“调用函数”(它是
map\u lead
,右)甚至并没有试图推测它的参数类型。您确定要实现的是返回
tuple
?代码的真正用途是什么?旁注:您应该将
type(格式化列表)。\uu name\uu==“list”
替换为
isinstance(格式化列表,列表)
。tupleI也是一样,我不认为我理解你在做什么——看起来你几乎想要某种调度系统(但可能使用类来实现),但事实并非如此,但同时你试图让它看起来是这样!?只需给我们一个英文的引导段落,你想做什么,不涉及任何技术细节。。。(这应该以“我想要实现的是…”开始。
formatted\u list=format\u value(offer\u field.mapto,lead.data[field\u name])
什么是
format\u value
返回键,value
肯定会返回元组。您确定要调用该方法吗?
if type(formatted_list) is tuple:
  ...