我想在创建它之后读取我创建的字符串lambda函数。
例如,
func = lambda num1,num2: num1 + num2
我想把func读成:
'lambda num1,num2: num1 + num2'
有没有办法实现这个甚至读取lambda函数的任何部分?
答案 0 :(得分:3)
您可以使用Python的eval()
函数:
>>> func = eval('lambda num1,num2: num1 + num2')
>>> func
<function <lambda> at 0x7fe87b74b668>
评估任何表达式并返回值。
答案 1 :(得分:3)
修改:改变了我的第一个答案,因为我误解了这个问题。这个答案来自许多其他用途,但是我已经完成了代码只显示你想要的字符串部分。
import inspect
func = lambda num1,num2: num1 + num2
funcString = str(inspect.getsourcelines(func)[0])
funcString = funcString.strip("['\\n']").split(" = ")[1]
print funcString
输出以下字符串:
lambda num1,num2: num1 + num2
答案 2 :(得分:3)
您可以使用inspect
模块中的getsourcelines
来执行此操作
此函数以列表的形式返回任何函数,模块,类或方法的定义的所有行以及定义它的行号。
例如:
import inspect
f = lambda x, y : x + y
print inspect.getsourcelines(f)[0][0]
将输出函数的定义为:
f = lambda x, y: x + y
答案 3 :(得分:2)
您可以使用Python的inspect
模块将所需的代码作为字符串列表获取:
#!/usr/bin/env python3
# coding: utf-8
import inspect
func = lambda num1, num2: num1 + num2
def f():
a = 1
b = 2
return a + b
def get_code_as_string(passed_func):
return inspect.getsourcelines(passed_func)
if __name__ == '__main__':
# feed a lambda function
print(get_code_as_string(func))
#feed a normal function
print(get_code_as_string(f))
输出如下:
(['func = lambda num1, num2: num1 + num2\n'], 6)
(['def f():\n', ' a = 1\n', ' b = 2\n', ' return a + b\n'], 8)
如您所见inspect.getsourcelines()
返回列表和整数的元组。该列表包含传递给inspect.getsourcelines()
的函数的所有行,整数表示提供的函数开始的行号。