Неразрешенное справочное сообщение в списке с использованием python - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь использовать список, который я создал вне функции, в которой он был создан. У меня есть оригинальный список объектов (my_list), который был создан перед функцией. Я использую функцию, чтобы создать новый список выбранных объектов, используя ввод, и этот новый список - список, который я хочу использовать в остальной части кода. Но когда я пытаюсь распечатать список за пределами функции, он не распознается - может кто-нибудь помочь, пожалуйста.

код ниже.

def get_input_entity(prompt):

    new_object_list = []

    while True:
        chosen_object = input(prompt)
        if chosen_object in my_list:
            new_object_list.append(chosen_entity)
            # allows user to break out of loop on carriage return
        if chosen_object == '\r':
            break
            # allows user to let new list = copy of old list then exit input
        if chosen_object == 'all':
            new_object_list = my_list.copy()
            break
        return chosen_object


print(get_input_entity('Enter entities separated by space'))
# unresolved reference new object list message
print(new_object_list)

1 Ответ

3 голосов
/ 09 апреля 2020

Вам не хватает глобального ключевого слова.

Вы не можете изменить глобальную переменную внутри функции без использования глобального ключевого слова.

См .: Каковы правила для локальные и глобальные переменные в Python?

new_object_list = []
my_list = []


def get_input_object(prompt):
    global my_list, new_object_list

    while True:
        chosen_object = input(prompt)
        if chosen_object in my_list:
            new_object_list.append(chosen_object)
        if chosen_object == '\r':
            break
        if chosen_object == 'all':
            new_object_list = my_list.copy()
            break
    return chosen_object


print(get_input_object('Enter entities separated by space'))
print(new_object_list)

Однако это не очень хорошая идея, и это немного сбивает с толку ... почему бы просто не передать свой список в качестве параметра и вернуть новый список с chosen_object - отрицание необходимости глобальных значений, например

def get_input_object(prompt, original_list):
    output = []
    while True:
        chosen_object = input(prompt)
        if chosen_object in original_list:
            output.append(chosen_object)
        if chosen_object == '\r':
            break
        if chosen_object == 'all':
            output = original_list.copy()
            break
    return chosen_object, output


chosen, new_list = get_input_object('Enter entities separated by space')

print(chosen)
print(new_list)
...