UnboundLocalError: local variable 'p' referenced before assignment
UnboundLocalError: local variable 'p' referenced before assignment
def partial(f,h=0.0001):
#checker
x=y=z=1
fx=(f(x+h,y,z)-f(x,y,z))/h
fy=(f(x,y+h,z)-f(x,y,z))/h
fz=(f(x,y,z+h)-f(x,y,z))/h
if(fx==0):
p=0
elif(fy==0):
q=0
elif(fz==0):
r=0
fx=fy=fz=0
a=15
c=5
for m in range (-a,a,c):
for n in range (-a,a,c):
for o in range (-a,a,c):
x=m
y=n
z=o
if(p==0):
x=0
elif(q==0):
y=0
elif(r==0):
z=0
fx=(f(x+h,y,z)-f(x,y,z))/h
fy=(f(x,y+h,z)-f(x,y,z))/h
fz=(f(x,y,z+h)-f(x,y,z))/h
arrow(pos=vector(m,n,o),axis=vector(+fx,+fy,+fz),color=color.red)
print z
print fx,fy,fz
return 0
我哪里错了?我之前已经声明了p
,但是它说p
在赋值之前被引用了。
您可能会在 if/elif 语句的 for 循环中使用 p
、q
和 r
。这意味着必须定义这些,否则你 运行 有其中任何一个弹出 "UnboundLocalError: local variable '_' referenced before assignment" 错误的风险。但是,根据 fx
、fy
和 fz
是什么调用函数时,您只能定义其中之一。
最简单的解决方案是添加这一行:
p = q = r = -1
在您的 if 语句上方,将其中一个设置为 0。(第 6 行左右)
现在,它们都将被定义,您可以在 for 循环中引用它们,而不管哪个被设置为 0。
def partial(f,h=0.0001):
#checker
x=y=z=1
fx=(f(x+h,y,z)-f(x,y,z))/h
fy=(f(x,y+h,z)-f(x,y,z))/h
fz=(f(x,y,z+h)-f(x,y,z))/h
if(fx==0):
p=0
elif(fy==0):
q=0
elif(fz==0):
r=0
fx=fy=fz=0
a=15
c=5
for m in range (-a,a,c):
for n in range (-a,a,c):
for o in range (-a,a,c):
x=m
y=n
z=o
if(p==0):
x=0
elif(q==0):
y=0
elif(r==0):
z=0
fx=(f(x+h,y,z)-f(x,y,z))/h
fy=(f(x,y+h,z)-f(x,y,z))/h
fz=(f(x,y,z+h)-f(x,y,z))/h
arrow(pos=vector(m,n,o),axis=vector(+fx,+fy,+fz),color=color.red)
print z
print fx,fy,fz
return 0
我哪里错了?我之前已经声明了p
,但是它说p
在赋值之前被引用了。
您可能会在 if/elif 语句的 for 循环中使用 p
、q
和 r
。这意味着必须定义这些,否则你 运行 有其中任何一个弹出 "UnboundLocalError: local variable '_' referenced before assignment" 错误的风险。但是,根据 fx
、fy
和 fz
是什么调用函数时,您只能定义其中之一。
最简单的解决方案是添加这一行:
p = q = r = -1
在您的 if 语句上方,将其中一个设置为 0。(第 6 行左右)
现在,它们都将被定义,您可以在 for 循环中引用它们,而不管哪个被设置为 0。