Python:您可以动态获取函数要返回的变量数量吗?

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

它具有许多有用的功能,例如自动创建枚举映射,扩展或反向映射(如果您分配的映射不仅限于值)以及更多功能。

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

函数声明也很简单:

def ENUM( _count = None,*_maps ):

它有一个额外的帮助程序...这里:https://www.dropbox.com/s/6gzi44i7dh58v61/dynamic_properties_accessorfuncs_and_more.py?dl=0

不使用另一个。 ENUM_MAP是,但另一个不是。

无论如何,在我开始学习等等之前。问题是:

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

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 = '#example_a',1 = '#example_b',etc.. ],然后为[ '#example_a' = 0,etc.. ]进行反向链接...或沿这些方向的链接。

还有其他高级用例,不确定我是否在上面的文件中具有这些功能,但是不管...我试图简单地计算返回变量...并获取名称。

我知道有可能,读取执行调用的行...读取文件,获取该行,将其拆开,然后执行所有这些操作...但是我希望存在无需在默认的Python系统中从头开始编写代码即可做到这一点...

简而言之:我想摆脱ENUM( _count,*_maps )的第一个参数,以便仅使用可选的*_maps。因此,如果我调用:ENUM_A,ENUM_B,ENUM_C,LIST_ENUMS = ENUM( );,它将检测到4个输出返回值,并获取它们的名称,以便我可以查看最后一个是否包含某些与第一个样式不同的文本……即,是否需要列表等...。如果他们添加了地图,则添加了可选列表等。我可以倒数n _maps来找到列表arg,否则...

我知道这可能不是必需的,但是我希望它既简单又动态,所以如果我将一个新的枚举添加到巨型列表中,则不必添加数字(尽管对于那些我使用地图的人而言)这意味着无论如何我都必须添加一个条目)...

无论哪种方式-我在Lua中都知道,使用内置函数很容易做到这一点。我希望Python也内置了可以轻松获取数据的函数。

谢谢!

baichichangchun 回答:Python:您可以动态获取函数要返回的变量数量吗?

一个简单的答案就是你不能。

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

我想提供一种更加Python化的方式来完成您的目标,但是我不确定我是否了解ENUM()的目的。似乎您正在尝试创建常量,但是Python并没有真正的常量。

编辑:

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

enum = ENUM('A','C')
print(enum['A'])  # prints 0
,

这里是一个建议的答案,类似于我在Lua框架中可以做的...不过,不同之处在于,我的框架必须将所有文件加载到内存中(用于动态重新加载和动态更改,到适当的位置-并通过组合所有内容来使数据联网,从而使文件I / O成本“平均”-Lua出色地处理了表格)。

一个简单的答案是,有可能。.我不确定在没有文件I / O的默认Python中,但是此方法很容易起作用。答案将是在伪上下文中-但是功能确实存在。

逻辑:

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

2)以文本形式读取调用文件-如果您可以直接读取到一行而不必处理整个文件-那就更快了。可能有一些库可以做到这一点。在默认的Python中,除了基础知识之外,我没有做大量的文件I / O操作,因此我无法快速处理所有最有用的东西,因为我通常使用SQL进行存储等操作。 / p>

3)对于有问题的行,请在'='上拆分行文本,即:在函数调用之前获取参数以及函数本身..称其为_result

4)a 如果没有结果,则有人调用该函数而不返回任何内容-奇数。

4)在','上分割_result [0]以获取每个单独的参数,并在左/右修剪空白-

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

6)处理args,即:确定开发人员用来命名其枚举值的方法,并查看该样式是否与最后一个参数(如果没有map)有所不同。如果是map,则返回n或n * 2个元素作为列表,然后从那里继续返回map vars。使用map时,会给出map的返回值-我唯一需要动态做的就是数字,并确定用户是否有列表arg。

注意: Python中有一种非常有用和简单的机制,可以用一行代码在线完成很多这些功能。

所有这些都是可能的,并且很容易在Python中创建。我不喜欢这种解决方案的地方是它需要文件I / O-如果您的程序是从另一个程序执行的,并且没有保留在内存中,则这意味着这些任务总是重复执行,从而使其不那么友好,甚至更多。昂贵的...

如果程序打开并保持打开状态,则费用会更高,而不是持续进行,使费用降低。

因为我在所有内容中都使用了ENUM,包括快速的可执行脚本然后运行然后关闭-我不想使用文件I / O。

但是,确实存在解决方案。我正在寻找替代品。

本文链接:https://www.f2er.com/3149450.html

大家都在问