В 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 шт):

Автор решения: S. Nick

Павел, я думаю что с пояснениями @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

введите сюда описание изображения

→ Ссылка