2013-03-27 74 views
0

是否有合理的自然方式將python函數轉換爲獨立腳本?喜歡的東西:Python動態腳本轉換功能

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/ – 2013-03-27 22:43:53

+0

不是真的 - 據我瞭解,Pyro是一個通過網絡進行通信的庫。我需要一些東西來封裝計算。 – Timur 2013-03-28 02:52:28

+0

Pyro是一個遠程庫。它允許將函數稱爲跨進程或跨主機。函數已經封裝了計算,Pyro會允許你在其他地方調用這些函數,所以如果不是那樣的話,那麼你想完成什麼?你在尋找一個評估函數嗎? – 2013-03-28 03:03:49

回答

2

您可以通過定義它的__call__方法將任何「對象」變成了功能。因此,如果要劃分(見here。)一些狀態與計算,只要你從一個類的頂部到底部提供的東西可以被醃製,那麼該對象就可以被醃製。

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

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

這是一個簡單的騙子的方式。爲什麼要酸洗?任何可以醃製的東西都可以發送到另一個過程而不用擔心。通過使用這樣的對象,你正在形成一個「窮人封閉」。

(有一個不錯的職位有關「元帥」庫,如果你想真正醃製功能here on SO。)