我想在创建了一个lambda函数之后,读取它。比如说,
func = lambda num1,num2: num1 + num2
字符串我想把func读成:
'lambda num1,num2: num1 + num2'
型有没有一种方法可以实现这一点,甚至可以读取lambda函数的任何部分?
zbsbpyhn1#
编辑:因为我误解了这个问题,所以我改变了我的第一个答案。这个答案是从其他一些用途中借用的,但是我已经完成了代码,只显示你想要的字符串的一部分。
import inspectfunc = lambda num1,num2: num1 + num2funcString = str(inspect.getsourcelines(func)[0])funcString = funcString.strip("['\\n']").split(" = ")[1]print funcString
import inspect
funcString = str(inspect.getsourcelines(func)[0])
funcString = funcString.strip("['\\n']").split(" = ")[1]
print funcString
字符串输出以下字符串:
lambda num1,num2: num1 + num2
型
sdnqo3pr2#
您可以使用inspect模块中的getsourcelines来执行此操作此函数以列表形式返回任何函数、模块、类或方法的所有定义行以及定义它的行号。举例来说:
inspect
getsourcelines
import inspectf = lambda x, y : x + yprint inspect.getsourcelines(f)[0][0]
f = lambda x, y : x + y
print inspect.getsourcelines(f)[0][0]
字符串将输出函数的定义为:
f = lambda x, y: x + y
mbzjlibv3#
你可以使用Python的inspect模块来获取所需的字符串列表代码:
#!/usr/bin/env python3# coding: utf-8import inspectfunc = lambda num1, num2: num1 + num2def f(): a = 1 b = 2 return a + bdef 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))
#!/usr/bin/env python3
# coding: utf-8
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)
(['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()的函数的所有行,整数表示所提供的函数开始的行号。
inspect.getsourcelines()
l0oc07j24#
你可以使用Python的eval()函数:
eval()
>>> func = eval('lambda num1,num2: num1 + num2')>>> func<function <lambda> at 0x7fe87b74b668>
>>> func = eval('lambda num1,num2: num1 + num2')
>>> func
<function <lambda> at 0x7fe87b74b668>
字符串计算任何表达式并返回值。
4条答案
按热度按时间zbsbpyhn1#
编辑:因为我误解了这个问题,所以我改变了我的第一个答案。这个答案是从其他一些用途中借用的,但是我已经完成了代码,只显示你想要的字符串的一部分。
字符串
输出以下字符串:
型
sdnqo3pr2#
您可以使用
inspect
模块中的getsourcelines
来执行此操作此函数以列表形式返回任何函数、模块、类或方法的所有定义行以及定义它的行号。
举例来说:
字符串
将输出函数的定义为:
型
mbzjlibv3#
你可以使用Python的
inspect
模块来获取所需的字符串列表代码:字符串
输出如下所示:
型
正如你所看到的,
inspect.getsourcelines()
返回一个列表和一个整数的元组。列表包含传递给inspect.getsourcelines()
的函数的所有行,整数表示所提供的函数开始的行号。l0oc07j24#
你可以使用Python的
eval()
函数:字符串
计算任何表达式并返回值。