在IPython中,分配变量和直接在数组中工作的区别是什么
发布时间:2020-12-20 13:33:50 所属栏目:Python 来源:网络整理
导读:我正在玩I Python和远程控制: in: from IPython Import parallel as pin: rc=p.client(profile=myprofile) 两者之间存在行为差异 in: rc[0].blockout: Falsein: rc[0].block=Truein: rc[0].blockout: False 和 in: view=rc[0]in: view.blockout: Falsein: v
我正在玩I
Python和远程控制:
in: from IPython Import parallel as p in: rc=p.client(profile=myprofile) 两者之间存在行为差异 in: rc[0].block out: False in: rc[0].block=True in: rc[0].block out: False 和 in: view=rc[0] in: view.block out: False in: view.block=True in: view.block out: True 我真的无法理解什么追加?这是为什么 ?分配做什么? 解决方法
作业本身什么都不做.这里是你的客户.执行rc [0]或任何类型的索引,会生成并返回一个DirectView对象,该对象是您在[]中指定的任何引擎的视图.这是生成视图的简写:它实际上并不只是获取特定对象.
因此,这些观点并不是唯一的.我想,解释它的最好方法就是举个例子.假设你有2个引擎.您希望仅在引擎1上运行某些任务,并希望阻止任务.您希望仅在引擎1上运行其他人,但不希望它们阻止.您希望在引擎1和2上运行更多,并且不希望它们阻止.然后你可以这样做: view_1_block = rc[0] view_1_block.block = True view_2_noblock = rc[0] view_2_noblock.block = False view_3_noblock = rc[[0,1]] view_3_noblock.block = False 然后,您可以使用它们以您想要的任何方式运行任务,例如 view_1_block.map(lambda x:x**10,range(32)) # blocks,returns results,runs only on 1 view_3_noblock.map(lambda x:x**10,range(32)) # does not block,returns AsyncResult,runs on 1 and 2 这里没有使用真正的魔法.当您运行rc [0]两次时,它会生成两个视图.第二种观点与第一种观点不同.将rc [0]分配给变量,然后使用该变量时,您将使用一个视图,而不是创建一个新视图. 像Numpy和Scipy一样,iPython有很多简写符号,不一定完全适合Python的习语. []和getitem的情况尤其如此.一种更纯粹的Python编写方式可能是使用更笨拙的rc.direct_view(1),依此类推,这可以清楚地表明这不仅仅是获取一个项目,而且实际上是在创建一个视图. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |