如何在python中将函数传递给另一个函数

时间:2013-10-01 08:46:06

标签: python

好的第一位背景。

所以..现在,我有一个代码说(loop.py),这只是一个大的for循环...它接受stdin的输入并对该字符串做一些操作然后我写输出。

类似

#loop.py
from clean import *
for line in sys.stdin:
     clean_line = clean(line)
     print clean_line

我将其作为

运行

cat input.txt | python loop.py

因此,clean.py是用户写的某些清理逻辑。

现在,我们在这里有一个“干净”的功能..对某些人来说,这是一定的提取逻辑..

所以你可能有

#loop.py
from clean import *
for line in sys.stdin:
     extract_line = extract(line)
     print extract_line

现在,这个loop.py还没有改变..它不会改变..

所以..也许我可以拼出经验,有人可以帮我弄清楚如何实现......

我想要的是用户编写这些自定义函数。所以用户写...

my_custom_func.py

import run_loop
def my_own_logic(string):
    # my logic goes in here

run_loop.run(my_own_logic)

这样做会自动执行loop.py并在该循环中推送my_own_logic函数吗?

我希望我有任何意义......我在吗?

4 个答案:

答案 0 :(得分:2)

这非常简单:

def run(func):
    for line in sys.stdin:
        print func(line)

答案 1 :(得分:1)

Python有first-class functions,这意味着它们可以毫无问题地传递给其他函数。

示例:

def foo(s):
    print(s)

def bar(f, s):
    f(s)

bar(foo, 'Hello world')

答案 2 :(得分:1)

<强> run_loop.py

import sys

def run(func):
    for line in sys.stdin:
        processed = func(line)
        print processed

将函数视为任何其他对象(int,str,list,...)。

答案 3 :(得分:1)

经验法则:说你有像

这样的功能
def f(x): return x+1

然后f指的是函数本身,而f()(后跟括号)表示函数的评估。

>>> print f
<function f at 0x0000000001FD9DD8>
>>> print f(1)
2

因此,如果您想处理具有任意功能的列表,您可以通过以下几种方式进行操作:

def f(x): return x+1
def g(x): return x*2

>>> def procList(fun,l):
...     for x in l:
...         print fun(x)
...
>>> l=[1,2,3]
>>> procList(f,l)
2
3
4
>>> procList(g,l)
2
4
6
>>>