首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >纯净的遗传

纯净的遗传
EN

Stack Overflow用户
提问于 2017-03-14 04:48:38
回答 1查看 50关注 0票数 1

函数纯度的继承是如何工作的?例如,对于下面的代码,我期望:

代码语言:javascript
复制
In [150]: myObj = delayed(dict,{}, pure=True)

In [151]: myObj
Out[151]: Delayed('dict-343cc4b6676839eb7fd74272cd0a1ed1')

In [152]: myObj = delayed(dict,{}, pure=True)

In [153]: myObj
Out[153]: Delayed('dict-343cc4b6676839eb7fd74272cd0a1ed1')

In [154]: myObj.foo
Out[154]: Delayed('getattr-e1ffa164-8c0e-40ac-9e84-2dc2ed334f93')

In [155]: myObj.foo
Out[155]: Delayed('getattr-c0b9af63-2145-498a-979b-cdfb8e6a30a9')

In [156]: delayed(getattr,pure=True)(myObj, 'foo')
Out[156]: Delayed('getattr-5f98e6d14b9694ba16542b61a770d0f0')

In [157]: delayed(getattr,pure=True)(myObj, 'foo')
Out[157]: Delayed('getattr-5f98e6d14b9694ba16542b61a770d0f0')

这两行Out[154]Out[155]生成相同的键,因为它访问的是一个声明为pure的延迟实例的属性。然而,它不是,强制纯度的唯一方法是显式声明它,如[156][157]行所示。

这就引出了一个关于纯洁是如何遗传的问题。这有没有一般的规则,还是故意没有定义?

谢谢!:-)

编辑:此问题已移至here。更新将在解决后发布。

编辑2:删除156和157末尾的无关pure=True

EN

回答 1

Stack Overflow用户

发布于 2017-03-14 05:21:29

从文档字符串中:

代码语言:javascript
复制
pure : bool, optional
     Indicates whether calling the resulting ``Delayed`` object is a pure
     operation. If True, arguments to the call are hashed to produce
     deterministic keys. Default is False.

在上面的代码中,您有效地声明了一个纯函数dict (请注意,作为name传入的{}是一个错误的输入,但它是有效的,因为它是false-y)。每次调用结果对象都会产生相同的键,但对象本身并不被认为是纯对象。

代码语言:javascript
复制
In [1]: from dask import delayed

In [2]: f = delayed(dict, pure=True)

In [3]: f(a=1, b=2)
Out[3]: Delayed('dict-33dc94312cd726f892eba4af7af52947')

In [4]: f(a=1, b=2)  # same key
Out[4]: Delayed('dict-33dc94312cd726f892eba4af7af52947')

In [5]: f.a
Out[5]: Delayed('getattr-e297bc1b-faef-4d0a-a2d6-99d1232065f1')

In [6]: f.a  # not the same key
Out[6]: Delayed('getattr-12bbbf19-fe91-4075-8992-2ebb63b391e9')

延迟对象上的方法也可以使用pure关键字指定为纯对象,但这当然不适用于属性。这不是最初编写delayed接口时要考虑的问题。

代码语言:javascript
复制
In [7]: f.foo(a=1, pure=True)
Out[7]: Delayed('foo-b50c25f3e4249b9bd33a1e07975c9c27')

In [8]: f.foo(a=1, pure=True)  # same key
Out[8]: Delayed('foo-b50c25f3e4249b9bd33a1e07975c9c27')

我愿意改变它的工作方式,让delayed(object, pure=True)表明所有的方法和属性访问都被视为纯访问。如果你有一个github账户,你能open an issue一下吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42773134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档