小编jac*_*ev6的帖子

使用functools.wraps修饰的函数使用包装器的名称引发TypeError.为什么?怎么避免?

def decorated(f):
    @functools.wraps(f)
    def wrapper():
        return f()
    return wrapper

@decorated
def g():
    pass
Run Code Online (Sandbox Code Playgroud)

functools.wraps它的工作是保留以下名称g:

>>> g.__name__
'g'
Run Code Online (Sandbox Code Playgroud)

但是如果我传递一个参数g,我得到一个TypeError包含包装器的名称:

>>> g(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: wrapper() takes no arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

这个名字来自哪里?它保存在哪里?有没有办法使异常看起来像g() takes no arguments

python decorator functools python-decorators

11
推荐指数
1
解决办法
315
查看次数

如何合并定义相同类型的OCaml模块类型(签名)?

在OCaml中,我有两种定义类型的模块类型t:

module type Asig = sig
    type t
    val a : t
end

module type Bsig = sig
    type t
    val b : t
end
Run Code Online (Sandbox Code Playgroud)

我想自动创建合并它们的模块类型.我想创建一个等效于的模块类型:

module type ABsig_manual = sig
    type t
    val a : t
    val b : t
end
Run Code Online (Sandbox Code Playgroud)

我试过了

module type ABsig = sig
    include Asig
    include Bsig
end
Run Code Online (Sandbox Code Playgroud)

但这失败了Error: Multiple definition of the type name t.似乎不可能添加类型约束,include所以我被卡住了.

上下文:我有一个AB实现两个签名的模块,我想将它提供给一个仿函数,如:

module MakeC(AB) = struct
    type t = AB.t list
    let …
Run Code Online (Sandbox Code Playgroud)

ocaml

10
推荐指数
1
解决办法
900
查看次数

为什么 std::sin() 在 CUDA 内核中工作?

下面的代码编译(使用nvcc test.cu -o test)并运行没有错误,这意味着它std::sin()在设备上工作:

#include <cmath>
#include <vector>
#include <cassert>
#include <numeric>

__global__ void map_sin(double* in, double* out, int n) {
  const int i = blockIdx.x * 512 + threadIdx.x;
  if (i < n) {
    out[i] = std::sin(in[i]);
  }
}

int main() {
  const int n = 1024;
  std::vector<double> in(n), out(n);
  std::iota(in.begin(), in.end(), 1.);

  double *in_, *out_;
  cudaMalloc(reinterpret_cast<void**>(&in_), n * sizeof(double));
  cudaMemcpy(in_, in.data(), n * sizeof(double), cudaMemcpyHostToDevice);
  cudaMalloc(reinterpret_cast<void**>(&out_), n * sizeof(double));

  map_sin<<<n / 512, 512>>>(in_, out_, …
Run Code Online (Sandbox Code Playgroud)

c++ cuda

3
推荐指数
1
解决办法
130
查看次数

标签 统计

c++ ×1

cuda ×1

decorator ×1

functools ×1

ocaml ×1

python ×1

python-decorators ×1