Python 函数名和参数之间的方括号:func[...](...)
Python square brackets between function name and arguments: func[...](...)
我正在学习如何从 this notebook 开始在 GPU 上加速 python 计算,其中一行让我感到困惑:
mandel_kernel[griddim, blockdim](-2.0, 1.0, -1.0, 1.0, d_image, 20)
这里,mandel_kernel
是一个装饰(由cuda.jit
)函数,griddim
和blockdim
是长度为2的元组:griddim=(32,16)
,blockdim=(32,8)
.
函数名和参数列表之间的方括号是 python 语法的一部分,还是 cuda.jit
修饰的特定内容?
这是有效的 python 语法,我会尝试为您分解它:
mandel_kernel
是一个字典,它的键是二元组(griddim,blockdim),值是方法(这是有效的,因为方法是 python 中的对象)
mandel_kernel[griddim, blockdim]
因此 'returns' (或评估为)一个方法
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)
我正在学习如何从 this notebook 开始在 GPU 上加速 python 计算,其中一行让我感到困惑:
mandel_kernel[griddim, blockdim](-2.0, 1.0, -1.0, 1.0, d_image, 20)
这里,mandel_kernel
是一个装饰(由cuda.jit
)函数,griddim
和blockdim
是长度为2的元组:griddim=(32,16)
,blockdim=(32,8)
.
函数名和参数列表之间的方括号是 python 语法的一部分,还是 cuda.jit
修饰的特定内容?
这是有效的 python 语法,我会尝试为您分解它:
mandel_kernel
是一个字典,它的键是二元组(griddim,blockdim),值是方法(这是有效的,因为方法是 python 中的对象)
mandel_kernel[griddim, blockdim]
因此 'returns' (或评估为)一个方法
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)