Как передать переменную из одной функции в другую python
Перейти к содержимому

Как передать переменную из одной функции в другую python

Как передать значение переменной из одной функции в другую?

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

  • Вопрос задан более года назад
  • 1103 просмотра
  • Facebook
  • Вконтакте
  • Twitter

yupiter7575

  • Facebook
  • Вконтакте
  • Twitter

MinTnt

Python имеет различные способы для упрощения взаимодействия с переменными. К примеру из простых.
1). Добавить в первую функцию позиционные аргументы, а во вторую добавить return нужных данных.
2). Создать класс
3). Создать функцию, как объединяющую все остальные.

Можно сказать, почти те же классы, но которые не привязаны к каждой отдельной переменной. Только для начала использования подаргумментов, нужно обьязательно хоть единожды, но вызвать её.
4). Использовать setattr(self, Name, value). Или же, object.__setattr__(Name, value)

Python: передача переменных между функциями

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

например, я назначаю целую кучу значений списку в одной функции, а затем хочу использовать этот список в другой функции позже:

основываясь на моем понимании того, что делают аргументы функции, я ожидал бы, что это будет сделано как следует:

  1. инициализировать «список» как пустой список; вызов main (это, по крайней мере, я знаю, что у меня есть право. )
  2. в defineAList () назначьте определенные значения в список; затем передайте новый список обратно в main ()
  3. в main () вызовите useTheList (list)
  4. поскольку «список» включен в параметры функции 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() :

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *