Проблемы, связанные с расширением массива python, объявленными вне области видимости

60
4

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

Массив объявляется глобальным, поскольку в противном случае функция (и) не может его видеть. Вероятно, есть намного лучший способ, но это работает несколькими способами.

это один набор вещей, которые я пробовал:

        # addTo.insert(0, theItem)
# weeklytasks.append(theItem)
# print(addTo)
# def askForItem(theItem):
# addTo.push(theItem)
# print(addTo)
#

но не повезло.

 def initializer():
print("hello!")
print("do you want to view the current list, or add a new item?")

настройка некоторых массивов

        global weeklyTasks = ['no items'];
global monthlyTasks = ['no items']
global quarterlyTasks = ['no items'];

пытаясь расширить

        quarterlyTasks.extend('the item')
print(quarterlyTasks);

Ни одна из этих работ

        #monthlyTasks.push(0,"task1")
#monthlyTasks.append("item")

установить var для ввода пользователем

        global theItem
addTo = ""
theItem = ""

import string
print('addTo in globals, ' 'addTo' in globals())

берет предмет и проверяет его таймфрейм

        def evaluateInput(timeframe):

global addTo;
global theItem;
if timeframe == "Weekly":
addTo = "weeklyTasks";
printDestination();
weeklyTasks.extend(theItem); # why does [].extend not work here?

if timeframe == "Monthly":
addTo = "monthlyTasks"
monthlyTasks.insert(0,theItem)
printDestination()
if timeframe == "Quarterly":
addTo = "quarterlyTasks"
quarterlyTasks.insert(0,theItem)
printDestination()

следить за запросом на таймфрейм

      def getTimeframe(text): 
if "add" in text:
timeframe = input("Where does this entry go? \n Weekly, Monthly or Quarterly?: ")
evaluateInput(timeframe) # sends the timeframe to evaluateInput

# next, ask for the item
theItem = input('what is the item?')

распечатать подтверждение того, что добавляется, когда

        def printDestination():
print("The item (" + theItem+") will be added to " + addTo)
# prints where something is going
print("the "+addTo+" list now contains:") # good, this worked
print(weeklyTasks) #good, this worked (but the method to push doesn't work)

спросил(а) 2016-09-03T07:48:00+03:00 4 года, 6 месяцев назад
1
Решение
86

Рабочий пример всех упомянутых функций. global не требуется, поскольку список tasklist не tasklist в функции, вызываются только его методы.

tasklist = ['one']

def testfunc():
# no global required
tasklist.append('two')
tasklist.extend(['three', 'four'])
tasklist.insert(0, 'zero')

testfunc()
print(tasklist)
# ['zero', 'one', 'two', 'three', 'four']

Надеюсь, поможет.

ответил(а) 2016-09-03T10:45:00+03:00 4 года, 6 месяцев назад
60

Здесь рабочее решение в python 3.2 для добавления элементов в список в функции:

weeklyTasks = ['No work Sunday']
def AddWeeklyTask():
weeklyTasks.extend(['Work On'])
weeklyTasks.append('Do not work on weekends')
weeklyTasks.insert(2,'Friday')

print(weeklyTasks)
AddWeeklyTask()
print(weeklyTasks)

Вывод:


['No work Sunday']
['No work Sunday', 'Work On', 'Friday', 'Do not work on weekends']

Нет необходимости объявлять list как global

ответил(а) 2016-09-03T11:22:00+03:00 4 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема