如果我对列表推导做了些什么,它会写入一个局部变量:
i = 0
test = any([i == 2 for i in xrange(10)])
print i
Run Code Online (Sandbox Code Playgroud)
这打印"9".但是,如果我使用生成器,它不会写入局部变量:
i = 0
test = any(i == 2 for i in xrange(10))
print i
Run Code Online (Sandbox Code Playgroud)
这打印"0".
这种差异有什么好的理由吗?这是设计决策,还是生成器和列表推导的实现方式的随机副产品?就个人而言,如果列表推导没有写入局部变量,那对我来说似乎更好.
与堆相比,我对堆栈的了解非常简陋,但是当涉及到数组时,从我所知道的内容就是在堆栈上创建的
float x[100];
Run Code Online (Sandbox Code Playgroud)
而这样的东西是在堆上创建的
float* x = new float[100];
Run Code Online (Sandbox Code Playgroud)
但是如果我创建一个模板数组类,并以"堆栈"数组类型(如float[100])传递它会发生什么?例:
#include <iostream>
using namespace std;
template <class T>
class Array {
public:
int size;
T* data;
Array(int size_) : size(size_) {
data = new T[size];
}
~Array() {
delete [] data;
}
};
int main() {
int m = 1000000;
const int n = 100;
Array<float[n]>* array = new Array<float[n]>(m);
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++) …Run Code Online (Sandbox Code Playgroud) arrays ×1
c++ ×1
generator ×1
heap-memory ×1
python ×1
python-2.7 ×1
stack-memory ×1
templates ×1