#python #list
#python #Список
Вопрос:
Допустим, у меня есть 3 файла, как показано ниже. mylist.py состоит из списка и функции для добавления в список. main.py получает значение переменной ‘x’ из входных данных и передает его функции addList в mylist.py . И теоретически я хотел бы main2.py чтобы просто распечатать global_list из mylist.py содержит значение для x, которое я только что ввел в main. Очевидно, что это так не работает, и когда я добавляю значение в список через main.py а потом беги main2.py он выведет пустой список. Мне было интересно, как я мог бы решить эту концепцию, где я могу добавлять и получать значения в списке из 2 или более файлов? Спасибо!
mylist.py:
global_list = []
def addList(x):
global_list.append(x)
main.py:
import mylist
x = input("value:")
mylist.addList(x)
main2.py:
import mylist
print(list.global_list)
Комментарии:
1. Если вам нужно, чтобы данные были видны при разных вызовах скрипта, вам нужно сохранить их в файле или базе данных.
2. @Barmar хм, хорошо. Как бы я реализовал это, используя такой пример?
3. Есть много руководств по чтению и записи файлов из Python, я бы не хотел наступать им на пятки.
4. Используйте json или pickle для сохранения структурированных данных.
Ответ №1:
Поскольку это отдельные файлы и, следовательно, они будут выполняться как несколько процессов Python, нет практического способа сохранить данные в переменных между ними всеми. Для этого наиболее практично использовать постоянное хранилище, такое как файл.
Вот простой пример, в котором мы будем использовать текстовый файл, который разделяет каждый элемент пробелом для представления постоянного списка:
mylist.py:
data_file = "./mylist.txt"
delimiter = " "
def get_list():
with open(data_file, "r") as f:
data = f.read().split(delimiter)
return data
def set_list(new_list):
with open(data_file, "w") as f:
f.write(delimiter.join(new_list))
def append(val):
cur_data = get_list()
cur_data.append(val)
set_list(cur_data)
# other helper functions
main.py:
import mylist
x = input("value: ")
mylist.append(x)
main2.py:
import mylist
print(mylist.get_list())