好的第一位背景。
所以..现在,我有一个代码说(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函数吗?
我希望我有任何意义......我在吗?
答案 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
>>>