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)
我不确定我是否正确理解你的问题,但如果你想知道如何从生成器表达式中检索迭代器,那么那就通过访问<generator>.gi_frame.f_locals.
包含与生成器表达式相对应的对象gi_frame,它具有表示此框架所见的本地名称空间的属性。framef_locals
>>> 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]\nRun Code Online (Sandbox Code Playgroud)\n您甚至可以使用更直接的 API inspect.getgeneratorlocals。
>>> import inspect\n>>> \n>>> inspect.getgeneratorlocals(my_gen)\n{\'.0\': <tuple_iterator object at 0x1003cfc70>}\nRun Code Online (Sandbox Code Playgroud)\n但请注意:
\n\n\nCPython 实现细节:此函数依赖于生成器\n暴露 Python 堆栈帧以进行自省,\xe2\x80\x99t\n保证在所有 Python 实现中都是如此。在这种情况下,此函数将始终返回一个空字典。
\n
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |