Python全局变量混淆

2024-09-30 06:13:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些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),它需要从第一个和第二个脚本访问字符串变量。在

^{pr2}$

在上面的例子中:

  1. strPhotoInclude在pytSettings脚本中设置。在
  2. strPhotoLocation在pytBatch脚本中设置
  3. 如果strPhotoLocation=“NullField”,则strPhotoInclude设置为“FALSE”
  4. 调用strGenerate,在该代码中同时使用strPhotoInclude和strPhotoLocation(未显示,因为在我成功地学习如何从pytSettings获取变量到pytBatch之前,编写pytGenerate脚本是没有用的)
  5. 然后,pytBatch继续并循环执行下一个icnt迭代

我读了很多关于全局变量的线程,并尝试将全局声明放在任意多个位置,但我无法获得正确的排序。在

提前感谢您的帮助。在

编辑以添加:

好吧。这让我克服了第一个障碍,但是调用第三个文件导致了一个相关的问题。在

在第二个文件中,有一个循环来设置几个全局变量,运行第三个脚本,然后在第二个脚本中循环执行另一个迭代来重置变量,然后重新运行第三个脚本。在

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”。在


Tags: 字符串文本import脚本maindef全局变量filehandles
1条回答
网友
1楼 · 发布于 2024-09-30 06:13:55

在函数中,需要先将变量声明为全局变量:

>>> 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:

^{pr2}$

文件2:

## py2.py
import py1
py1.main()
print py1.x

相关问题 更多 >

    热门问题