Python:从一个单独的函数调用一个函数中的变量,但不使用全局变量

时间:2011-10-14 01:00:15

标签: python global-variables

我编写了下面的代码,以检查三个文件和存在的文件,对文件运行“扫描”(如果文件不存在,不要担心它只是运行“扫描”)可用文件)并在这些可用文件上生成正确的输出文件。

我正在处理的程序包括以下代码:

def InputScanAnswer():
    scan_number = raw_input("Enter Scan Type number: ")
    return scan_number

此函数检查这三个文件是否存在,如果存在,请将特定值分配给hashcolumnfilepathNum

def chkifexists():
    list = ['file1.csv', 'file2.csv', 'file3.csv']
    for filename in list:
        if os.path.isfile(filename):
            if filename == "file1.csv":
                hashcolumn = 7
                filepathNum = 5
            if filename == "file2.csv":
                hashcolumn = 15
                filepathNum = 5
            if filename == "file3.csv":
                hashcolumn = 1
                filepathNum = 0
            #print filename, hashcolumn, filepathNum


def ScanChoice(scan_number):
    if scan_number == "1":
        chkifexists()
        onlinescan(filename, filename + "_Online_Scan_Results.csv", hashcolumn, filepathNum) #this is what is giving me errors...
    elif scan_number == "2":
        print "this is scan #2"
    elif scan_number =="3":
        print "this is scan #3"
    else:
        print "Oops! Invalid selection. Please try again."


def onlinescan(FileToScan, ResultsFile, hashcolumn, filepathNum):
    # web scraping stuff is done in this function

我遇到的错误是global name 'filename' is not defined。 我意识到问题是我正在尝试将局部变量从chkifexists()发送到onlinescan()参数。我尝试使用

return filename
return hashcolumn
return filepathNum

chkifexists()函数的末尾但是也没有用。无论如何都要做我想要做的事情

onlinescan(filename, filename + "_Online_Scan_Results.csv", hashcolumn, filepathNum) 

行没有使用全局变量?我知道他们气馁,我希望我能以另一种方式去做。此外,hashcolumn中的filepathNumonlinescan()参数是否与此有关?

1 个答案:

答案 0 :(得分:4)

chkifexists内,您将返回所有三个变量,如下所示:

return (filename, hashcolumn, filepathNum)

您可以通过调用函数来检索这些:

(filename, hashcolumn, filepathNum) = chkifexists()

现在,您可以在函数范围内使用它们而无需全局变量!

从技术上讲,您也不需要括号。事实上,我不确定为什么要包括它们。但是无论哪种方式都有效,那真是太棒了。