我正在写一个程序来控制一个摄像头连接到两个步进电机从树莓圆周率。我是用python编写的,我在理解全局变量(或者python中的名称)时遇到了困难。我查阅了一些关于范围和全局变量的内容,但我对用python编程真的很陌生,对我来说这并不完全有意义。我有一个程序“MainProgram”给一个变量赋值,然后这个程序从一个模块“stepper”调用一个函数。该函数需要使用D\u Alt。我在主程序中将D\u Alt设置为全局变量,但仍然得到一个错误。如何设置D\ Alt以便主程序和模块可以使用它?你知道吗
以下是我的主程序代码:
from astropy.io import fits
import os
import RPi.GPIO as GPIO
import time
import math
import sys
import stepper
global In_Alt, In_Az, C_Alt, C_Az, D_Alt, D_Az
#start server and get initial position
os.system("indi.sh")
os.system("indi.takepic.sh %s %s" %(15, "InitialPosition"))
os.system("platesolve.sh %s" %("InitialPosition"))
stepper.initPosition()
stepper.initPins()
list_of_stars = [[0,0],[1,1],[2,2]] #star in list_of_stars is [RA,D]
for star in list_of_stars:
D_Az=star[0] #
D_Alt=star[1]
print D_Az
print D_Alt
stepper.moveMotor()
for x in range(0,10):
os.system("indi.takepic.sh {0}+str(x) .format(list_of_stars[star])") #take pic with 15s exposure and rename with name of star and number
stepper.resetPosition()
os.system("indi.takepic.sh 15 ResetPosition")
os.system("platesolve.sh ResetPosition")
GPIO.cleanup()
sys.exit(0)
这是我需要使用的模块中的函数:
def moveMotor():
#move altitude motor
global D_Alt
result = D_Alt - C_Alt #find number of steps to move
if(result>0): #if number of steps is positive, move forward
steps = result
forward(int(delay) / 1000.0, int(steps), C_Alt)
C_Alt = C_Alt + steps
else: #if number of steps is negative, move backward
steps = abs(result) #steps must be positive, so turn result into positive number
backwards(int(delay) / 1000.0, int(steps), C_Alt)
C_Alt = C_Alt - steps
我得到的错误是:
Traceback (most recent call last):
File "/home/pi/Stepper_Motors/MainProgram.py", line 25, in <module>
stepper.moveMotor()
File "/home/pi/Stepper_Motors/stepper.py", line 149, in moveMotor
result = D_Alt - C_Alt #find number of steps to move
NameError: global name 'D_Alt' is not defined
>>>
global
语句是一个声明,它适用于整个当前代码块。这意味着列出的标识符将被解释为全局标识符。你知道吗您仍然需要在某个地方定义标识符。这是您得到的错误:
global name 'D_Alt' is not defined
,您尚未定义变量。你知道吗通过在模块根中而不是在函数或其他代码块中定义变量,可以使整个模块以只读方式访问它。但是,要在不同的代码块中修改它,需要在该代码块中声明为global。你知道吗
试试这个:
你可以在这里找到更多关于
global
的信息:https://docs.python.org/2/reference/simple_stmts.html#global相关问题 更多 >
编程相关推荐