如何通过传递bool函数来定义方法?

时间:2015-05-29 13:08:21

标签: python

我有一个我应该在python中编程的任务。我应该有一个名为Tasks的类。我可以通过

来做到这一点
class Tasks:

代码。这个类应该有4个方法,需要一个方法将逻辑函数传递给它,遍历inF命名文件中的所有元素,然后计算inF文件中的相应值,然后将其写出来。我的问题是如何定义一个函数哪个参数应该是另一个定义的逻辑函数?

这是一个例子: 还有一个文件应该调用我的Tasks类,例如将其命名为" test"。它具有以下代码:

def odd(x):
   if x % 2 != 0 : 
       return True
   else:
       return False

task = Tasks("in") //Here I have another problem as I don't know how can I open the file by just the Tasks' constructor. 
print task.count(odd)

您能为我提供一个解决方案吗?

EDIT1: 如果inF文件具有以下值:

30
25
30
21
19

然后task.count(单数)应该打印3

3 个答案:

答案 0 :(得分:1)

对于函数的名称没有什么神奇之处,因此您可以将函数作为参数传递,然后使用函数中的参数名称调用它。

例如,您的部分解决方案可能包括

class Task:
    def count(self, func):
         with file(self.inF, "r") as src:
             return [x for x in src if func(x)]
         return []

虽然在此示例中传递给count的函数将不得不期望一个以\n\r\n结尾的字符串,具体取决于inF文件的内容。

答案 1 :(得分:0)

在Python中,一切都是一个对象,包括类,模块,是的,函数(和方法,它们只是函数的薄包装)。因此,您可以使用任何其他对象可以执行的函数:将其传递给另一个函数(或方法),将其存储为实例属性等。

你的问题看起来很像家庭作业所以我不会给你一个完整的例子(所以不是做我的家庭作业服务),但你会学到大部分你需要知道的东西关于FineManual(tm)中的第一点(nb:这是Python3手册,如果使用Python 2.x,请切换到Python2)。

wrt /你的第二个问题 - 阅读文件 - 文档是here(同上,Pyton3版本)。

这应该足以让你入门。

答案 2 :(得分:0)

只需为您的函数提供其他功能并让它使用它:

def count(boolfunc, things):
    counter = 0
    for thing in things:
        if boolfunc(thing):
            counter += 1
    return counter

演示用法:

>>> count(odd, [30, 25, 30, 21, 19])
3

虽然我这样做是为了更清楚地表明它。实际上,我使用Python的filter函数:

def count(boolfunc, things):
    return len(filter(boolfunc, things))

顺便说一句,if-X-return-True-return-False总是让我烦恼。我建议改用其中一个:

def odd(x):
    return x % 2 != 0

def odd(x):
    return x % 2 == 1

def odd(x):
    return bool(x % 2)

def odd(x):
    return x % 2