2013-03-27 5 views
0

Есть ли естественный способ преобразования функции python в автономные скрипты? Что-то вроде:Функция Python on-fly для преобразования скриптов

def f(): 
    # some long and involved computation 

script = function_to_script(f) # now script is some sort of closure, 
           # which can be run in a separate process 
           # or even shipped over the network to a 
           # different host 

и НЕ нравится:

script = open("script.py", "wt") 
script.write("#!/usr/bin/env python") 
... 
+0

Вы ищете что-то вроде этого? http://pythonhosted.org/Pyro4/ –

+0

Не совсем - как я понимаю, Pyro - это библиотека для общения по сети. Мне нужно что-то, чтобы инкапсулировать вычисления. – Timur

+0

Pyro - это удаленная библиотека. Он позволяет выполнять функции, называемые кросс-процессами или межсетевыми. Функции уже инкапсулируют вычисления, а Pyro позволит вам называть эти функции где-то в другом месте, поэтому, если это не так, то чего вы пытаетесь выполнить? Вы ищете функцию Eval? –

ответ

2

Вы можете превратить любой «объект» в функцию, определив метод __call__ на него Таким образом, если вы хотите полочкам (см here.) какое-то состояние с вычислениями, до тех пор, пока то, что вы предоставили с самого верхнего на дно класса, можно мариновать, тогда этот объект можно мариновать.

class MyPickledFunction(object): 
    def __init__(self, *state): 
     self.__state = state 

    def __call__(self, *args, **kwargs): 
     #stuff in here 

Это простой способ обманывания. Почему травление? Все, что можно мариновать, может быть отправлено на другой процесс без страха. Вы создаете «закрытие бедных людей», используя такой объект.

(Там очень хороший пост о «маршалом» библиотеки here on SO, если вы действительно хотите засолить функцию.)

Смежные вопросы