0

好的,首先介绍一下背景。

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

所以像

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

我运行这个

猫输入.txt | 蟒蛇循环.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

4 回答 4

2

这很简单:

def run(func):
    for line in sys.stdin:
        print func(line)
于 2013-10-01T08:50:07.173 回答
1

Python 具有一流的函数,这意味着它们可以毫无问题地传递给其他函数。

例子:

def foo(s):
    print(s)

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

bar(foo, 'Hello world')
于 2013-10-01T08:50:19.437 回答
1

run_loop.py

import sys

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

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

于 2013-10-01T08:50:21.273 回答
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
>>>
于 2013-10-01T09:23:01.153 回答