如何运行打印的代码Python

时间:2018-02-10 02:31:48

标签: python

我正在尝试创建一个运行打印代码的函数。例如,

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=0x1=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

2 个答案:

答案 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返回值列表,并将它们解压缩为三个变量(x0x1x2):

创建值列表:

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)]