如何保持kwarg的dtype完整?

时间:2018-11-19 17:50:27

标签: python python-2.7 dictionary kwargs numpy-ndarray

对于我正在处理的脚本,我希望使其可选,以将数组传递给函数。我尝试执行此操作的方法是将相关变量(residue)设置为kwarg

问题是,当我以这种方式执行操作时,python将kwarg的dtype从numpy.ndarray更改为dict。最简单的解决方案是使用以下方法将变量转换回np.array

    residue = np.array(residue.values())

但是我觉得这不是一个非常优雅的解决方案。因此,我想知道是否有人可以向我展示“更漂亮”的方式来完成此任务,并可能向我解释为什么python这样做?

有问题的功能是:

    #Returns a function for a 2D Gaussian model 
    def Gaussian_model2D(data,x_box,y_box,amplitude,x_stddev,y_stddev,theta,**residue):
        if not residue:
            x_mean, y_mean = max_pixel(data) # Returns location of maximum pixel value   
        else:
            x_mean, y_mean = max_pixel(residue) # Returns location of maximum pixel value
        g_init = models.Gaussian2D(amplitude,x_mean,y_mean,x_stddev,y_stddev,theta) 
        return g_init
     # end of Gaussian_model2D

使用以下命令调用该函数:

    g2_init = Gaussian_model2D(cut_out,x_box,y_box,amp,x_stddev,y_stddev,theta,residue=residue1)

我正在使用的Python版本是2.7.15

1 个答案:

答案 0 :(得分:0)

请参见the accepted answer here,如果您通过dict传递参数,为什么总是 得到一个映射对象(又称**kwargs); the language spec says

  

如果存在形式“ ** identifier”,则将其初始化为新的   有序映射接收任何多余的关键字参数,默认为   一个新的相同类型的空映射。

换句话说,您描述的行为正是该语言所保证的。

此行为的原因之一是,基础语言(例如C / J)中的所有函数,包装程序和实现都将理解**kwargs是参数的一部分,应将其扩展为-值组合。 如果要将额外参数保留为某种类型的对象,则不能使用**kwargs来这样做。通过一个明确的参数传递它,例如extra_args,没有特殊含义。