NameError: name 'first' is not defined
NameError: name 'first' is not defined
我是 python 的新手,我正在尝试绘制函数图。
这是我的代码:
class Optic():
def __init__(self):
'''
param define
'''
global time,lamda, light_speed, Fc, D, z, beta, T0
self.__time = np.linspace(-400,400, 1600) #Picosec
self.__lamda = 1550000 #Picometer
self.__light_speed = 0.3 #meter/Picosec
self.__Fc=light_speed/lamda #Hz
self.__D = 17*np.power(10,-6) #sec/meter
self.__z=[0,10000,20000,30000] #meter
self.__beta = (-(np.power(lamda,2)/(2*np.pi*light_speed))*D) #sec/meter
self.__T0 = 200
# time = np.linspace(-400*np.power(10,-12), 0.5*np.power(10,-12), 400*np.power(10,-12)) #sec
# lamda = 1550*np.power(10,-9) #meter
# light_speed = 3*np.power(10,8) #sec/meter
# Fc=light_speed/lamda #Hz
# D = 17*np.power(10,-6) #sec/meter
# z=[0,10000,20000,30000] #meter
# beta = (-(np.power(lamda,2)/(2*np.pi*light_speed))*D) #sec/meter
# T0 = 20*np.power(10,-12)
def firstPulse(self):
global first
first = np.exp(-0.5*np.power(time/T0,2))
def main():
plt.plot(first, time)
plt.show()
if (__name__ == "__main__"):
main()
但我得到:
NameError: name 'first' is not defined
顺便说一句,我正在使用 Spyder。
您有 init Optic 并调用定义该变量的 def firstPulse(self)。
像这样:
def main():
opt = Optic():
opt.firstPulse()
plt.plot(first, time)
plt.show()
当你打电话给
plt.plot(first, time)
你没有先定义。
你可以把
first = 0
在您的代码中的某处。
然后,您可能会看到 time
(和 plt
的问题,除非您有适当的导入)。
将 first
传递给 Optic
可能更有意义。事实上,所有 global
变量都可以改为发送到 init 函数。
def __init__(self):
可能会变成
def __init__(self, first):
然后在init方法中设置的话self.first
后面可以参考
一般来说,最好避免使用全局变量。
我是 python 的新手,我正在尝试绘制函数图。 这是我的代码:
class Optic():
def __init__(self):
'''
param define
'''
global time,lamda, light_speed, Fc, D, z, beta, T0
self.__time = np.linspace(-400,400, 1600) #Picosec
self.__lamda = 1550000 #Picometer
self.__light_speed = 0.3 #meter/Picosec
self.__Fc=light_speed/lamda #Hz
self.__D = 17*np.power(10,-6) #sec/meter
self.__z=[0,10000,20000,30000] #meter
self.__beta = (-(np.power(lamda,2)/(2*np.pi*light_speed))*D) #sec/meter
self.__T0 = 200
# time = np.linspace(-400*np.power(10,-12), 0.5*np.power(10,-12), 400*np.power(10,-12)) #sec
# lamda = 1550*np.power(10,-9) #meter
# light_speed = 3*np.power(10,8) #sec/meter
# Fc=light_speed/lamda #Hz
# D = 17*np.power(10,-6) #sec/meter
# z=[0,10000,20000,30000] #meter
# beta = (-(np.power(lamda,2)/(2*np.pi*light_speed))*D) #sec/meter
# T0 = 20*np.power(10,-12)
def firstPulse(self):
global first
first = np.exp(-0.5*np.power(time/T0,2))
def main():
plt.plot(first, time)
plt.show()
if (__name__ == "__main__"):
main()
但我得到:
NameError: name 'first' is not defined
顺便说一句,我正在使用 Spyder。
您有 init Optic 并调用定义该变量的 def firstPulse(self)。
像这样:
def main():
opt = Optic():
opt.firstPulse()
plt.plot(first, time)
plt.show()
当你打电话给
plt.plot(first, time)
你没有先定义。 你可以把
first = 0
在您的代码中的某处。
然后,您可能会看到 time
(和 plt
的问题,除非您有适当的导入)。
将 first
传递给 Optic
可能更有意义。事实上,所有 global
变量都可以改为发送到 init 函数。
def __init__(self):
可能会变成
def __init__(self, first):
然后在init方法中设置的话self.first
后面可以参考
一般来说,最好避免使用全局变量。