无法从python脚本获取时间
我正在测试两个python脚本sunset.py,它调用gettimes.py获得两次,但我没有返回任何结果。我知道gettimes.py被称为它打印的时间,但我不能从sunset.py gettimes.py打印出来无法从python脚本获取时间
from gettimes import main
arg1 = ''
arg2 = ''
main(arg1, arg2)
print 'Hour on ', arg1
print 'Hour off ', arg2
sunset.py
import ephem # to get sunrise and sunset
import datetime # import date and time modules
import time
import sys
def main(arg1, arg2):
here = ephem.Observer() #determine position of observer
here.lat = 'xx.xx085057'
here.lon = '-x.xx781850'
here.elevation = 43 #meters
sun = ephem.Sun() #define sun as object
arg1 = here.next_rising(sun).datetime().strftime('%H:%M')
arg2 = here.next_setting(sun).datetime().strftime('%H:%M')
print arg1, arg2
if __name__=='__main__':
sys.exit(main(sys.argv[1], sys.argv[2]))
我在做什么错?
Python不会按照您认为的方式引用参数(它不像C++引用语义)。这更像是通过指针传递;你可以改变接收到的对象的属性,但是如果你完全重新分配了这个名字,你就失去了指向原始对象的指针(并且本地名称不再与调用者有任何关系)。
当您重新分配arg1
和arg2
在sunset.main
时,会重新触发本地名称,但调用者变量未更改。这里通常的解决办法是只返回新值,垃圾无法通过时,功能并不需要它:
def main():
here = ephem.Observer() #determine position of observer
here.lat = 'xx.xx085057'
here.lon = '-x.xx781850'
here.elevation = 43 #meters
sun = ephem.Sun() #define sun as object
arg1 = here.next_rising(sun).datetime().strftime('%H:%M')
arg2 = here.next_setting(sun).datetime().strftime('%H:%M')
return arg1, arg2
# I have no idea why you were passing argv stuff to main here,
# since it's not used, but this is a not too terrible way of handling it:
if __name__ == '__main__':
print(*main())
而且在发送方:
from gettimes import main
arg1, arg2 = main()
print 'Hour on ', arg1
print 'Hour off ', arg2
字符串不可变。
试试:
import ephem # to get sunrise and sunset
import datetime # import date and time modules
import time
import sys
def main():
here = ephem.Observer() #determine position of observer
here.lat = 'xx.xx085057'
here.lon = '-x.xx781850'
here.elevation = 43 #meters
sun = ephem.Sun() #define sun as object
arg1 = here.next_rising(sun).datetime().strftime('%H:%M')
arg2 = here.next_setting(sun).datetime().strftime('%H:%M')
# print arg1, arg2
return (arg1, arg2)
if __name__=='__main__':
sys.exit(main(sys.argv[1], sys.argv[2]))
。
from gettimes import main
arg1, arg2 = main()
print 'Hour on ', arg1
print 'Hour off ', arg2
我想你的意思是说“字符串不是_mutable_”或“字符串不可变”。正如所写的,你说的与你的意思相反。即使如此,字符串的可变性在这里并不相关;他们在'main'中反弹了本地名称,因此可变或不可变,它们不再与调用者传递的内容相关。 – ShadowRanger
感谢您的回答 – tamus
我的错误。谢谢。 – andercruzbr
谢谢你的回答,两者都有效,但我也摆脱了这里我不需要的几行,而当涉及到代码时更少 – tamus