如何让Python写下它在内存中的函数的代码?

2024-09-30 01:24:36 发布

您现在位置:Python中文网/ 问答频道 /正文

当我传递程序中的选项(计算生物学实验)时,我通常通过.py文件传递它们。
我有一个.py文件,它的内容如下:

starting_length=9
starting_cell_size=1000
LengthofExperiments=5000000

然后我执行文件并获取数据。因为程序都在我的机器上,没有其他人可以访问它,所以它非常安全。
我也可以很容易地编写类似的文件:

^{pr2}$

我想传递一个函数作为参数之一:

starting_length=9
starting_cell_size=1000
LengthofExperiments=5000000

def pippo(a,b):
    return a+b
functionoperator=pippo

当然,在实际实验中,pippo函数要复杂得多。不同的实验不同。在

但是我不能自动编写函数。简而言之,如果其中一个选项是函数,我不知道如何泛化writeoptions函数来继续编写选项。当然,我可以复制原始文件,但这不美观,效率低下(因为它包含许多未使用的额外选项),而且通常不能解决问题。在

如何让python在写下变量值的同时写下函数的代码?在


Tags: 文件函数py程序机器内容size选项
3条回答

您还可以考虑其他一些数据持久性方法。在我自己的(天文学)研究中,我一直在试验两种不同的存储脚本的方法,以便重现。第一种方法是将它们独占在subversion存储库中,然后让作业提交脚本自动提交它们。例如,如果您只想在bash中执行此操作:

alias run_py='svn ci -m "Commit before running"; python2.5 $*'

在这个脚本中,输出以current subversion revision number为前缀,这样就有了运行的每个脚本和输入的记录。你可以根据需要把这个从颠覆中拉回来。在

另一种跟踪函数输入的方法(基本上功能不太全面)可以通过类似于LodgeIt的东西,一个接受XML-RPC输入并附带Python绑定的pastebin。(它可以在本地安装,并支持回复和更新现有的锡膏。)

但是,如果您希望包含相对较少的代码,Vinko使用inspect的解决方案应该可以很好地工作。道格·赫尔曼covered the ^{} module在他的Python Module of the Week系列中。您可以创建一个decorator来检查每个选项和参数,然后根据需要将其打印出来(我将使用inspect.getargspec来获取参数的名称)

^{pr2}$

这可能会更优雅一些,但在我的测试中,它适用于简单的参数和变量集。另外,使用lambdas可能会有一些问题。在

vinko@mithril$ more a.py

def foo(a):
  print a

vinko@mithril$ more b.py

import a
import inspect

a.foo(89)
print inspect.getsource(a.foo)

vinko@mithril$ python b.py
89
def foo(a):
  print a

你在问这个吗?在

def writeoptions(directory):
    options=""
    options+="starting_length=%s%s"%(starting_length,os.linesep)
    options+="starting_cell_size=%s%s"%(starting_cell_size,os.linesep)
    options+="LengthofExperiments=%s%s"%(LengthofExperiments,os.linesep)
    options+="def pippo(a,b):%s" % ( os.linesep, )
    options+="    '''Some version of pippo'''%s" % ( os.linesep, )
    options+="    return 2*a+b%s" % ( os.linesep, )
    open("%s%soptions.py"%(directory,os.sep),'w').write(options)

还是别的什么?在

相关问题 更多 >

    热门问题