说我想这样做:
nestedChunksOf [3, 2] [1,1,1,2,2,2,3,3,3,4,4,4] == [[[1,1,1], [2,2,2]], [[3,3,3], [4,4,4]]]
Run Code Online (Sandbox Code Playgroud)
在Python中,我可以做到这一点
def group(a, *ns):
for n in ns:
a = [a[i:i+n] for i in xrange(0, len(a), n)]
return a
group([1,1,1,2,2,2,3,3,3,4,4,4], 3, 2) == [[[1,1,1],[2,2,2]],[[3,3,3],[4,4,4]]]
Run Code Online (Sandbox Code Playgroud)
但在哈斯克尔,我不能只说
nestedChunksOf :: [Int] -> [a] -> [[a]]
Run Code Online (Sandbox Code Playgroud)
要么
nestedChunksOf :: [Int] -> [a] -> [[[a]]]
Run Code Online (Sandbox Code Playgroud)
那么如何才能在Haskell中实现同样的功能呢?
在列表理解中使用闭包时,我发现了这个:
xs = [1, 2, 3]
fs = [lambda: _ for _ in xs]
vs = [_() for _ in fs]
print vs # [<function <lambda> at 0x020324B0>, <function <lambda> at 0x020D6AB0>, <function <lambda> at 0x020D6AF0>]
print vs[0] # <function <lambda> at 0x020324B0>
print vs[0]() # <function <lambda> at 0x020D6AF0>
print vs[0]()() # <function <lambda> at 0x020D6AF0>
print vs[0]()()() # <function <lambda> at 0x020D6AF0>
Run Code Online (Sandbox Code Playgroud)
不应该vs包含ints而不是lambdas?
但是如果我们在两个列表推导中使用不同的名称,它将按预期工作:
xs = [1, 2, 3]
fs = [lambda: …Run Code Online (Sandbox Code Playgroud) 我os.walk用来迭代1000个文件(只是迭代,没有对这些文件进行处理).第一次运行很慢,但后续运行(在同一路径上)大约快20倍.
据我所知,os.walk并os.listdir(通过使用os.walk)并没有做任何缓存,也不FindFirstFile/ FindNextFile(这是通过使用os.listdir我的Windows平台上).
这是由于页面缓存还是其他一些原因?
仅供参考,我正在尝试编写备份应用程序并需要处理大量文件.如果确实是由于页面缓存,那么我需要编写自己的缓存机制.