У меня есть код VB, который я пытаюсь реплицировать в Python, но я новичок в Python, и его обработка глобальных переменных меня полностью смущает.Python Глобальные переменные Confusion
У меня есть скрипт Python (pytSettings), который импортирует текст из текстового файла и назначает части текста различным строковым переменным. Пример ...
def main():
strFileS = "/Users/username/Desktop/settings.txt"
fileHandleS = open(strFileS, 'r')
fileContentsS = fileHandleS.readlines()
fileHandleS.close()
strPhotoInclude = fileContentsS[0]
Тогда у меня есть второй сценарий (pytBatch), что петли через линии отдельного текстового файла и присваивает части каждой строки текста к другому набору строковых переменных. Внутри этого второго скрипта (pytBatch) мне нужен доступ к переменным из первого скрипта (pytSettings).
Усложнение вопросов, в цикле While второго скрипта (pytBatch), я вызываю третий скрипт (pytGenerate), которому нужен доступ к строковым переменным из первого и второго скриптов.
def main():
strFileB = "/Users/username/Desktop/batch.txt"
fileHandleB = open(strFileB, 'r')
fileContentsB = fileHandleB.readlines()
fileNumLines = len([l for l in fileContentsB if l.strip(' \n') != ''])
fileHandleB.close
icnt = 0
while icnt < (fileNumLines):
fileHandleB = open(strFileB, 'r')
fileLine = fileHandleB.readlines()
strLineTemp = fileLine[icnt]
strLineTempI = strLineTemp.find("|")
strPhotoLocation = strLineTemp[0:strLineTempI]
if strPhotoLocation == "NullField":
strPhotoInclude = "FALSE"
else:
strPhotoInclude = strPhotoInclude
pytGenerate.main()
icnt = icnt +1
В приведенном выше примере:
- strPhotoInclude установлен в сценарии pytSettings.
- strPhotoLocation установлен в сценарии pytBatch
- Если strPhotoLocation = «NullField», strPhotoInclude затем устанавливается на «FALSE»
- strGenerate называется, как с strPhotoInclude и strPhotoLocation используется в этом коде (не показанного, поскольку до Я могу успешно узнать, как получить переменные из pytSettings в pytBatch, сценариев pytGenerate бесполезно)
- pytBatch затем возобновляется и перебирает следующей итерации icnt
Я прочитал десятки нитей на глобальной переменной и попытался размещение gl obal в любом количестве мест, но я просто не могу правильно упорядочить последовательность.
Заранее благодарим за любую помощь, которую вы можете дать.
EDIT to ADD:
OK. Это заставило меня преодолеть первое препятствие, но вызов третьего файла вызывает связанную проблему.
Во втором файле есть цикл, который устанавливает несколько глобальных переменных, запускает третий скрипт, а затем повторяет другую итерацию во втором скрипте для сброса переменных, а затем перезапускает третий скрипт.
import pytSettings
pytSettings_main()
def main():
'''code that loads the text file omitted'''
global strPhoto
icnt = 0
while icnt < (fileNumLines):
strPhoto = strLineTemp
'''reset photo include to false if photo if no photo filename provided'''
if strPhoto == "NullField":
pytSettings.strPhotoInclude = "FALSE"
else:
pytSettings.strPhotoInclude = "TRUE"
'''call the Generate script'''
pytGenerate.main()
'''iterate to next line of the input text file'''
icnt = icnt +1
Мой третий сценарий (pytGenerate) не может найти глобалов из второго сценария (pytBatch), но их можно найти из первых (pytSettings).
import pytSettings
import pytBatch
def main():
print pytSettings.strMarginTop '''this works'''
print pytBatch.strPhoto '''this does not'''
Попытка ссылки на глобальную переменную второго скрипта (strPhoto) приводит к «„модуль“не имеет атрибута„strPhoto“».
Не копировать код, копировать алгоритмы. –
Вы не можете получить доступ к переменным из одного сценария в другом, не импортируя их. – BrenBarn
Что вы подразумеваете под «скриптом»? Являются ли эти полностью отдельные программы независимыми? Являются ли они модулями python, которые все используются вместе в рамках одной программы? –