巧用python中eval()函数执行多个自定义函数

本文介绍了在Python项目中如何通过eval函数结合for循环和列表,以更简洁的方式调用多个自定义函数。示例代码展示了如何根据参数列表动态执行noParam、oneParam和twoParam等函数。这种方法适用于无返回值的函数,若需返回值,可考虑在类中定义方法并通过类变量存储结果。虽然实用但不常用,且可能存在安全性问题。
部署运行你感兴趣的模型镜像

背景介绍

在写python项目的过程中,遇到了这样的一个问题。就是自己写的自定义函数较多,如果每一个函数都用普通的调用方式,太多了。所以,最后想办法解决这个问题。想到了利用python中的eval()函数结合for循环以及列表的形式来解决这个问题。

实现代码

def noParam():
    print('noparam')


def oneParam(param1):
    print(param1)


def twoParam(param1, param2):
    print(param1, param2)


funcList = ['noParam', 'oneParam', 'twoParam']
paramList = [[], ['1'], ['1', '2']]

for i in range(len(funcList)):
    if len(str(paramList[i])[1:-1]) == 0:
        eval('{}()'.format(funcList[i]))
    else:
        eval('{}({})'.format(funcList[i], str(paramList[i])[1:-1]))

总结

最开始一直在犹豫要不要写这个东西,因为这个东西觉得有的时候的确会用到,但是用的地方又不多。有一些鸡肋。而且这种方式适用于没有return的函数。如果有需要return,可以考虑在class中写def方法。然后利用class中的变量来储存值。当然,这并不是最棒的方法。

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

Python 中 `eval()` 函数是一个内置函数,用于执行一个字符串表达式,并返回表达式的值。以下是关于它的详细知识点: #### 类型转换 `eval()` 函数可以实现 `list`、`dict`、`tuple` 与 `str` 之间的转化。`str` 函数能把 `list`、`dict`、`tuple` 转为字符串,而 `eval()` 函数则可以将字符串转换为对应的 `list`、`dict`、`tuple` 类型。例如: ```python # 字符串转换成列表 a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]" print(type(a)) b = eval(a) print(b) ``` 上述代码中,变量 `a` 是一个字符串,通过 `eval()` 函数将其转换为了列表类型 [^1]。 #### 解析和执行字符串代码 可以使用 `eval()` 解析和执行字符串代码。例如定义一个简单的计算器函数: ```python def calculator(expression): try: result = eval(expression) return result except: return "Invalid expression" ``` 此函数接收一个字符串表达式作为参数,返回计算结果,若表达式无效则返回错误信息 [^4]。 #### 作用域 `eval` 函数有两个可选参数 `globals` 和 `locals`,用于指定全局和局部作用域。`globals` 参数必须是一个字典,`locals` 参数可以是任何映射对象。`eval` 函数包含 `globals` 参数时会使用全局作用域下的变量。例如: ```python x = 100 def test(): x = 10 y = 20 result = eval('x + y', globals(), locals()) print(result) test() ``` 从结果可以看到,`globals()` 的结果包含了全局变量,而 `locals()` 则包含的是局部变量。在 `eval` 函数中,如果指定了 `globals` 和 `locals`,它会优先使用 `locals` 中的变量,若 `locals` 中没有则使用 `globals` 中的变量 [^4]。 #### 潜在风险 `eval()` 函数执行任何传递给它的代码,这意味着如果传递的字符串是由用户输入的,可能会存在安全风险,例如用户可以输入恶意代码来执行系统命令等操作。因此,在使用 `eval()` 函数时,要确保输入的字符串是可信的。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值