Python函数的一个参数不';不能改变吗?

Python函数的一个参数不';不能改变吗?,python,function,arguments,Python,Function,Arguments,我有一个被多次调用的函数。它的大多数论点都改变了,但有一个仍然不变。有没有一种方法不必把它作为一个论点 # in a loop that changes index data.variable(index = index, name = "el_1_pt", value = event.el_pt[0]) data.variable(index = index, name = "el_1_eta", value = event.el_eta[0]) data.variable(index

我有一个被多次调用的函数。它的大多数论点都改变了,但有一个仍然不变。有没有一种方法不必把它作为一个论点

# in a loop that changes index
data.variable(index = index, name = "el_1_pt",   value = event.el_pt[0])
data.variable(index = index, name = "el_1_eta",  value = event.el_eta[0])
data.variable(index = index, name = "el_1_phi",  value = event.el_phi[0])
data.variable(index = index, name = "jet_1_pt",  value = event.jet_pt[0])
data.variable(index = index, name = "jet_1_eta", value = event.jet_eta[0])
data.variable(index = index, name = "jet_1_phi", value = event.jet_phi[0])
data.variable(index = index, name = "jet_1_e",   value = event.jet_e[0])
data.variable(index = index, name = "jet_2_pt",  value = event.jet_pt[1])
data.variable(index = index, name = "jet_2_eta", value = event.jet_phi[1])
data.variable(index = index, name = "jet_2_phi", value = event.jet_eta[1])
data.variable(index = index, name = "jet_2_e",   value = event.jet_e[1])
data.variable(index = index, name = "met",       value = event.met_met)
data.variable(index = index, name = "met_phi",   value = event.met_phi)

您可以看到不变的参数是
index
。我有没有办法不必将它指定为函数的参数,并且使用更少的文本?

编写一个循环来执行函数,而不必显式地写下所有函数调用

假设
name\u vals==[“el\u 1\u pt”,“el\u 1\u eta”,…]
event\u vals==[event.el\u pt[0],event.el\u eta[0],…]

zip
对这些参数进行迭代:

for index in indexes:
    for name, event in zip(name_vals, event_vals):
        data.variable(index, name, event)

编写一个循环来执行函数,而不显式地写下所有函数调用

假设
name\u vals==[“el\u 1\u pt”,“el\u 1\u eta”,…]
event\u vals==[event.el\u pt[0],event.el\u eta[0],…]

zip
对这些参数进行迭代:

for index in indexes:
    for name, event in zip(name_vals, event_vals):
        data.variable(index, name, event)

可以使用partial在每个循环中创建partial函数:

from functools import partial
for index in indexes:
    variable = partial(data.variable, index=index)
    variable(name="el_1_pt", value=event.el_pt[0])
    variable(name="el_1_eta", value=event.el_eta[0])
    variable(name="el_1_phi", value=event.el_phi[0])
    variable(name="jet_1_pt", value=event.jet_pt[0])
    variable(name="jet_1_eta", value=event.jet_eta[0])
    variable(name="jet_1_phi", value=event.jet_phi[0])
    variable(name="jet_1_e", value=event.jet_e[0])
    variable(name="jet_2_pt", value=event.jet_pt[1])
    variable(name="jet_2_eta", value=event.jet_phi[1])
    variable(name="jet_2_phi", value=event.jet_eta[1])
    variable(name="jet_2_e", value=event.jet_e[1])
    variable(name="met", value=event.met_met)
    variable(name="met_phi", value=event.met_phi)

可以使用partial在每个循环中创建partial函数:

from functools import partial
for index in indexes:
    variable = partial(data.variable, index=index)
    variable(name="el_1_pt", value=event.el_pt[0])
    variable(name="el_1_eta", value=event.el_eta[0])
    variable(name="el_1_phi", value=event.el_phi[0])
    variable(name="jet_1_pt", value=event.jet_pt[0])
    variable(name="jet_1_eta", value=event.jet_eta[0])
    variable(name="jet_1_phi", value=event.jet_phi[0])
    variable(name="jet_1_e", value=event.jet_e[0])
    variable(name="jet_2_pt", value=event.jet_pt[1])
    variable(name="jet_2_eta", value=event.jet_phi[1])
    variable(name="jet_2_phi", value=event.jet_eta[1])
    variable(name="jet_2_e", value=event.jet_e[1])
    variable(name="met", value=event.met_met)
    variable(name="met_phi", value=event.met_phi)

参考这个伟大的例子,你可以
zip()
那些名字和值,然后在上面循环。你可以修改
数据吗<代码>索引
似乎是可以添加到调用
变量
的实例中的一种状态,该变量随后会查看其内部状态以获取值,而不是将其作为参数。请参阅这篇文章,您可能会
zip()
这些名称和值,然后在上面循环。
数据
是否可以修改<代码>索引似乎是一种状态,可以添加到调用
变量
的实例中,然后该变量查看其内部状态以获取值,而不是将其作为参数。这并不能真正回答问题。索引并不总是相同的,但在循环的一次迭代中它是相同的。这只适用于一个固定值。除非我误解了这个问题。@R.Murray我会等作者澄清。@R.Murray是的,没错。我不能在函数范围内简单地使用默认值。我试图对Python说:“对于以下所有函数调用,这个参数都是相同的。”@d3pd好的,谢谢你的澄清。我调整了我的答案。这并不能真正回答问题。索引并不总是相同的,但在循环的一次迭代中它是相同的。这只适用于一个固定值。除非我误解了这个问题。@R.Murray我会等作者澄清。@R.Murray是的,没错。我不能在函数范围内简单地使用默认值。我试图对Python说:“对于以下所有函数调用,这个参数都是相同的。”@d3pd好的,谢谢你的澄清。我调整了我的答案,似乎把它分成了两行。这有什么帮助?这个问题不需要这个可导入的模块来解决。@TigerhawkT3不,它只做了一行来设置其他14个调用的索引。这似乎把它分成了两行。这有什么帮助?这个问题不需要这个可导入的模块来解决。@TigerhawkT3不,它只做一行来设置其他14个调用的索引。