我想在创建字符串后读取作为字符串创建的lambda函数。
例如,
func = lambda num1,num2: num1 + num2
我想将func读为:
'lambda num1,num2: num1 + num2'
是否有方法可以做到这一点,甚至可以读取lambda函数的任何部分?
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
例如:
inspect
将函数的定义输出为:
import inspect
f = lambda x, y : x + y
print inspect.getsourcelines(f)[0][0]
eval()
计算任何表达式并返回值。
inspect
输出如下:
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)
的函数的所有行,并且整数表示所提供函数在其中开始的行号。