Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串作为公式中的文本读取_Python_String_For Loop_Text - Fatal编程技术网

Python 将字符串作为公式中的文本读取

Python 将字符串作为公式中的文本读取,python,string,for-loop,text,Python,String,For Loop,Text,我希望能够执行以下代码: import numpy z=numpy.zeros(4) k="z[i-1]" for i in range(len(b)): z[i]=k 它将返回与以下内容相同的输出: z=numpy.zeros(4) for i in range(6): z[i]=z[i-1] 如果执行第一个代码块,则会收到预期的错误消息: File "<ipython-input-982-3ba4e617a74a>", line 1, in <mod

我希望能够执行以下代码:

import numpy
z=numpy.zeros(4)
k="z[i-1]"
for i in range(len(b)):
    z[i]=k
它将返回与以下内容相同的输出:

z=numpy.zeros(4)
for i in range(6):
    z[i]=z[i-1]
如果执行第一个代码块,则会收到预期的错误消息:

  File "<ipython-input-982-3ba4e617a74a>", line 1, in <module>
    z[i]=(k)

ValueError: could not convert string to float: 'z[i-1]'
文件“”,第1行,在
z[i]=(k)
ValueError:无法将字符串转换为浮点:“z[i-1]”
如何将字符串中的文本传递到循环中,使其作为一个等式来运行,就好像字符串中的字符是手工键入的一样?

按照以下操作:

import numpy
z=numpy.zeros(4)
k="z[i-1]"
for i in range(len(b)):
    z[i]=eval(k)
但请注意,eval可能是一个安全问题:

按以下步骤执行:

import numpy
z=numpy.zeros(4)
k="z[i-1]"
for i in range(len(b)):
    z[i]=eval(k)

但请注意,eval可能是一个安全问题:

我想您正在寻找

考虑:

>>> z = numpy.zeros(4)
>>> k = "10 + z[i-1]"
>>> for i in range(1, 4):
...     z[i] = eval(k)
...
>>> z
array([  0.,  10.,  20.,  30.])

我将表达式稍微复杂一些,以便您可以看到有趣的输出。

我想您正在寻找

考虑:

>>> z = numpy.zeros(4)
>>> k = "10 + z[i-1]"
>>> for i in range(1, 4):
...     z[i] = eval(k)
...
>>> z
array([  0.,  10.,  20.,  30.])

我将表达式稍微复杂一些,这样您就可以看到有趣的输出。

除此之外,生产代码中非常不鼓励使用eval,您也可以轻松定义一个函数,该函数根据数组和索引返回特定项:

def k(arr,idx):
    return arr[idx-1]
for i in range(len(b)):
    z[i]= k(z,i)

如果此规则需要应用于代码中的各个位置,则您可以编辑一个函数以将该逻辑应用于所需的所有位置。

Other then
eval
这在生产代码中是非常不受欢迎的,您可以同样轻松地定义一个基于数组和索引返回特定项的函数:

def k(arr,idx):
    return arr[idx-1]
for i in range(len(b)):
    z[i]= k(z,i)

如果需要在代码中的各个位置应用此规则,则您可以编辑一个函数,以便在所有需要的位置应用该逻辑。

在什么上下文中尝试执行此操作?
k
是否总是采用这种格式?一般的解决方案是使用
eval()
,但它速度慢,并且对任意输入不安全。您在什么环境下尝试这样做?
k
是否总是采用这种格式?一般的解决方案是使用
eval()
,但它速度慢,并且对任意输入不安全。