我知道双重下划线对Python类属性/方法意味着什么,但它是否意味着方法参数?
看起来你不能将带有双下划线的参数传递给方法.这很令人困惑,因为你可以为正常的功能做到这一点.
考虑这个脚本:
def egg(__a=None):
return __a
print "egg(1) =",
print egg(1)
print
class Spam(object):
def egg(self, __a=None):
return __a
print "Spam().egg(__a=1) =",
print Spam().egg(__a=1)
Run Code Online (Sandbox Code Playgroud)
运行此脚本会产生:
egg(1) = 1
Spam().egg(__a=1) =
Traceback (most recent call last):
File "/....py", line 15, in <module>
print Spam().egg(__a=1)
TypeError: egg() got an unexpected keyword argument '__a'
Run Code Online (Sandbox Code Playgroud)
我用Python 2.7.2检查了这个.
其他一些例子
这有效:
def egg(self, __a):
return __a
class Spam(object):
egg = egg
Spam().egg(__a=1)
Run Code Online (Sandbox Code Playgroud)
这不是:
class Spam(object):
def _egg(self, __a=None):
return __a
def egg(self, a):
return self._egg(__a=a) …Run Code Online (Sandbox Code Playgroud) 我读到了lexical-let的内存泄漏,比如这里: lexical-let或其他cl-macros有什么问题吗? - GNU Emacs文本编辑器的用户列表 - ArchiveOrange
它说:
"请注意,与lexical-let绑定的变量永远不会被释放,即使它们从未被使用过.请尝试
Run Code Online (Sandbox Code Playgroud)(loop for i from 1 to 100000 collect (lexical-let ((x i)) '()))看着它吃着记忆."
但我认为这段代码只是因为循环列表增长而占用内存.所以,我写了一些elisp代码来检查它何时发生,但我找不到泄漏的例子.
这就是当我执行下面的代码时内存随时间增长的方式.

(require 'cl)
(defvar num-loop-1 30)
(defvar num-loop-2 100000)
(loop for i from 1 to num-loop-1 do
(loop for j from 1 to num-loop-2 collect
(lexical-let ((x `(,i ,j))) (lambda () x))))
Run Code Online (Sandbox Code Playgroud)
看起来没有泄漏.
请在此处查看更多示例:https: //gist.github.com/1703325
ADDED:这是第一个例子吃内存的方式.正如我所说,我认为这是一件神器.

可以在Repa中计算一个依赖于过去值(即较小索引)的数组吗?给出了阵列的初始部分(例如a[0]).(注意我使用类似C的表示法来表示数组的元素;请不要混淆.)
我阅读了教程并快速检查了hackage但我找不到一个功能来完成它.
(我想在一维数组中进行这种计算并不会导致修复,因为你无法对其进行并行化.但我认为你可以在2维或更多维的情况下并行化它.)
编辑:可能我应该更具体地说明f我想要使用什么样的.由于在a[i]标量的情况下没有办法并行化,所以让我们关注的a[i]是N dim向量.我不需要a[i]更高维度(例如矩阵)因为你可以将它"展开"到矢量.因此,f是将R ^ N映射到R ^ N的函数.
大多数情况下,它是这样的:
b = M a[i-1]
a[i][j] = g(b)[j]
Run Code Online (Sandbox Code Playgroud)
其中b是N dim向量,M是N×N矩阵(没有稀疏性假设),并且g是一些非线性函数.我想为i=1,..N-1给定的计算它a[0],g并且M.我希望有一些通用的方法来(1)并行化这种类型的计算和(2)分配中间变量,如b高效(在类C语言中,你可以只重复使用它,如果修复或类似的图书馆可以做到像魔术一样不破坏纯度).
我试图制作一个简单的图形结构,我写了以下内容.但温室气体引起了错误,我堆积在那里.这是我第一次制作自己的类型类,所以也许我做的事情非常糟糕.有人可以解释什么是错的吗?
我发现了一个类似的问题,但我不认为它适用于我的情况: 在类型类的实例中错误绑定类型变量
class Link l where
node :: (Node n) => l -> n
class Node n where
links :: (Link l) => n -> [l]
data (Node n) => SimpleLink n =
SimpleLink
{ simpleLinkNode :: n
} deriving (Show, Read, Eq)
instance (Node n) => Link (SimpleLink n) where
node = simpleLinkNode
data (Link l) => SimpleNode l =
SimpleNode
{ simpleNodeLinks :: [l]
} deriving (Show, Read, Eq)
instance (Link l) => Node (SimpleNode l) where …Run Code Online (Sandbox Code Playgroud)