在JavaScript中,可以打印出函数的定义.有没有办法在Python中实现这一目标?
(只是在交互模式下玩,我想读一个没有打开的模块().我只是很好奇).
我希望能够打印lambda函数的定义代码.
示例如果我通过lambda语法定义此函数:
>>>myfunction = lambda x: x==2
>>>print_code(myfunction)
Run Code Online (Sandbox Code Playgroud)
我想得到这个输出:
x==2
Run Code Online (Sandbox Code Playgroud) 假设我正在使用Python shell,我给了一个函数f
.如何访问包含其源代码的字符串?(从shell开始,而不是手动打开代码文件.)
我希望这甚至可以用于其他函数中定义的lambda函数.
重复..
我有一个成功运行的方法定义,但想在运行时修改它.
例如:如果我有方法
def sayHello():
print "Hello"
Run Code Online (Sandbox Code Playgroud)
type(sayHello)给我答案'type function'.我能获取此函数对象的源代码字符串吗?它被认为是安全问题吗?
有没有办法从python解释器查看函数,类或模块的源代码?(除了使用帮助查看文档和dir以查看属性/方法)
调查一下我开始用gdb-python突然得到的一个奇怪的错误,我把它简化为:
C:\Users\User>python -i
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win 32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> dir(os.path)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'path'
>>> dir(os)
['__builtins__', '__doc__', '__file__', '__name__', '__package__']
Run Code Online (Sandbox Code Playgroud)
通过其他一些'module' object has no attribute
答案,最常见的建议是,os.py
某个地方必须有另一个流氓sys.path
,并且它正在加载,而不是内置的.但我检查了PYTHONPATH
环境变量,并在当前目录中,并没有任何其他os.py
.
因此,我找到了一种方法来查找定义实体的文件的名称,并且毫不奇怪,Python 以模块的形式具有这样的功能inspect
.
>>> inspect.getsourcelines(os)
Traceback …
Run Code Online (Sandbox Code Playgroud) 函数的源代码可以通过inspect.getsourcelines(func)
函数接收。有没有办法为上下文管理器做同样的事情?
with test():
print('123')
# How to get "print('123')" as line here?
Run Code Online (Sandbox Code Playgroud) 我正在编写一个脚本,并且不小心删除了一个函数的代码(因此无法撤消),但该函数保存在内存中。
print(diff)
#output
<function diff at 0x7f48f238a670>
Run Code Online (Sandbox Code Playgroud)
有没有办法打印这个函数的代码?
当我通过程序中的选项(计算生物学实验)时,我通常会将它们传递给.py文件.
所以我有这个.py文件,如下所示:
starting_length=9
starting_cell_size=1000
LengthofExperiments=5000000
Run Code Online (Sandbox Code Playgroud)
然后我执行文件并获取数据.由于程序全部在我的机器上,没有其他人可以访问它,因此它是安全的.
我也可以很容易地写一个类似的文件:
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)
...
open("%s%soptions.py"%(directory,os.sep),'w').write(options)
Run Code Online (Sandbox Code Playgroud)
我想传递一个函数作为参数之一:
starting_length=9
starting_cell_size=1000
LengthofExperiments=5000000
def pippo(a,b):
return a+b
functionoperator=pippo
Run Code Online (Sandbox Code Playgroud)
当然,在真正的实验中,函数pippo会复杂得多.不同于实验到实验.
但我无法做的是自动编写函数.总之,如果其中一个选项是函数,我不知道如何推广writeoptions函数以继续编写选项.我当然可以复制原始文件,但这是不优雅的,低效的(因为它包含许多未被使用的额外选项),并且通常不能解决问题.
你如何让python写下函数的代码,因为它记下了变量的值?