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

brjng4g3  于 2023-11-16  发布在  Python
关注(0)|答案(4)|浏览(97)

我想在创建了一个lambda函数之后,读取它。
比如说,

  1. func = lambda num1,num2: num1 + num2

字符串
我想把func读成:

  1. 'lambda num1,num2: num1 + num2'


有没有一种方法可以实现这一点,甚至可以读取lambda函数的任何部分?

zbsbpyhn

zbsbpyhn1#

编辑:因为我误解了这个问题,所以我改变了我的第一个答案。这个答案是从其他一些用途中借用的,但是我已经完成了代码,只显示你想要的字符串的一部分。

  1. import inspect
  2. func = lambda num1,num2: num1 + num2
  3. funcString = str(inspect.getsourcelines(func)[0])
  4. funcString = funcString.strip("['\\n']").split(" = ")[1]
  5. print funcString

字符串
输出以下字符串:

  1. lambda num1,num2: num1 + num2

sdnqo3pr

sdnqo3pr2#

您可以使用inspect模块中的getsourcelines来执行此操作
此函数以列表形式返回任何函数、模块、类或方法的所有定义行以及定义它的行号。
举例来说:

  1. import inspect
  2. f = lambda x, y : x + y
  3. print inspect.getsourcelines(f)[0][0]

字符串
将输出函数的定义为:

  1. f = lambda x, y: x + y

展开查看全部
mbzjlibv

mbzjlibv3#

你可以使用Python的inspect模块来获取所需的字符串列表代码:

  1. #!/usr/bin/env python3
  2. # coding: utf-8
  3. import inspect
  4. func = lambda num1, num2: num1 + num2
  5. def f():
  6. a = 1
  7. b = 2
  8. return a + b
  9. def get_code_as_string(passed_func):
  10. return inspect.getsourcelines(passed_func)
  11. if __name__ == '__main__':
  12. # feed a lambda function
  13. print(get_code_as_string(func))
  14. # feed a normal function
  15. print(get_code_as_string(f))

字符串
输出如下所示:

  1. (['func = lambda num1, num2: num1 + num2\n'], 6)
  2. (['def f():\n', ' a = 1\n', ' b = 2\n', ' return a + b\n'], 8)


正如你所看到的,inspect.getsourcelines()返回一个列表和一个整数的元组。列表包含传递给inspect.getsourcelines()的函数的所有行,整数表示所提供的函数开始的行号。

展开查看全部
l0oc07j2

l0oc07j24#

你可以使用Python的eval()函数:

  1. >>> func = eval('lambda num1,num2: num1 + num2')
  2. >>> func
  3. <function <lambda> at 0x7fe87b74b668>

字符串
计算任何表达式并返回值。

相关问题