import numpy as np
def Vin(t):
inputs = []
for i in range (1000):
if (-1)**(np.floor( 2 * t[i] )) == 1:
Vin = (1)
inputs.append(Vin)
else:
Vin = (-1)
inputs.append(Vin)
return inputs
当我在一系列t
值上使用此函数时,我只得到一个结果,
即。
input1=Vin(tpoints)
print (input1)
只给[1],而我希望函数为每个t
值执行此操作。
答案 0 :(得分:3)
正如其他人所说,return
声明中存在缩进错误。我无法以更加pythonic的方式重写你的代码,避免所有繁琐的循环和由此产生的错误:
return [1 if (-1)**(np.floor( 2 * t[i] )) == 1 else -1 for i in range (1000)]
列表comprenhension + ternary构造语句在1行中创建你的-1,1数组,比你用循环写的快得多。
答案 1 :(得分:0)
你正在for循环中返回,所以你会在循环的第一次迭代时从函数返回。
您可以重写以下功能
<强>代码强>
def Vin(t):
inputs = []
for i in range (1000):
if (-1)**(np.floor( 2 * t[i] )) == 1:
inputs.append(1)
else:
inputs.append(-1)
return inputs
检查此处函数中返回输入的缩进。
BTW,您的功能可以简化为更加pythonic和高效的代码def Vin(t):
reduce map(lambda x:int((-1)**(np.floor( t[i] < 1))), range (1000))
答案 2 :(得分:0)
尝试:
for i in range (1000):
if (-1)**(np.floor( 2 * t[i] )) == 1:
Vin = (1)
inputs.append(Vin)
else:
Vin = (-1)
inputs.append(Vin)
return inputs
返回的当前缩进,在第一次迭代后退出for循环