Как передать значение переменной из одной функции в другую?
Вот неверный код. Необходимо чтобы после запуска def one произошло чудо и print напечатал единицу из функции def two.
- Вопрос задан более года назад
- 1103 просмотра
- Вконтакте

- Вконтакте

Python имеет различные способы для упрощения взаимодействия с переменными. К примеру из простых.
1). Добавить в первую функцию позиционные аргументы, а во вторую добавить return нужных данных.
2). Создать класс
3). Создать функцию, как объединяющую все остальные.
Можно сказать, почти те же классы, но которые не привязаны к каждой отдельной переменной. Только для начала использования подаргумментов, нужно обьязательно хоть единожды, но вызвать её.
4). Использовать setattr(self, Name, value). Или же, object.__setattr__(Name, value)
Python: передача переменных между функциями
Я провел последние несколько часов, читая здесь и в других местах, а также экспериментируя, но я действительно не понимаю, что я уверен, что это очень базовая концепция: передача значений (как переменных) между различными функциями.
например, я назначаю целую кучу значений списку в одной функции, а затем хочу использовать этот список в другой функции позже:
основываясь на моем понимании того, что делают аргументы функции, я ожидал бы, что это будет сделано как следует:
- инициализировать «список» как пустой список; вызов main (это, по крайней мере, я знаю, что у меня есть право. )
- в defineAList () назначьте определенные значения в список; затем передайте новый список обратно в main ()
- в main () вызовите useTheList (list)
- поскольку «список» включен в параметры функции useTheList, я ожидаю, что useTheList теперь будет использовать список, определенный defineAList (), а не пустой список, определенный прежде чем позвонить в main.
однако это, очевидно, ошибочное понимание. Мой вывод:
ETA-в прошлом, задавая аналогичный вопрос, было предложено использовать глобальную переменную вместо только локальных. Если это будет уместно и здесь — для целей класса, который я беру, нам не разрешено использовать глобалы.
6 ответов
вот что на самом деле происходит:
это то, что вы хотите:
вы даже можете пропустить временную returned_list и передайте возвращаемое значение непосредственно в useTheList :
вы просто пропустили один критический шаг. Вы должны явно передать возвращаемое значение во вторую функцию.
или (хотя вы не должны делать этого! Сначала это может показаться приятным, но глобалы просто вызывают у вас горе в долгосрочной перспективе.):
функция возвращает значение, но не создает символ в каком-либо глобальном пространстве имен, как предполагает ваш код. Вы должны фактически захватить возвращаемое значение в области вызова, а затем использовать его для последующих операций.
ваше возвращение бесполезно, если вы не назначаете его
прочитайте концепцию пространства имен. Когда вы назначаете переменную в функции, вы назначаете ее только в пространстве имен этой функции. Но очевидно, что вы хотите использовать его между всеми функциями.
кроме того, вы можете передать его вокруг:
return возвращает значение. Неважно, какое имя вы дали этому значения. Возвращая его просто «передает», чтобы что-то еще могло его использовать. Если вы хотите использовать его, вы должны захватить его извне:
возвращение list внутри defineAList не означает «сделать так, чтобы вся остальная часть программы могла использовать эту переменную». Это означает «передать эту переменную и дать остальной части программы Один шанс захватить ее и использовать». Вам нужно присвоить это значение к чему-то вне функции, чтобы использовать ее. Кроме того, из-за этого нет необходимости заранее определять свой список с помощью list = [] . Внутри defineAList , вы создаете новый список и возвращаете его; этот список не имеет никакого отношения к тому, который вы определили с list = [] в начале.
кстати, я изменил имя переменной от list to lst . Это не очень хорошая идея использовать list как имя переменной, потому что это уже имя встроенного типа Python. Если вы создадите свою собственную переменную list , вы больше не сможете получить доступ к встроенному.
передача переменной из одной функции в качестве аргумента другой функции, можно сделать такой
Передача функции другой функции в качестве параметра.
Поскольку функции являются объектами, можно передавать их в качестве аргументов другим функциям. Функция talk() , которая изменяет строку, используя переданный ей объект функции, а затем печатает ее:
Вы можете влиять на полученное сообщение, передавая различные функции:
Важно. Функция hello передается функции talk() без скобок. Это означает, что передается только ссылка на функцию hello . Функция при этом не выполняется. Функция talk() , записывается со скобками, поэтому она будет вызываться как обычно.
Возможность передавать функциональные объекты в качестве аргументов другим функциям является мощной фишкой. Это позволяет абстрагироваться от функционала и передать поведение. В примере выше функция talk() остается прежней, но сохраняет возможность влиять на ее вывод, передавая различные варианты сообщений.
Функции, которые могут принимать другие функции в качестве аргументов, также называются функциями высшего порядка. Они необходимы для функционального стиля программирования.
Классическим примером функций высшего порядка в Python является встроенная функция map() . Она принимает в качестве аргументов функцию и итерируемую последовательность и вызывает функцию для каждого элемента в последовательности.
Вот как можно отформатировать последовательность имен, сопоставив им функцию приветствия hello() :