如何获取函数参数列表理解的索引

joh*_*k95 5 python list-comprehension generator gurobi

Gurobipy 显然可以读取函数括号内制定的列表理解的索引。这是如何运作的?这个公式不应该将生成器对象传递给函数吗?您如何从中读取索引?

    md = gp.Model()
    md.addConstrs(True for i in [1,2,5,3])
    
Run Code Online (Sandbox Code Playgroud)

输出包含列表理解公式中使用的索引:

{1: <gurobi.Constr *Awaiting Model Update*>,
 2: <gurobi.Constr *Awaiting Model Update*>,
 5: <gurobi.Constr *Awaiting Model Update*>,
 3: <gurobi.Constr *Awaiting Model Update*>}
Run Code Online (Sandbox Code Playgroud)

Abd*_*P M 6

我不确定我是否正确理解你的问题,但如果你想知道如何从生成器表达式中检索迭代器,那么那就通过访问<generator>.gi_frame.f_locals.

\n

包含与生成器表达式相对应的对象gi_frame,它具有表示此框架所见的本地名称空间的属性。framef_locals

\n
>>> my_gen = (True for i in [1,2,5,3])\n>>> type(my_gen)\n<class \'generator\'>\n>>> my_gen.gi_frame.f_locals\n{\'.0\': <tuple_iterator object at 0x1003cfa60>}\n>>> my_gen.gi_frame.f_locals[\'.0\']\n<tuple_iterator object at 0x1003cfa60>\n>>> list(my_gen.gi_frame.f_locals[\'.0\'])\n[1, 2, 5, 3]\n
Run Code Online (Sandbox Code Playgroud)\n

您甚至可以使用更直接的 API inspect.getgeneratorlocals

\n
>>> import inspect\n>>> \n>>> inspect.getgeneratorlocals(my_gen)\n{\'.0\': <tuple_iterator object at 0x1003cfc70>}\n
Run Code Online (Sandbox Code Playgroud)\n

但请注意:

\n
\n

CPython 实现细节:此函数依赖于生成器\n暴露 Python 堆栈帧以进行自省,\xe2\x80\x99t\n保证在所有 Python 实现中都是如此。在这种情况下,此函数将始终返回一个空字典。

\n
\n