Python 函数中一个不变的参数应该如何设置?
How should one argument of a Python function that doesn't change be set?
我有一个函数被调用了很多次。它的大部分论点都发生了变化,但有一个保持不变。有没有办法不必将其作为参数包含在内?
# 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_vals == ["el_1_pt", "el_1_eta", ...]
和 event_vals == [event.el_pt[0], event.el_eta[0], ...]
.
zip
这些参数并迭代它们:
for index in indexes:
for name, event in zip(name_vals, event_vals):
data.variable(index, name, event)
您可以使用 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)
我有一个函数被调用了很多次。它的大部分论点都发生了变化,但有一个保持不变。有没有办法不必将其作为参数包含在内?
# 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_vals == ["el_1_pt", "el_1_eta", ...]
和 event_vals == [event.el_pt[0], event.el_eta[0], ...]
.
zip
这些参数并迭代它们:
for index in indexes:
for name, event in zip(name_vals, event_vals):
data.variable(index, name, event)
您可以使用 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)