如何调用另一个函数内部的一个特定函数?

时间:2019-10-11 11:26:20

标签: python function

我希望能够做这样的事情:

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”的函数参数。

在将“计算”定义为类时,似乎有些类似的工作,但这不是我想要使用的。

即使在另一个函数中定义“加”和“减”似乎不太实际,但这也是我想要做的。

5 个答案:

答案 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或优雅,但满足了我所寻找的以下条件:

  • 两个函数-“加”,“减”-另一个函数“计算”中
  • 调用其中一个函数-“添加”-而不将其指定为“计算”的函数参数
  • 将此所选函数用作另一个函数“ other_function”的参数