문제

지침에 따라 IPYTHON 0.10을 포함시킬 때 특정 목록 이해력이 제대로 작동하지 않습니다. 내 글로벌 네임 스페이스에서 무슨 일이 일어나고 있습니까?

$ python
>>> import IPython.Shell
>>> IPython.Shell.IPShellEmbed()()
In [1]: def bar(): pass
   ...: 
In [2]: list(bar() for i in range(10))
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)

/tmp/<ipython console> 

/tmp/<ipython console> in <generator expression>([outmost-iterable])

NameError: global name 'bar' is not defined
도움이 되었습니까?

해결책 2

효과가있는 것 같지만 Ipython은 그것이 주요 프로그램이라고 생각합니다. 따라서 ipshell을 인스턴스화 한 후 충돌이 "Whoops, Ipython이 추락했습니다"를 보여줍니다.

import IPython.Shell
ipshell = IPython.Shell.IPShell(argv=[], user_ns={'root':root})
ipshell.mainloop()

다른 팁

목록 이해력은 괜찮습니다. 이것은 작동합니다.

[bar() for i in range(10)]

그것은 발전기 표현입니다 (이것은 당신이 그것에 전달한 것입니다 list() 전화) 괜찮지 않습니다 :

gexpr = (bar() for i in range(10))
list(gexpr)

차이 : 목록 이해의 항목은 정의 시간에 평가됩니다. 발전기 표현식의 항목은 다음과 같은 평가됩니다 next() (예 : 반복을 통해 전달할 때) list()), 따라서 정의 된 범위를 참조해야합니다. 그 범위 참조는 잘못 처리 된 것 같습니다. 아마도 아마도 그것은 단순히 ipython 버그 일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top