栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ipython parallel的Python名称空间问题

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ipython parallel的Python名称空间问题

快速回答:与装饰你的功能

@interactive
IPython.parallel.util
[1]如果你希望它有机会获得发动机的全局命名空间:

从IPython.parallel.util导入交互式f =交互式(lambda x:a + b + x)ack = dview.apply(f,x)

实际说明:

IPython用户名称空间本质上是模块

__main__
。当您执行此操作时,将在此处运行代码
execute('a = 5')

如果以交互方式定义函数,则其模块也是

__main__

lam = lambda x:a + b + xlam .__ module__'__主要__'

当引擎反序列化一个函数时,它会在该函数模块的相应全局命名空间中进行反序列化,因此

__main__
,您在客户端中定义的函数也在
__main__
引擎上定义,因此可以访问
a

将其放入文件并导入后,这些功能将不再附加到

__main__
,而是模块
dop

从dop导入dopdop .__ module__'dop'

该模块中常规定义的所有函数(包括lambda)都将具有该值,因此在引擎上解压缩它们时,其全局名称空间将是该

dop
模块的全局名称空间, 而不是
该模块的全局名称空间
__main__
,因此您的“ a”不可访问。

出于这个原因,IPython提供了一个简单的

@interactive
装饰器
__main__
,无论该函数实际定义在哪里,它都会像在中定义的那样对任何函数进行解包。

有关差异的示例,请执行以下操作

dop.py

从IPython.parallel导入客户端从IPython.parallel.util导入交互式a = 1def dop(x):    rc = Client()    dview = rc [:]    dview ['a'] = 5    f =λx:a + x    返回dview.apply_sync(f,x)def idop(x):    rc = Client()    dview = rc [:]    dview ['a'] = 5    f =交互式(lambda x:a + x)    返回dview.apply_sync(f,x)

现在,

dop
将在dop模块中
idop
使用“ a”,并在引擎名称空间中使用“
a”。两者之间的唯一区别是传递给apply的函数包装在
@interactive

从dop导入dop,idop打印dop(5)#6打印idop(5)#10

[1]:在IPython> = 0.13(即将发行的版本)中,

@interactive
它也
from IPython.parallel importinteractive
应该作为,应该总是存在。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/645367.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号