2013-10-01 217 views
0

确定背景的第一位。如何将函数传递给python中的另一个函数

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

所以像

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

我跑这是

猫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处理不当改变了..而且它不会改变..

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

我要的是用户写的那些立方米自定functions..So用户写道...

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功能是在循环推?

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

回答

2

这是相当简单:

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

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

实施例:

def foo(s): 
    print(s) 

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

bar(foo, 'Hello world') 
1

run_loop.py

import sys 

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

款待用作任何其他对象(INT,STR,列表,...)。

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 
>>> 
相关问题