我有一些VB代码,我试图在Python中复制,但我是Python的新手,它对全局变量的处理让我完全糊涂了。
我有一个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)中的变量。
使问题复杂化,在第二个脚本(pytBatch)的While循环中,我调用第三个脚本(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
在上面的示例中:
我已经读过全局变量上的几十个主题,并尝试将全局声明放在任意数量的地方,但我无法正确排序。
提前感谢您提供任何帮助。
编辑到ADD:
行。这让我超过了第一个障碍,但是对第三个文件的调用引起了相关问题。
在第二个文件中,有一个循环设置了几个全局变量,运行第三个脚本,然后在第二个脚本中循环另一个迭代以重置变量,然后重新运行第三个脚本。
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)会导致“'module'没有属性'strPhoto'”。
答案 0 :(得分:1)
在函数中,您需要将变量声明为全局变量:
>>> def some_function():
>>> global x
>>> x = 5
>>> x # before executing f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> f()
>>> x # after executing f()
5
对于多个文件,它基本上是相同的,除了变量也被文件命名为:
<强>文件1:强>
## py1.py
def main():
global x
x = 10
<强> file2的:强>
## py2.py
import py1
py1.main()
print py1.x