Python:您能动态地获取函数将返回的变量数量吗?

Python:您能动态地获取函数将返回的变量数量吗?,python,input,count,return,args,Python,Input,Count,Return,Args,作为实用程序系统的一部分,我正在编写的AcecoolLib包将我的全部/大部分逻辑移植到Python和其他各种语言上,其中包含一个简单但非常有用的助手。。。名为ENUM的函数 它有许多有用的功能,例如自动创建枚举映射、扩展映射或反向映射(如果您将映射指定给的不仅仅是值),等等 它可以创建用于动态生成函数名的映射,可以创建枚举和语言的文本或字符串标识符之间的简单映射,等等 函数声明也很简单: def ENUM( _count = None, *_maps ): 它有一个额外的助手。。。在这里:

作为实用程序系统的一部分,我正在编写的AcecoolLib包将我的全部/大部分逻辑移植到Python和其他各种语言上,其中包含一个简单但非常有用的助手。。。名为ENUM的函数

它有许多有用的功能,例如自动创建枚举映射、扩展映射或反向映射(如果您将映射指定给的不仅仅是值),等等

它可以创建用于动态生成函数名的映射,可以创建枚举和语言的文本或字符串标识符之间的简单映射,等等

函数声明也很简单:

def ENUM( _count = None, *_maps ):
它有一个额外的助手。。。在这里:

另一个没用<代码>枚举映射是,但另一个不是

不管怎样,在我开始进入等。。等问题是:

如何计算函数外部的返回变量。。。即:

ENUM_EXAMPLE_A, ENUM_EXAMPLE_B, ENUM_EXAMPLE_C, ENUM_LIST_EXAMPLE, MAP_ENUM_EXAMPLE = ENUM( None, [ '#example_a', '#example_b', '#example_c' ] )
其中列表是一个简单的列表,包含
0=0、1=1、2=2
或其他内容,然后映射链接为
[0='#示例#a',1='#示例#b',等等]
,然后
['#示例#a'=0,等等]
进行反向。。。或者类似的东西

还有其他高级用例,我不确定上面的文件中是否有这些功能,但不管怎样。。。我只是想简单地数一数返回变量。。。然后得到名字

我知道这是可能的,读取执行调用的行。。。阅读文件,拿到线,把它拆开,然后做所有这些。。。但我希望有东西可以做到这一点,而不必在默认的Python系统中从头开始编写代码

简而言之:我想去掉
ENUM(\u count,*\u maps)
的第一个参数,以便只使用可选的
*\u maps
。所以如果我调用:
ENUM_A,ENUM_B,ENUM_C,LIST_ENUMS=ENUM()它将检测4个输出返回,并获取它们的名称,以便我可以查看最后一个是否包含与第一个不同的样式的某些文本。。。也就是说,如果他们想要名单等等。。。。如果他们添加了一个地图,那么可选列表等。。我可以倒数n_映射来找到列表arg,或者不

我知道这可能不是必需的,但我希望它简单且动态,因此如果我向一个巨大的列表中添加一个新的枚举,我不必添加数字(尽管对于那些我使用映射的人,这意味着我必须添加一个条目)

不管怎样-我知道在Lua中,使用内置函数很容易做到这一点。。我希望Python也有内置的函数来轻松获取数据


谢谢

简单的答案是你不能

在Python中,当您执行
(a,b,c)=func()
时,它被称为元组解包。本质上,它期望
func()
返回正好包含3个元素的
元组(在本例中)。但是,您也可以执行
a=func()
,然后
a
将包含一个3元素元组或func
决定返回的任何元组。无论如何调用
func
,方法中没有任何内容知道返回值在返回后将如何处理

我想提供一种更具python风格的方法来实现您的意图,但我不确定自己是否理解
ENUM()
的目的。看起来您试图创建常量,但Python并没有真正的常量

编辑:

方法只知道作为参数传入的内容。如果您想要某种枚举到值的映射,那么最好的等价物是dict。然后您可以有一个方法,该方法接受
ENUM('a','B','C')
,并返回
{'a':0,'B':1,'C':2}
,然后使用dict查找来获取值

enum=enum('A','B','C')
打印(枚举['A'])#打印0

这里是一个建议的答案,类似于我在Lua框架中可以做的。。。不过,不同之处在于,我的框架必须将所有文件加载到内存中(对于动态重新加载和动态更改,将其加载到适当的位置,并通过组合所有内容来连接数据,从而“避免”文件i/o开销,而Lua处理表的能力非常好)

简单的答案是,这是可能的。。我不确定默认Python中是否有没有文件I/o,但是这种方法很容易工作。这个答案将在伪上下文中给出——但功能确实存在

逻辑:

1)使用跟踪,您可以确定哪个文件/路径和哪一行,称为枚举函数

2)以文本形式读取调用文件——如果您可以直接读取一行,而不必处理整个文件——那么速度会更快。可能有一些图书馆可以做到这一点。在默认的Python中,除了基本的文件I/o之外,我没有做过大量的文件I/o,所以我没有跟上所有最有用的东西的速度,因为我通常使用SQL进行存储等等

3)在有问题的行中,将“=”上的行文本拆分,即:在函数调用之前包含参数,以及函数本身。。称之为结果

4)a如果没有结果,则有人调用了该函数,但没有返回任何异常

4)在“,”上拆分结果[0]以获取每个单独的参数,并左/右修剪空白--

5)将干净的参数组合到一个列表中

6)处理参数——即:确定开发人员用于命名其枚举值的方法,并查看该样式是否与上一个参数不同(如果没有映射)。如果是map,则返回列表中的n或n*2个元素,然后再继续映射变量。使用maps时,会给出map返回值-我需要动态地做的唯一一件事就是确定用户是否有list arg

注意:Python中有一种非常有用且简单的机制,可以在-