2014-11-18 2 views
-1

По сути, я пытаюсь обновить строку, которую я объявляю в начале. Затем я передаю список через функцию, которая после прохождения теста добавит элемент из списка в строку, разделив каждый элемент на точку с запятой.Обновление глобальной переменной внутри функции несколько раз в Python

Это сокращенная версия того, что я делаю, но она демонстрирует проблему, которую я считаю.

import os 

passList="" 

def checkItem(inString): 
    if inString.endswith(".tif")==True: 
     if passList=="": 
      passList=inString 
     else: 
      passList=passList + ";" + inString 

itemList=os.listdir("C:\\temp") 

for item in itemList: 
    checkItem(item) 

print(passList) 

Я проверил некоторую документацию об использовании функции «global», но они, похоже, не показывают примеры, применимые к моей ситуации. В настоящее время я получаю ошибку «функция, используемая до объявления». Любая помощь будет принята с благодарностью.

Спасибо!

+1

Пожалуйста, включите весь журнал ошибок –

+1

Вы действительно не хотите глобального изменчивого состояния вообще. Это плохая идея. – geoffspear

+0

Несмотря на то, что, прочитав всю эту документацию, вы, похоже, вообще не использовали глобальную инструкцию. Используйте его внутри функции, ошибка исчезнет. –

ответ

2

попробовать это:

def checkItem(inString): 
    global passList 
    # rest of function code 
0

Я считаю, что ответ Hasan Рамезани будет исправить вашу ошибку. Но рассмотрите рефакторинг, чтобы устранить необходимость в нем.

import os 

itemList=filter(lambda x: x.endswith(".tif"), os.listdir("C:\\temp")) 
itemList=";".join(itemList) 

print(itemList) 
+0

хороший ответ чувак! –

0

Оба Хасана и Клинта снабжены отличными ответами.

Из-за сложности фактического кода (не могу публиковать здесь) я закончил объявление «global» для переменной passList как в начале, так и внутри функции.

import os 

global passList 
passList="" 

def checkItem(inString): 
    if inString.endswith(".tif")==True: 
     global passList 
     if passList=="": 
      passList=inString 
     else: 
      passList=passList + ";" + inString 

itemList=os.listdir("C:\\temp") 

for item in itemList: 
    checkItem(item) 

print(passList) 

Это может выглядеть не так сексуально, как могло бы быть, но оно работает.

Thankyou так много!

Смежные вопросы