为什么我的 Python exec 命令不起作用?



我想使用"exec";压缩许多行代码。但由于我正在进行的项目有些复杂,我将简化我的代码。

假设我想做一个函数,给我加3个数字,可以很容易地写:

def sum3(a,b,c):
return a+b+c

但由于我正在进行的项目涉及更多的变量和更动态的代码,所以我们希望该函数使用";exec";。我尝试使用它如下:

def suma_eval(a,b,c):
suma=0
for item in ("a","b","c"):
exec(f'''suma+={item}''')
print(f"""suma+={item}""")
return suma

屏幕截图#1

它不起作用。我做错了什么?

更新#1:

正如你所指出的,我已经把它放在一行中,错误停止了,但结果是0,而它应该是73。也就是说,该功能没有按预期工作。

屏幕截图#2

更新#2:

我的问题a已经解决了,非常感谢,这就是答案:

def suma_eval(a,b,c):
suma=0
ldict={}
for item in ("a","b","c"):
exec(f'''suma+={item}''',locals(),ldict)
suma=ldict["suma"]
return suma

因为这一行之后的代码:for item in ("a","b","c"):没有缩进。

正如评论中所指出的,如果您只需要对元素求和,则可以使用sum:

values = [1, 2, 3, 4, 5]
sum(values)

如果您需要更复杂的行为,可以查看mapreducefilter。Reduce允许您将任何函数累积应用于迭代中的所有项,并生成单个最终值。

import functools
def customfunc(a, b):
partial_result = a ** 2 - b
print(f"{a} {b} -> {partial_result}")
return partial_result
functools.reduce(customfunc, values)
# prints:
# 1 2 -> -1
# -1 3 -> -2
# -2 4 -> 0
# 0 5 -> -5

相关内容

  • 没有找到相关文章

最新更新