我正在尝试创建一个运行打印代码的函数。例如,
def test(mylist):
mydict = {}
for i in range(mylist):
mydict[i] = ('x'+'%s' %i)
print ("%s = %s" %(mydict[i], i))
test(3)
输出:
x0 = 0
x1 = 1
x2 = 2
我基本上希望我的函数能够运行这些打印的命令并设置x0=0
,x1=1
等等。我想不出办法做到这一点。谢谢!
编辑:
我根据你的字典想法编辑了代码。但是,它似乎仍然没有帮助解决给定函数的梯度。你能帮帮我吗?
import sympy as sy
def test(mylist):
d = {}
for i in range(mylist):
d['x'+str(i)] = 'sy.symbols(x%s, real=True)' %i
return d
test(3)
f = (1/3*x0**6 - 2.1*x0**4 + 4*x0**2 +
x0*x1 - 4*x1**2 + 4*x1**4 + x2)
gf = [sy.diff(f, x0), sy.diff(f, x1), sy.diff(f, x2)]
gf
答案 0 :(得分:0)
正如评论中指出的那样,字典是要走的路。在风格上,养成使用return
而不是打印结果的习惯。
我对您的代码进行了一些更改,这些更改应说明以下几点:
def test(mylist):
d = {}
for i in range(mylist):
d['x'+str(i)] = i
return d
test(3) # {'x0': 0, 'x1': 1, 'x2': 2}
答案 1 :(得分:0)
尝试创建动态变量几乎总是一个坏主意。它是危险的,并且通常会不必要地污染命名空间。但是,我同意在这里使用纯变量会更容易。因此,您可以从test
返回值列表,并将它们解压缩为三个变量(x0
,x1
和x2
):
创建值列表:
def test(mylist):
return [sy.symbols('x' + str(n), real=True) for n in range(mylist)]
然后使用列表中的值创建gf
列表:
x0, x1, x2 = test(3)
f = (1/3*x0**6 - 2.1*x0**4 + 4*x0**2 + x0*x1 - 4*x1**2 + 4*x1**4 + x2)
gf = [sy.diff(f, x0), sy.diff(f, x1), sy.diff(f, x2)]