首页 > 解决方案 > 将一些值作为变量传递

问题描述

我是一名物理研究生,对 Python 有一些基本知识,但我面临一些挑战我能力的问题。

我正在尝试将一些变量作为假人传递,而有些则不是。我有一个接收函数作为第一个参数的函数,但我需要将一些值声明为“后验”。

我的意思是:

lead0 = add_leads(lead_shape_horizontal(W, n), (0, 0, n), sym0)

函数“add_leads”接受一些函数以及一个元组和第三个参数,这很好。但是n还没有任何定义。我希望n在输入“add_leads”时具有实际意义。

这是实际的函数 add_leads

def add_leads(shape, origin_2D, symm):
        lead_return = []
        lead_return_reversed = []
        for m in range(L):
            n = N_MIN + m
            origin_3D = list(origin_2D)+[n]
            lead_return.append(kwant.Builder(symm))
            lead_return[m][red.shape(shape(n), tuple(origin_3D))] = ONN + HBAR*OMEGA*n
            lead_return[m][[kwant.builder.HoppingKind(*hopping) for 
hopping in hoppings_leads]] = HOPP
            lead_return[m].eradicate_dangling()

请注意,n 是在 for 下定义的,因此,我希望将 n 的值放入shape(n)中(在这种情况下, leads_shape_horizo​​ntal具有固定的 W 值,而不是 n)。

我需要这样,因为最终作为lead_shape参数的函数可能有超过2个输入值,但仍然只需要改变n

我可以在 Python 中实现这一点吗?如果可以,该怎么做?帮助将不胜感激。对不起我的英语不好!提前致谢

标签: pythonfunction

解决方案


您可能应该传入函数lead_shape_horizontal,而不是带参数的函数lead_shape_horizontal(W, n)

因为后者将返回函数的结果,而不是函数对象本身。除非返回值也是一个函数,否则稍后调用时会报错shape(n),这与lead_shape_horizontal(W, n)(n)

至于为 W 提供固定值而不为 n 提供固定值,您可以在函数中为 W 提供默认值,或者只是不将其作为参数

例如,

def lead_shape_horizontal(n, W=some_value):
    # do stuff

或者如果你总是修复 W,那么它不必是一个参数

def lead_shape_horizontal(n):
    W = some_value
    # do stuff

另请注意,您在调用函数时没有定义 n,因此您不能将 n 传递给add_leads函数。

也许你必须构造origin_2D函数内部

喜欢origin_2D = origin_2D + (n,)

然后你可以像这样调用函数lead0 = add_leads(lead_shape_horizontal, (0, 0), sym0)

请参阅Python 文档以了解默认值的工作原理。

一些建议:使用默认值时要注意参数的顺序。

当您将可变对象作为默认值传递时,还要注意。这是一个常见的问题


推荐阅读