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

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

  • автор:

Python | Как из одного def перенести переменную со значением в другой def

Для меня def — папка (по типу <div> в html, мне так воспринимать куда легче.)
—————————————
Я хочу, чтобы из "chest()" переменная "p" перешла в "container_password(). То есть надо заполнить контейнер значением, которое введёт пользователь. Для этого я и хочу перенести из первой папки в другую ту самую переменную, так как там имеется значение, которую ввёл пользователь.
—————————————

def chest():
x = input("Введите ваш пароль: ")
x = str(x)

"""Тут уже мы делаем проверку"""
p = input("Введите ваш пароль еще раз: ")
if p == x:
print("Верно")
elif p != x:
print("Введено неверно")

Передача переменных из функции python

Ребята подскажите реально ли передать переменную из функции в другую функцию python? Пример:

Реально ли реализовать такую штуку как нибудь, без глобальных переменных?

Чтобы передать аргумент в другую функцию, она должна как минимум его принимать. Можно из первой функции вызвать вторую с нужным аргументом.

Ещё первая функция может вернуть значение с помощью return. Это самое значение можно сразу передать в вызов второй функции, не создавая глобальных переменных.

P.S. В Python вместо операторных скобок используются отступы.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.6.8.43486

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

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

как передать значения x_list, y_list из функции get_data_plot в функцию plot, внутри одного класса, чтоб построить график??

Ответы (5 шт):

вообще-то это самые азы любого языка, но если вы просите именно так, то

Еще как вариант:

или сразу вызвать в функции

Вы можете определить переменные x_list, y_list как атрибуты класса, далее доставать их в функциях используя атрибут класса self .

Пример кода класса, который вы можете использовать.

. — часть кода не переписывал

Ну может тогда так:

Вы вообще где и как этот plot вызываете?

Вызов внутри класса

Если вам надо вызывать функции класса внутри класса, то вам надо написать что-то такое: self.<имя функции>(<аргументы функции>) т.е. всё тоже самое, как с обычными функциями, только добавить self. впереди. Пример:

Вызов снаружи класса

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

Т.к. у функции print_test аргументов нет, то мы просто пишем () для вызова

Пример реализации

Cоответственно, в зависимости от того, что вы хотите получить, вам надо написать либо self.plot(self.get_data_plot(<аргументы функции>)) либо <имя экземпляра класса>.plot(<имя экземпляра класса>.get_data_plot(<аргументы функции>)) .

Я бы это положил в функцию, чтобы получилось:

Также не проблема вызвать create_plot внутри класса ( self.create_plot() )

Дополнительная информация

В функции create_plot я также использовал распаковку с помощью * , т.е. get_data_plot выводит кортеж, и чтобы "раскрыть" его в две переменные, как того требует plot , мы используем * .

Вот доки питона об этом. И статья на русском, для удобства.

Больше информации о классах вы можете увидеть в документации питона
Если вам тяжело работать с английский языком, то вам вводная статься о классах на русском

Ремарка

По-хорошему функции класса надо называть методами , но я опустил это в ответе, для простоты понимания.

Python. Аргументы в функциях. Передача аргументов в функцию. Изменение аргументов в теле функции

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

Например, к изменяемым объектам относятся списки и словари. К неизменяемым объектам относятся числа, строки, кортежи.

Если в функцию передается неизменяемый объект, то этот объект передается «по значению». Это значит, что изменение этого объекта внутри функции не изменит его в вызывающем коде.

Если в функцию передается изменяемый объект, то этот объект передается по «указателю». Изменение такого объекта внутри функции повлияет на этот объект в вызывающем коде.

2. Примеры передачи неизменяемых объектов в функцию
2.1. Передача числа в функцию.

В примере, в демонстрационных целях реализована функция Mult2() , которая получает параметром число. В теле функции это число удваивается. Полученный результат выводится.

После запуска программа выдаст следующий результат

Как видно из результата, в функции значение числа num умножается на 2 и составляет 50. Однако, этот результат не передается в вызывающий код, здесь значение num остается равным 25 как до вызова функции. Это подтверждает передачу «по значению» неизменяемого объекта, которым есть число.

2.2. Передача строки в функцию

Демонстрируется работа функции ReverseStr() , которая реверсирует строку, получаемую параметром.

Результат выполнения программы

Так же, как и в предыдущих двух примерах, передача кортежа в функцию происходит по значению.

3. Примеры передачи изменяемых объектов в функцию
3.1. Передача списка в функцию

Демонстрируется функция, которая получает список в качестве параметра. Затем в теле функции этот список изменяется (изменяются первый и второй элементы списка).

Результат работы программы

Как видно из результата, изменение списка в теле функции приводит к изменению этого списка в вызывающем коде. Это означает, что список передается по принципу указателя языка C.

3.2. Передача словаря в функцию

Демонстрируется функция ChangeDict() которая получает словарь в качестве параметра. В теле функции изменяются отдельные элементы словаря, лежащие на позициях с номерами 0 и 2.

Результат работы программы

4. Способы избежания изменения объектов-аргументов в вызывающем коде

В случаях, когда нужно запретить изменение объекта списка внутри функции, можно использовать способы которые описаны ниже.

Способ 1. При передаче списка в функцию можно конвертировать этот список в кортеж с помощью операции tuple() . После этого изменить список в теле функции не удастся.

Нижеследующий код демонстрирует использование операции tuple() для конвертирования списка в кортеж.

Список LL передается в функцию PassList() как кортеж

После этого, изменить элемент списка LL в функции PassList() не удастся. Если запустить программу, то будет сгенерировано исключение с сообщением

Способ 2. При передаче списка в функцию можно использовать операцию среза [:] , как показано в следующей программе

В вышеприведенном коде при вызове функции с помощью строки

срез LL[:] осуществляет копию списка. Таким образом, изменения списка внутри функции не приведут к изменению списка в вызывающем коде, поскольку эти изменения будут выполняться над копией.

После запуска на выполнение, программа выдаст такой результат

5. Особенности передачи аргументов в функцию. Итоги

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

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

Например. Демонстрируется автоматическое присвоение локальной переменной функции значения аргумента.

2. Аргументы функции – это ссылки на объекты. При передаче аргумента в функцию передается ссылка на объект. Передаваемые ссылки реализованы как указатели в языке C. Поскольку, при передаче в функцию аргумента, копируется ссылка на объект, то сам объект никогда не копируется. Иными словами, не создается автоматическая копия объекта при передаче его в функцию, осуществляется только копия ссылки.

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

Например. В примере, в функции Func() изменяется значение параметра D на 25. В вызывающем коде был передан аргумент с таким самым именем D со значением 30. Однако, после вызова функции из вызывающего кода, значение внешнего аргумента D не изменилось, что и надо было доказать.

4. Если в функцию передается аргумент (объект), который есть изменяемым (список, словарь), то изменение этого аргумента внутри функции приведет к изменению аргумента в вызывающем коде. Это касается только изменения составных элементов объекта (отдельный элемент словаря или списка). Если попробовать изменить объект по его общему имени (с помощью операции присваивания = ), то изменений в вызывающем коде не будет (передается ссылка на объект, а именно ссылку изменить нельзя).

Например. В нижеследующем примере объявляются две функции, которые делают попытку изменить входной параметр-список по его имени:

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

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