2013-10-01 6 views
0

Ok первый бит фона.Как передать функцию другой функции в python

Итак, у меня есть код say (loop.py), который представляет собой не что иное, как большой цикл цикла ... который принимает вход для 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 hasnt изменилось .. и это не изменится ..

так .. может быть, я могу изложить опыт и кто-то может помочь мне понять, как реализовать это ..

что я хочу пользователю писать эти у.е. Пользователь льзовательского 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, ул, список, ...).

1

правило: говорят, у вас есть функция, как

def f(x): return x+1 

Тогда 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 
>>> 
Смежные вопросы