我试图理解何时this在ES6箭头函数中进行词法绑定的规则.我们先来看看这个:
function Foo(other) {
other.callback = () => { this.bar(); };
this.bar = function() {
console.log('bar called');
};
}
Run Code Online (Sandbox Code Playgroud)
当我构造a时new Foo(other),在另一个对象上设置回调.回调是一个箭头函数,并且this箭头函数在词法上绑定到Foo实例,因此Foo即使我没有保留对Foo周围的任何其他引用,也不会进行垃圾回收.
如果我这样做会怎么样?
function Foo(other) {
other.callback = () => { };
}
Run Code Online (Sandbox Code Playgroud)
现在我将回调设置为nop,我从不提及this它.我的问题是:箭头功能是否仍然是词法绑定this,Foo只要活着就保持other活着,或者Foo在这种情况下可能是垃圾收集?
说我有一个Numpy矢量,
A = zeros(100)
Run Code Online (Sandbox Code Playgroud)
然后我通过一个断点列表将它分成子向量,这些断点索引到A例如
breaks = linspace(0, 100, 11, dtype=int)
Run Code Online (Sandbox Code Playgroud)
所以i-th子向量将位于索引breaks[i](包括)和breaks[i+1](不包括)之间.休息时间不一定是等间隔的,这只是一个例子.但是,它们将始终严格增加.
现在我想对这些子向量进行操作.例如,如果我想将i-th子向量的所有元素设置为i,我可能会这样做:
for i in range(len(breaks) - 1):
A[breaks[i] : breaks[i+1]] = i
Run Code Online (Sandbox Code Playgroud)
或者我可能想要计算子向量意味着:
b = empty(len(breaks) - 1)
for i in range(len(breaks) - 1):
b = A[breaks[i] : breaks[i+1]].mean()
Run Code Online (Sandbox Code Playgroud)
等等.
如何避免使用for循环而是对这些操作进行矢量化?
在 Node.js 中,我可能有一些可读流instream,并且想要将其写入文件,所以我这样做
instream.pipe(fs.createWriteStream('out.txt'));
Run Code Online (Sandbox Code Playgroud)
然而,这是一个异步操作并立即返回。我知道我可以将处理程序附加到'finish'输出流的事件。但通常,尤其是在简单的脚本中,我宁愿等待直到pipe()完成。
有没有办法让上面的操作同步呢?
我知道调用另一个jitted函数的Numba-jitted函数会识别这个并自动使用快速C调用约定而不是通过Python对象层,因此避免了高Python函数调用开销:
import numba
@numba.jit
def foo(x):
return x**2
@numba.jit
def bar(x):
return 4 * foo(x) # this will be a fast function call
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我从Numba调用Cython函数,是否也是如此.所以假设我有一个Cython模块,foo.pyx:
cpdef double foo(double x):
return x**2
Run Code Online (Sandbox Code Playgroud)
以及标准的Python模块bar.py:
import numba
import foo
@numba.jit
def bar(x):
return 4 * foo.foo(x) # will this be a fast function call?
Run Code Online (Sandbox Code Playgroud)
Numba会自动识别foo.foo为C可调用函数,还是需要通过设置CFFI包装器手动告诉它?
编辑:进一步反思,从Python解释器的角度来看,Cython函数只是标准的"内置"函数.所以这个问题可以更加通用:Numba是否优化对内置函数和方法的调用以绕过Python调用开销?
我想要的是将长度为m的数组扩展为length的数组n (n>m),并线性插入缺失值。
例如,我想这个阵列延伸[1,5,1,7]至长度的阵列7,结果应该是[1,3,5,3,1,5,7],其中粗体数字从线性内插的结果。
有没有简单的方法可以在Python中做到这一点?提前致谢。
我想编写一个带有构造函数的C++类,该构造函数将其auto_ptr作为参数,以便我可以将类实例从auto_ptrs 初始化为另一个实例:
#include <memory>
class A
{
public:
A() {}
A(std::auto_ptr<A> other) {}
};
std::auto_ptr<A> create()
{
return std::auto_ptr<A>(new A());
}
void foo()
{
A x = create();
// A y ( create() ); // works
}
Run Code Online (Sandbox Code Playgroud)
使用g++ -c test.cppgcc 4.6 编译此代码会产生以下错误消息:
test.cpp: In function ‘void foo()’:
test.cpp:17:16: error: no matching function for call to ‘std::auto_ptr<A>::auto_ptr(std::auto_ptr<A>)’
test.cpp:17:16: note: candidates are:
/usr/include/c++/4.6/backward/auto_ptr.h:260:7: note: std::auto_ptr<_Tp>::auto_ptr(std::auto_ptr_ref<_Tp>) [with _Tp = A]
/usr/include/c++/4.6/backward/auto_ptr.h:260:7: note: no known conversion for argument …Run Code Online (Sandbox Code Playgroud) python ×3
javascript ×2
arrays ×1
auto-ptr ×1
c++ ×1
cython ×1
ecmascript-6 ×1
node.js ×1
numba ×1
numpy ×1