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. Если в функцию передается аргумент (объект), который есть изменяемым (список, словарь), то изменение этого аргумента внутри функции приведет к изменению аргумента в вызывающем коде. Это касается только изменения составных элементов объекта (отдельный элемент словаря или списка). Если попробовать изменить объект по его общему имени (с помощью операции присваивания = ), то изменений в вызывающем коде не будет (передается ссылка на объект, а именно ссылку изменить нельзя).
Например. В нижеследующем примере объявляются две функции, которые делают попытку изменить входной параметр-список по его имени: