【问题标题】:Python nested functions for same parameters相同参数的 Python 嵌套函数
【发布时间】:2017-10-05 03:49:26
【问题描述】:

我有 2 个 python 列表,我想使用不同的函数(TP、TN、FP、FN)计算 4 个不同的值。如果我可以在外部嵌套函数中定义参数而不为每个函数定义参数,因为所有 4 个函数的参数都相同,那就更好了。 我已经实现了一个函数,但它只给出了 TP 函数输出。你能请有人帮我在这里找到问题吗

def evaluation(list1,list2):


    def TP():

        count1 = 0
        for i in range(0,35):

            if Jac_test_list[i].strip()==Simmilar_list[i].strip()=='True':
                count1+=1
    #return count

        print ('TP count :' + str( count1))

    return TP

    def TN():
        count2 = 0
        for i in range(0,35):

            if Jac_test_list[i].strip()==Simmilar_list[i].strip()=='False':
                count2+=1
    #return count

        print ('TN count :' + str( count2))
    return TN

    def FP():
        count3 = 0
        for i in range(0,35):

            if (Jac_test_list[i].strip()=='True') & (Simmilar_list[i].strip()=='False'):
                count3+=1
    #return count

        print ('FP count :' + str( count3))
    return FP

    def FN():
        count4 = 0
        for i in range(0,35):

            if (Jac_test_list[i].strip()=='False') & (Simmilar_list[i].strip()=='True'):
                count4+=1
    #return count

        print ('FN count :' + str( count4))
    return FN

【问题讨论】:

  • 提示:return 结束函数。在您的第一个 return TP 之后不会执行任何操作。
  • 调用evaluation(list1,list2)时你期望看到什么?能举个例子吗?
  • 你为什么在这里使用嵌套函数?这假设是一个功能工厂吗?但是,您正在创建 Jac_test_listSimmilar_list 的闭包,据我所知,它们是非本地的。
  • @Allen 下面是预期的输出 TP 计数:12,TN 计数:16,FP 计数:1,FN 计数:6,换句话说,我想打印 Print() 中的所有内容。我必须运行几次。所以我喜欢只在一个地方定义参数,而不是在所有 4 个函数中定义它们
  • 你的输入列表list1和list2是什么?能举个例子吗?

标签: python function nested-function


【解决方案1】:

我不得不说这不是在函数之间共享参数的最佳方式,而只是为了修复你的代码,下面可能就是你所追求的。

def evaluation(Jac_test_list,Simmilar_list):

    def TP():
        count1 = 0
        for i in range(0,35):
            if Jac_test_list[i].strip()==Simmilar_list[i].strip()=='True':
                count1+=1
    #return count
        print ('TP count :' + str( count1))


    def TN():
        count2 = 0
        for i in range(0,35):
            if Jac_test_list[i].strip()==Simmilar_list[i].strip()=='False':
                count2+=1
    #return count
        print ('TN count :' + str( count2))


    def FP():
        count3 = 0
        for i in range(0,35):

            if (Jac_test_list[i].strip()=='True') & (Simmilar_list[i].strip()=='False'):
                count3+=1
    #return count
        print ('FP count :' + str( count3))


    def FN():
        count4 = 0
        for i in range(0,35):
            if (Jac_test_list[i].strip()=='False') & (Simmilar_list[i].strip()=='True'):
                count4+=1
    #return count
        print ('FN count :' + str( count4))

    TP()
    TN()
    FP()
    FN()

【讨论】:

  • 非常感谢,这行得通。如果您不介意,您能告诉我为此类事件共享参数的最佳方式
猜你喜欢
  • 1970-01-01
  • 2016-12-29
  • 2021-12-01
  • 2018-05-10
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多