我想用“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:
我已经按照你的指示把它放在一行中,错误停止了,但结果是 0,而它应该是 73。也就是说,该函数没有按预期工作。
更新 #2:
我的问题已经解决了,非常感谢,这就是答案:
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
答案 0 :(得分:0)
因为您在此行之后的代码:for item in ("a","b","c"):
没有缩进。
答案 1 :(得分:-1)
正如评论中所指出的,如果您只需要对元素求和,您可以使用 sum
:
values = [1, 2, 3, 4, 5]
sum(values)
如果您需要更复杂的行为,您可以查看map
、reduce
和filter
。 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