python - 将一些值作为变量传递
问题描述
我是一名物理研究生,对 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_horizontal具有固定的 W 值,而不是 n)。
我需要这样,因为最终作为lead_shape参数的函数可能有超过2个输入值,但仍然只需要改变n
我可以在 Python 中实现这一点吗?如果可以,该怎么做?帮助将不胜感激。对不起我的英语不好!提前致谢
解决方案
您可能应该传入函数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 文档以了解默认值的工作原理。
一些建议:使用默认值时要注意参数的顺序。
当您将可变对象作为默认值传递时,还要注意。这是一个常见的问题
推荐阅读
- android - 如何创建可供我的 android 应用程序使用的共享文件夹?
- javascript - 如何在 javascript 的另一个函数中使用函数的变量?
- javascript - 如何使用 Angular 在 Json 对象数组中排名前 20 位组合?
- c - How does the libuv implementation of *non-blockingness* work exactly?
- typescript - 棱镜。Javascript 到打字稿
- javascript - 如何从不存在下载按钮的 pdfviewer 下载/保存为 pdf 演示文稿?
- azure-devops - azure devops 中的存储库级别通知设置
- meteor - 在 Meteor 服务器上使用 NodeJS EventEmitter
- python - 如何使用 attrs 从字符串反序列化为不可变对象?
- python-3.x - Tkinter Toplevel 窗口未出现