我有一个简单的python dict为什么打印生成器引用而不是dict

jav*_*dba -2 python generator

创建一个简单的字典:

 procinfos = {"f1": f1, "f2": f2, "f3shell" : (wrap_for_process, q, f3shell, "input arg1", "input arg2")}
Run Code Online (Sandbox Code Playgroud)

然后我想打印其内容:

 print (procinfo for procinfo in procinfos)

<generator object <genexpr> at 0x7f46dccc0dc0>
Run Code Online (Sandbox Code Playgroud)

为什么python只告诉我这是一个生成器?我怎样才能简单地打印内容.从我读到的关于生成器的内容来看,它们不打算使用dict/list.但这已经是一个完全具体化的系列 - 对我来说没有任何意义(至少对我来说......)而不是简单地打印它.这是常见的用例,会欣赏一种获取这些集合的基本打印的简洁方法.谢谢.

更新:我想要一行/内联,而不是多行.谢谢.

Len*_*bro 5

你正在打印一台发电机.

procinfo for procinfo in procinfos
Run Code Online (Sandbox Code Playgroud)

是一个生成器表达式.它只会在迭代时进行评估.您可以这样做,例如将其传递给列表构造函数:

list(procinfo for procinfo in procinfos)
Run Code Online (Sandbox Code Playgroud)

但是你可以得到相同的结果(注1):

list(procinfos.keys())
Run Code Online (Sandbox Code Playgroud)

或者在Python 2中:

procinfos.keys()
Run Code Online (Sandbox Code Playgroud)

所以最有可能的是,做你想做的事情:

print procinfos.keys()
Run Code Online (Sandbox Code Playgroud)

如果你想在每行打印一个,你可以这样做:

print '\n'.join(procinfos)
Run Code Online (Sandbox Code Playgroud)

注1:实际上只是list(procinfos)将工作,就像"\n'.join(procinfos),但为什么它的工作是不太明显,但它是因为遍历字典会遍历它的键.这是一个更高级的Python,所以现在不要担心它.:-)