2013-08-19 4 views
0

У меня есть код ниже, где я меняю глобальные переменные. Большинство из того, что я прочитал, сказал, чтобы держаться подальше от глобалов ... В приведенном ниже примере я хочу использовать «make_lists», а затем распечатать его в «print_list», затем очистить список. Я использую глобальные перемены для этого, предложения о том, как избежать глобальных изменений?Переходящий список Между функциями

Я знаю, что я мог бы добавить это все в одну функцию, но это все часть большей функции, это единственная часть, с которой у меня возникают проблемы. Заранее спасибо.

x_lst = [] 

def make_lists(): 
    global x_lst 

    x_lst.append("Hello") 

def print_list(): 
    global x_lst 

    for i in x_lst: 
     print(i) 

    x_lst = [] 

def main(): 
    make_lists() 
    print_list() 

if __name__ =="__main__": 
    main() 

ответ

2

Чтобы избежать использования глобальных, вы должны использовать ключевое слово return в объявлении функции возвращать значение, которое будет вашим вновь созданный список в нашем случае. Вы также должны использовать arguments в объявлении функции, которые являются заполнителями значений в функции. Поэтому причиной, по которой вам не требуется глобальное значение, является то, что вы передаете список из одной функции в другую.

def make_lists(): 
    return ['Hello'] # Your are creating the list with a single value, 
         # and return it 

def print_list(ls): 
    for i in ls:  # You are iterating thru the list, 
     print(i)  # which is the input of this function 

def main(): 
    print_list(make_lists()) # In your main function you call the make_list() 
           # which will return the newly created list, and 
           # pass it to print_list, which will iterate thru 
           # the list and prints your values out 

if __name__ =="__main__": 
    main() 
0

Я внес минимальный набор изменений в ваш код, которые иллюстрируют, как передать свой список, а не использовать глобальный. Надеюсь, это поможет прояснить.

def make_lists(x_lst): 
    x_lst.append("Hello") 

def print_list(x_lst): 
    for i in x_lst: 
     print(i) 

def main(): 
    x_lst = [] 

    make_lists(x_lst) 
    print_list(x_lst) 

if __name__ =="__main__": 
    main() 
1
def make_list(): 
    return ['Hello'] 

def print_list(l): 
    for x in l: 
     print(x) 

def main(): 
    print_list(make_list()) 

передачи данных в функции с аргументами, и передавать данные с возвращаемых значений.

1

Вот мое простое предложение, почему бы не дать функции входам. Переход в список для печати вместо использования глобальной переменной является простой альтернативой. Если вы ищете способ сохранить состояние для определенного объема, возможно, попробуйте поместить эти функции в класс (другими словами, используйте ООП)

Проблема с глобальными переменными заключается в том, что когда вы объявляете «x_lst» глобальным , он открывает «x_lst» вне функции, что может и не быть вашей намеченной целью.

Смежные вопросы