函数名和参数之间的Python方括号:func [...](...)

Jas*_*son 4 python python-decorators numba numba-pro

我正在学习如何从这款笔记本上加速GPU上的py​​thon计算,其中一行令我困惑:

mandel_kernel[griddim, blockdim](-2.0, 1.0, -1.0, 1.0, d_image, 20)
Run Code Online (Sandbox Code Playgroud)

在此,mandel_kernel是一个装饰(通过cuda.jit)的功能,griddimblockdim是长度为2的元组:griddim=(32,16),blockdim=(32,8).

这个方括号是在python语法的函数名和参数列表部分之间,还是特定于cuda.jit装饰的东西?

iCa*_*art 5

这是有效的python语法,我会尝试为你分解:

mandel_kernel 是一个字典,其键是2元组(griddim,blockdim)和值是方法(这是有效的,因为方法是python中的对象)

mandel_kernel[griddim, blockdim] 因此'返回'(或评估)方法

mandel_kernel[griddim, blockdim](-2.0, 1.0, -1.0, 1.0, d_image, 20) 因此,在括号内使用任何参数调用该方法.

这一行可以用三行重写,如下所示:

key = tuple(griddim, blockdim)
method = mandel_kernel[key]
method(-2.0, 1.0, -1.0, 1.0, d_image, 20)
Run Code Online (Sandbox Code Playgroud)