Python问题.我正在生成大量的对象,我只需要做一个小的随机样本.实际上生成有问题的对象需要一段时间,所以我想知道是否有可能以某种方式跳过那些不需要生成的对象并且只显式创建那些已经被采样的对象.
换句话说,我现在有
a = createHugeArray()
s = random.sample(a,len(a)*0.001)
Run Code Online (Sandbox Code Playgroud)
这是相当浪费的.我更喜欢更懒惰的东西
a = createArrayGenerator()
s = random.sample(a,len(a)*0.001)
Run Code Online (Sandbox Code Playgroud)
我不知道这是否有效.random.sample上的文档不太清楚,虽然它提到xrange非常快 - 这让我相信它可能会起作用.将数组创建转换为生成器将是一项工作(我对生成器的了解非常生疏),所以我想知道这是否有效.:)
我可以看到的另一种方法是通过xrange生成随机样本,并仅生成通过索引实际选择的那些对象.虽然这不是很干净,因为生成的索引是任意的和不必要的,我需要相当hacky逻辑来支持我的generateHugeArray方法.
奖励积分:random.sample实际上如何运作?特别是,如果它不像提前像xrange那样知道人口的大小,它是如何工作的?
我知道传递配置闭包和为任务定义操作之间的区别.我相信你不能<<在配置闭包中使用,因为它似乎是一个语法错误:
task wrong {
<< { println "From doLast" }
}
Run Code Online (Sandbox Code Playgroud)
但.为什么我不能用leftShift作为等同<<于上述配置关闭?在一个更加清晰的测试用例中,为什么以下的buildfile不输出该行From leftShift - inside?
defaultTasks 'tryout'
task tryout {
doLast { println "From doLast" }
leftShift { println "From leftShift - inside" }
}
tryout.leftShift { println "From leftShift - outside" }
Run Code Online (Sandbox Code Playgroud)
当然,这不是一个真正的问题,因为我可以简单地使用doLast.我只是想扩大我对Gradle的理解.谢谢!