如何在不使用exec的情况下在每次迭代中对for循环使用不同的函数?
我正在创建一个适合各种曲线数据的程序。我创造了一些它做定义拟合函数如下:如何在不使用exec的情况下在每次迭代中对for循环使用不同的函数?
for i in range(len(Funcs2)):
func = "+".join(Funcs2[i])
func = func.format("[0:3]","[3:6]")
exec('def Trial1{0}(x,coeffs): return {1}'.format(i, func))
exec('def Trial1{0}_res(coeffs, x, y): return y - Trial1{0}
(x,coeffs)'.format(i))
如何再调用这些函数创建的每个功能反过来。目前,我做如下:
for i in range(len(Funcs2)):
exec('Trial1{0}_coeffs,Trial1{0}_cov,Trial1{0}_infodict,Trial1{0}_
mesg,Trial1{0}_flag =
scipy.optimize.leastsq(Trial1{0}_res,x02, args=(x, y),
full_output = True)'.format(i))
在这个循环中,每个创建函数被调用的loop.The问题的每一次迭代是,我有使用EXEC()做的,让想我要做。这可能是不好的做法,并且必须有另一种方式来做到这一点。
而且,我不能使用超过numpy的,SciPy的其他图书馆和matplotlib
很抱歉的坏格式。该框只能使用很长的代码行。
函数是python中的第一类对象!你可以把它们放在像列表或元组这样的容器中,遍历它们,然后调用它们。 exec()或eval()不是必需的。
要使用函数作为对象而不是调用它们,请省略括号。
EG:
def plus_two(x):
return x+2
def squared(x):
return x**2
def negative(x):
return -x
functions = (plus_two, squared, negative)
for i in range(1, 5):
for func in functions:
result = func(i)
print('%s(%s) = %s' % (func.__name__, i, result))
- >输出
plus_two(1) = 3
squared(1) = 1
negative(1) = -1
plus_two(2) = 4
squared(2) = 4
negative(2) = -2
plus_two(3) = 5
squared(3) = 9
negative(3) = -3
plus_two(4) = 6
squared(4) = 16
negative(4) = -4
谢谢你这真的很有帮助。 – GaeafBlaidde
很高兴帮助!与未来的蟒蛇好运。 –
就我个人而言,我认为使用f-字符串会使代码更难理解,因为f-字符串对于大多数读者来说可能是陌生的。我认为将函数调用和结果打印成单独的语句(例如:result = func(i); print(...)')会更好,这将更清楚地表明您正在调用函数而不是依靠一些字符串处理巫术。 –
'Func2'是如何定义的? – Daniel
'Funcs2'的内容是什么?首先,我怀疑你的第一个循环是一个好主意。 – chepner
Funcs2是元组列表。每个元组包含3个字符串。我同意循环是一个坏主意,但我想不出另一种动态创建和命名函数的方法 – GaeafBlaidde