2013-10-01 262 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 
>>> 
相關問題