将一些值作为变量传递

时间:2018-12-22 06:38:05

标签: python function

我是一名物理学的研究生,具有一些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 的参数的函数可能具有两个以上的输入值,但仍然只需要改变 n

我可以用Python实现吗?如果可以,怎么办? 帮助将不胜感激。 对不起我的英语不好! 预先感谢

1 个答案:

答案 0 :(得分:0)

您可能应该传入函数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 Document,以了解默认值的工作原理。

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

还要当您传入可变对象作为默认值时小心。 This is a common gotcha

相关问题