Python中装饰器@wraps

@wraps(Conv2D)
def DarknetConv2D(*args, **kwargs):
"""Wrapper to set Darknet parameters for Convolution2D."""
darknet_conv_kwargs = {'kernel_regularizer': l2(5e-4)}
darknet_conv_kwargs['padding'] = 'valid' if kwargs.get('strides')==(2,2) else 'same'
darknet_conv_kwargs.update(kwargs)
return Conv2D(*args, **darknet_conv_kwargs)

    程序中@wraps(Conv2D)在这里是什么意思,程序流程

python里的装饰器,装饰器是定义的一个函数,函数接受你原来的函数,并且返回一个新的函数,在这个过程中可以插入代码到原来函数前后或者改变函数的调用。
DarknetConv2D是被修饰的函数,而Conv2D是用来修饰的函数,看函数名,这个应该是一个二维卷积函数,而它可以给你的DarknetConv2D设置调用参数。
一个是设置核函数的正则项,采用l2正则,一个是padding,之前说了,这个是用来填补数据的边缘区域。再设置好之后,这些参数放入darknet_conv_kwargs传给Conv2D

@wraps它是一个装饰器,它修饰函数Conv2D,这样当你调用Conv2D函数的时候,其实会调用DarknetConv2D函数,这样你可以做一些额外的处理,然后再调用真正的Conv2D