В Global не передается результат выполнения функции
Возникли сложности с пониманием работы global в Python.
Для того, чтобы разобраться, написал простенькие функции - и завис.
В общем, есть два файла:
func.py, в нем функция для создания двух списков и заполнения их случайными числами,
func.py:
def generate_lsts():
import random
global list1
global list2
list1 = [random.randrange(0, 20) for _ in range(10)]
list2 = [random.randrange(0, 20) for _ in range(10)]
return list1, list2
и
main.py
from func import generate_lsts as gl
list1:list = []
list2:list = []
gl()
def mxmn(list1, list2):
return min(list1), max(list2)
print(mxmn(list1, list2))
Логика планировалась такая: импортируется из файла функция, аннотируются пустые пока списки, вызывается функция из файла, в ней списки объявляются глобальными и возвращаются заполненные рандоно числами.
Переменные списков переписываются.
Далее они передаются как параметры в функцию основного файла и она возвращает минимум первого и максимум второго списка.
Но списки как были в Глобал пустыми так и остались после работы функции.
Как оно работает и что не так?
Ответы (1 шт):
Павел, я думаю что с пояснениями @insolor , вы уже достаточно ознакомились с глобальными переменными и вот почему, читаем Почему глобальные переменные — это зло?
Вот как я вижу вариант решения вашей задачи:
main.py
from func import generate_lsts as gl
class MyClass():
list1 = []
list2 = []
def __init__(self):
super(MyClass, self).__init__()
self.list1, self.list2 = gl()
print(f'\nlist1 = {self.list1}; \nlist2 = {self.list2}\n') #
def mxmn(self, list1, list2):
return min(list1), max(list2)
myClass = MyClass()
_min, _max = myClass.mxmn(myClass.list1, myClass.list2)
print(f'min/list1 = {_min}; max/list2 = {_max}\n')
func.py
import random
def generate_lsts():
list1 = [random.randrange(0, 20) for _ in range(10)]
list2 = [random.randrange(0, 20) for _ in range(10)]
return list1, list2
