我希望能够做这样的事情:
def calculations(a,b):
def add(a,b):
return a+b
def subtract(a,b):
return a-b
def other_function(calculations,c,d):
return calculations(c,d) + 10
result = other_function(add,10,5)
print(result)
>>> 25
这只是一个简化的示例,但我希望能够让函数“计算”执行两种不同的操作,而无需将此选择作为函数参数传递。
然后,我想将此选择用作另一个函数“ other_function”的函数参数。
在将“计算”定义为类时,似乎有些类似的工作,但这不是我想要使用的。
即使在另一个函数中定义“加”和“减”似乎不太实际,但这也是我想要做的。
答案 0 :(得分:1)
您可以传递该函数,而不必(并且不应)传递到另一个函数中。
如果您摆脱了外部功能,这将很好用!
def add(a,b):
return a+b
def subtract(a,b): # you also had a typo here - it's subtrack, not sub_S_track ;)
return a-b
def other_function(calculations,c,d):
return calculations(c,d) + 10
result = other_function(add,10,5)
print(result)
发生了什么事?
calculations
中的 other_function
是只是一个参数名称(调用函数时可以通过它!)。
答案 1 :(得分:0)
您可以这样定义一个函数:
def calculate(mode, a, b):
if mode == "add":
return a + b
elif mode == "substract":
return a - b
,您可以在此功能中添加所需的任何操作
答案 2 :(得分:0)
您可以交出一个字符串,然后将这些函数放在字典中:
def calculations(key, a,b):
def add(a, b):
return a + b
def substract(a, b)
return a - b
fns = {"add": add, "substract": substract}
return fns[key](a, b)
result = calculations("add", 10, 5)
这非常浪费,因为每次执行calculations
时都要重新定义内部函数。
答案 3 :(得分:0)
这是使用Dim com As New SqlCommand("select Distinct Name1 from TB_dr", Con)
Dim RD As SqlDataReader = com.ExecuteReader
Dim DT As DataTable = New DataTable
DT.Load(RD)
ComboBox1.DisplayMember = "Name1"
ComboBox1.DataSource = DT
ComboBox2.DisplayMember = "Name1"
ComboBox2.DataSource = DT
ComboBox3.DisplayMember = "Name1"
ComboBox3.DataSource = DT
来获取所需内容的解决方案。
namedtuple
使用课程会更加干净。
答案 4 :(得分:0)
从这里所有讨论的结果中,我已经弄清楚了我想要的东西。谢谢您的投入!
def calculations(a,b):
global add
def add(a, b):
return a + b
global subtract
def subtract(a, b):
return a - b
return add, subtract
def other_function(calculations, a, b):
e = a + 19
return calculations(e, b)
a = 10
b = 5
calculations(a,b)
result = other_function(add, a,b)
print(result)
>>>
这绝不是pythonic或优雅,但满足了我所寻找的以下条件: