2013-03-27 80 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。)