Python: вызов переменных в одной функции из отдельной функции, но без использования глобальных переменных - PullRequest
0 голосов
/ 14 октября 2011

Я написал приведенный ниже код, чтобы проверить наличие трех файлов и в зависимости от того, какие файлы существуют, запустите «сканирование» файла (если файл не существует, не беспокойтесь об этом, просто запустите «сканирование» надоступные файлы) и создайте правильный выходной файл для этих доступных файлов.

Программа, над которой я работаю, содержит следующий код:

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

Эта функция проверяет, существуют ли эти три файла, иесли это так, присвойте конкретные значения hashcolumn и filepathNum

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 и filepathNum в onlinescan()?

1 Ответ

4 голосов
/ 14 октября 2011

Внутри chkifexists вы бы вернули все три переменные следующим образом:

return (filename, hashcolumn, filepathNum)

Вы могли бы получить их, вызвав функцию следующим образом:

(filename, hashcolumn, filepathNum) = chkifexists()

Теперь они у вас естьв вашей области видимости функции без глобальных переменных!

Технически вам также не нужны скобки.На самом деле, я не уверен, почему я включил их.Но это работает в любом случае, так что, черт возьми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...