你如何读取lambda函数作为字符串?

时间:2015-06-22 15:25:42

标签: python string function lambda

我想在创建它之后读取我创建的字符串lambda函数。

例如,

func = lambda num1,num2: num1 + num2

我想把func读成:

'lambda num1,num2: num1 + num2'

有没有办法实现这个甚至读取lambda函数的任何部分?

4 个答案:

答案 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()的函数的所有行,整数表示提供的函数开始的行号。