#python #list #function
Вопрос:
У меня есть программа, которую я планирую расширять неоднократно, и я не хочу иметь дело с кодированием одного и того же каждый раз, когда я добавляю новый сегмент. Единственная проблема заключается в том, что одна функция, которая мне нужна, включает добавление списка, определенного вне функции. Я попытался использовать globals (), но получил синтаксическую ошибку.
Примером того, что мне нужно, но не работает из-за характера функций и локальных переменных, является следующее:
fruitList = [] miscList = [] newListObject = input("Enter a new object") def listAppend(object = newListObject, fruit = fruitList): if object in fruit: fruitList.append(object) else: miscList.append(object) listAppend()
Это не работает, потому что miscList и fruitList являются глобальными, а функции могут получать доступ только к локальным переменным и особенно изменять их. Есть ли какие-нибудь обходные пути?
Комментарии:
1. Это не изменение глобальных переменных, а скорее изменение объектов, на которые указывают глобальные переменные.
2. Кроме того, лучше не называть что-то
object
, поскольку это имя встроенного типа Python, который, в общем, лежит в основе всего.3. Это действительно работает . Но он терпит неудачу по другой причине. Пожалуйста, всегда включайте полное сообщение об ошибке.
4. @juanpa.arrivillaga прав — если у вас нет этого кода в другом контексте, это работает. Это можно продемонстрировать, распечатав списки после вашего звонка
listAppend
.5. Добро пожаловать в Stack Overflow. То, что вы говорите о глобалах, неверно, и я не могу воспроизвести проблему. Когда я пробую ваш код, я правильно вижу, что строка, которую я ввожу, добавляется
miscList
. Что касается того , почему вы «получили синтаксическую ошибку»globals()
, мы можем объяснить это только в том случае, если вы покажете код, в котором вы это пробовали. Это также определенно не имеет ничего общего с «использованиемglobals()
» — даже если бы у вас была проблема, связанная с использованием этого, это не проявилось бы как синтаксическая ошибка, потому что синтаксическая ошибка является результатом неправильного отступа вашего кода, несоответствия скобок и т. Д.
Ответ №1:
Это определенно работает на меня! Обратите внимание, что передача глобальных списков в качестве параметров функции не рекомендуется, однако ничто не мешает вам сделать это, если у вас есть особая потребность в этом. Пример, с которым я тестировал, приведен ниже.
fruitList = ['test'] miscList = [] def listAppend(obj=None, fruit=fruitList, misc=miscList): if obj is None: obj = input("Enter a new object") if obj in fruit: fruit.append(obj) else: misc.append(obj) listAppend('lol') listAppend('test') print(fruitList) print(miscList)
Выход:
['test', 'test'] ['lol']
NB: Я переименовал параметр object
в obj
, потому что, как правило, не рекомендуется перезаписывать встроенный тип.