python解析字符串并作为调用函数
时间: 2024-09-24 17:08:59 浏览: 53
在Python中,你可以通过字典推导、lambda表达式或者正则表达式结合`functools`模块的`lru_cache`等方法,将字符串解析成函数调用。这里我们看几个例子:
1. **字典推导**:如果字符串表示的是函数名和参数列表,可以先构建一个函数映射字典,然后根据字符串内容查找并调用对应函数。
```python
import json
func_map = {'add': lambda a, b: a + b, 'subtract': lambda a, b: a - b}
s = '{"fn": "add", "args": [2, 3]}'
parsed_func = func_map[json.loads(s)['fn'])(*json.loads(s)['args'])
```
2. **Lambda表达式**:对于简单的字符串形式如 `f(a, b)`,可以使用`ast.literal_eval` 将字符串转换成函数调用。
```python
import ast
def parse_lambda_call(s):
args = ast.literal_eval(s.split('(', 1)[1].split(')')[0])
return eval(f"lambda {', '.join(args)}: None")
call_str = 'f(1, 2)'
parsed_call = parse_lambda_call(call_str)
```
3. **正则表达式+eval**:如果你的字符串满足特定格式,比如`"{func_name}(arg1, arg2)"`,可以使用正则表达式匹配后执行。
```python
import re
def parse_and_call(s):
match = re.match(r'(\w+)\((.*)\)', s)
if match:
func_name, args = match.groups()
return locals()[func_name](*[eval(arg) for arg in args.split(',')])
call_str = '"add"(1, 2)'
parsed_call = parse_and_call(call_str)
```
阅读全文