Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196

Значение переменной из функции в фунцию

28.10.2021, 05:53. Показов 6713. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Не могу понять, почему значение переменной присвоенной в одной функции не передаётся в другую, хотя почитал уже про это и вроде все возможные причины устранил.
Есть основная процедура, в которой выводится окно, к примеру, две кнопки "Выбрать путь" и "Обновить". Если сразу нажимаю "Обновить", то путь берется из переменной folder_from, если нажимаю "Выбрать путь", то открывается окно, в котором пользователь сам выбирает путь и он заносится в переменную mfolder_from. Так вот, при нажатии кнопки "Выбрать путь", переменной mfolder_from присваивается верное значение, это видно в окне вызванным методом messagebox. А вот затем, если мы нажимаем кнопку "Обновить", то переменная mfolder_from оказывается пустой. Почему?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import tkinter.messagebox as mb
from tkinter import *
import tkinter as tk
import tkinter.filedialog as fd
 
def main():
 
    wnd = Tk()
 
    # создаем кнопку "Выбор пути для MF_6"
    but_Path_MF6 = Button(wnd, text="../", width=2, height=1)
    but_Path_MF6.bind("<Button-1>", clck_Path6)
    but_Path_MF6.grid(column=0, row=0)
 
    #создаем кнопку "Обновить"
    but_Upd = Button(wnd, text = "Обновить", width=15, height=1)
    but_Upd.bind("<Button-1>", clck_Upd6)
    but_Upd.grid(column=1, row=0)
 
    wnd.mainloop()
    
# Процедура нажатия кнопки выбора пути для обновления MF 6
def clck_Path6(event):
 
    mfolder_from = fd.askdirectory(title="Открыть папку", initialdir = " / ")
    mb.showwarning("Выбран путь с обновлением", mfolder_from)
 
# Процедура нажатия кнопки обновление MF 6
def clck_Upd6(event):
 
    # Если путь с обновлением не выбран вручную, то обновление берём из пути по умолчанию
    if not mfolder_from:
        mb.showwarning("Выбран путь с обновлением", folder_from)
    else:
        mb.showwarning("Выбран путь с обновлением", mfolder_from)
 
global folder_from
global mfolder_from
 
folder_from = 'path'
mfolder_from = ''
 
if __name__ == '__main__':
    main()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.10.2021, 05:53
Ответы с готовыми решениями:

И снова глобальная переменная в js. Как изменить значение глобальной переменной в одной функции и увидеть это значение в другой функции?
Это учебное задание. Помогите, пожалуйста, разобраться почему func1 видит какую-то новую переменную t вместо window.t? Пробовала...

Вычислить значение функции (значение переменной Х передается в качестве параметра функции)
Написать функцию, которая возвращает вычисленное значение функции. Значение переменной Х передается в качестве параметра функции.

Вывести на экран значение функции в зависимости от переменной. И найти максимальное значение
Переменная x изменяется в интервале от – 5 до 20 с шагом 1. Вывести на экран значение функции в зависимости от переменной. И найти...

23
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
28.10.2021, 15:41
VKont, Для начала. Зачем вы два раза импортируете tkinter? Это бессмысленно.
Python
1
2
from tkinter import *
import tkinter as tk
Выберете тот синтаксис, который Вам больше нравится и используйте только его. Тем более, что
Python
1
import tkinter as tk
у Вас никак не используется. Поэтому эта строка является мусором.
Теперь по поводу переменных. Вы просто не понимаете как работает global. И не понимаете, что такое области видимости и пространства имен. А так же не понимаете, что такое локальные и глобальные переменные.
Python
1
2
global folder_from
global mfolder_from
бессмысленная запись. Объявлять в глобальной области переменные глобальными бессмысленно, так как они там и так являются глобальными.
Нет, не буду я Вам пересказывать из учебника раздел про локальные и глобальные переменные. Читайте теорию.
Единственное, что еще скажу, это то, что инициируемая инструкцией присваивания переменная mfolder_from в функции clck_Path6 является локальной переменной этой функции и ее видно только внутри этой функции. Из другой функции к ней обратится у Вас нельзя.
А глобальная переменная mfolder_from из глобальной области у Вас не меняется, так как изнутри функций ее можно только читать, а писать Вы в нее изнутри ничего не можете если не объявили эту переменную глобальной внутри функции (а не в глобальной области, где она и так глобальная).

Добавлено через 8 минут
VKont, А вообще то, что бы не путаться с глобальными переменными, лучше создать класс и взамен глобальных переменных использовать атрибуты этого класса. Они будут доступны и для чтения и для записи из любого места программы.
1
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196
28.10.2021, 15:46  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
бессмысленная запись. Объявлять в глобальной области переменные глобальными бессмысленно, так как они там и так являются глобальными.
Нет, не буду я Вам пересказывать из учебника раздел про локальные и глобальные переменные. Читайте теорию.
Единственное, что еще скажу, это то, что инициируемая инструкцией присваивания переменная mfolder_from в функции clck_Path6 является локальной переменной этой функции и ее видно только внутри этой функции. Из другой функции к ней обратится у Вас нельзя.
Вот меня это и интересовало, я намеренно написал объявление переменной как глобальной, чтоб хоть немного разъяснили. Так получается, не отвечая и не пересказывая учебников Вы уже мне ответили, теперь же понятно, как в Python это устроено. Спасибо.
Дело в том, что я с другого ЯП пришёл в Python, ну нет у меня времени штудировать учебники, всё на скорую руку, порой проще знающему человеку сказать пару слов что и как, нежели читать талмуты бестолково написанной информации.
Ну, а всё же, как мне передавать значение переменной из функции в функцию, можно в двух словах? Я чел понимающий.

Добавлено через 2 минуты
Цитата Сообщение от Viktorrus Посмотреть сообщение
А вообще то, что бы не путаться с глобальными переменными, лучше создать класс и взамен глобальных переменных использовать атрибуты этого класса. Они будут доступны и для чтения и для записи из любого места программы.
Т. е. в Python всё объявляется по правильному через классы и переменные и гуи, чтобы к ним в дальнейшем обращаться из всех частей одной программы?
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
28.10.2021, 16:21
VKont, Можно через глобальные переменные. Но что бы в функции можно было писать в переменными из глобальной области, нужно сразу после шапки функции указать глобальные переменные для этой функции. Тогда в функции не будет создаваться локальная переменная, а будет идти запись в глобальную переменную.
Причем одна тонкость, если Вы в глобальной области даже не инициализируете эту переменную, то она тогда будет инициализироваться изнутри функции, и помещаться в глобальное пространство имен. И к ней можно будет обращаться для чтения непосредственно из другой функции. Но лучше так не делать, так как Вы потом, через некоторое время, читая код запутаетесь что откуда берется. Да и другие не смогут разобраться с Вашим кодом.
Поэтому, если Вы хотите использовать глобальные переменные, то нужно их все инициализировать в начале кода, и работать с ними на запись, если нужно, из функций, объявляя их в функциях , откуда будет производится запись, глобальными.
А если владеете ООП, то что бы избежать возможных ошибок, работая с глобальными переменными, вместо них использовать атрибуты класса, специально созданного для использование его атрибутов вместо глобальных переменных.
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class GV():        # класс "Глобальная переменная" (Global Variable)
    def __init__(self, v):
        self.v = v          # value значение глобальной переменной
        self.uses_func = ["func", ...]     # uses the function список функций, использующих переменную,
                                # не влияет на работу программы, но помогает выявлять при отладке ошибки, 
                                # которые могут возникать при использовании глобальных переменных.
    
# Создаем необходимое количество экземпляров персональных глобальных переменных.
k1 = GV(3)
k2 = GV(7)
k3 = GV(0)
k3.v = k1.v + k2.v
print(k3.v)            # 10
 
# Если для одной и той же функции необходимо несколько глобальных переменных,
# количество которых заранее не известно, 
# то экземпляры класса и имена переменных с добавлением порядкового номера, 
# создаются динамически внутри соответствующей функци.
 
# Или когда нужно сохранять много значений, глобальную переменную делать списком и добавлять туда результаты работы функции.
 
last_move_OF_func = GV([])
 
last_move_OF_func.uses_func = ['func']
 
print(last_move_OF_func.v)        # []
 
def func(n):
    for i in range(n):
        last_move_OF_func.v.append(i**2)
 
func(6)
 
print(last_move_OF_func.v)        # [0, 1, 4, 9, 16, 25]
 
print(last_move_OF_func.uses_func)


Добавлено через 10 минут
Цитата Сообщение от VKont Посмотреть сообщение
Т. е. в Python всё объявляется по правильному через классы и переменные и гуи
И через функции. Некоторые считают, что чтобы не путаться , то нужно использовать только функции.
Моя позиция, что для простеньких программ можно использовать глобальные переменные, инициируя их все в начале кода и используя в функциях global и nonlocal, а в более крупных программах использовать класс для глобальных переменных.
Для меня способ с помощью ООП более простой и наглядный, чем использование только функций.
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
04.11.2021, 15:49
VKont, Я на днях, перечитывая Лутца, снова натолкнулся на разбор технологий используемых в питоне.
Наследование.
Полиморфизм.
Инкапсуляция.
Если первые два понятия я знал, то с использованием в питоне инкапсуляции решил разобраться.
Инкапсуляция и глобальные переменные.
Кликните здесь для просмотра всего текста
Из Википедии.
"Инкапсуляция (англ. encapsulation, от лат. in capsula) — в информатике размещение в одном компоненте данных и методов, которые с ними работают. В реализации большинства языков программирования (C++, C#, Java и другие), обеспечивает механизм сокрытия, позволяющий разграничивать доступ к различным компонентам программы.

Инкапсуляция зачастую рассматривается как понятие, присущее исключительно объектно-ориентированному программированию (ООП), но в действительности обширно встречается и в других (см. подтипизация на записях и полиморфизм записей и вариантов). В ООП инкапсуляция тесно связана с принципом абстракции данных (не путать с абстрактными типами данных, реализации которых предоставляют возможность инкапсуляции, но имеют иную природу). Это, в частности, влечёт за собой различия в терминологии в разных источниках. В сообществе C++ или Java принято рассматривать инкапсуляцию без сокрытия как неполноценную. Однако, некоторые языки (например, Smalltalk, Python) реализуют инкапсуляцию, но не предусматривают возможности сокрытия в принципе. Другие (Standard ML, OCaml) жёстко разделяют эти понятия как ортогональные и предоставляют их в семантически различном виде (см. сокрытие в языке модулей ML)."

Те, кто так активно выступают против использования глобальных переменных в Питоне, видимо пришли из С++.
Однако у Питона более гибкий подход к инкапсуляции. С помощью классов переменные могут быть инкапсулированы в пространстве имен класса, но к ним есть доступ (хотя при желании этот доступ можно и закрыть).
Глобальные переменные имеют две негативные особенности.
1) В крупных проектах могут возникать конфликты между глобальными переменными с одинаковыми именами.
2) Может нарушаться алгоритм работы программы, когда не понятно из какого места программы вносятся изменения в глобальную переменную.
Первая проблема снимается, если просто вместо глобальных переменных использовать экземпляры класса с атрибутом v, в который записывать значение переменной, тем самым осуществляя инкапсуляцию. Когда переменные в виде атрибутов экземпляров принадлежат разным экземплярам класса, то конфликтов возникать не может.
Со второй проблемой можно справиться, если такому экземпляру класса, кроме атрибута v добавить еще атрибут is_used, значением которого является список. И в этот список записывать в виде строки модуль и функцию, из которой осуществляется запись в атрибут v, данного экземпляра класса. Понимая из каких мест идет изменение значения v данного экземпляра класса, будет легко выяснить причину возникновения ошибки.

Пример, демонстрирующий использование данной технологии.
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class GV():        # класс "Глобальная переменная" (Global Variable)
    def __init__(self, v):
        self.v = v          # value значение глобальной переменной
        self.is_used = []   # ["func", ...] is_used список функций, использующих переменную,
                                # не влияет на работу программы, но помогает выявлять при отладке ошибки, 
                                # которые могут возникать при использовании глобальных переменных.
    
# Создаем необходимое количество экземпляров персональных глобальных переменных.
k1 = GV(3)
k2 = GV(7)
k3 = GV(0)
k3.v = k1.v + k2.v
if not ('__main__' in k3.is_used):
    k3.is_used.append('__main__')
print(k3.v)            # 10
 
# Если для одной и той же функции необходимо несколько глобальных переменных,
# количество которых заранее не известно, 
# то экземпляры класса и имена переменных с добавлением порядкового номера, 
# создаются динамически внутри соответствующей функци.
 
# Если для функции создается только одна персональная глобальная переменная,
# то можно не использовать класс.
# Или когда нужно сохранять много значений, глобальную переменную делать списком и добавлять туда результаты работы функции.
 
last_move_OF_func = GV([])
 
print(last_move_OF_func.v)        # []
 
def func(n):
    for i in range(n):
        last_move_OF_func.v.append(i**2)
 
        if not ('__main__.func' in last_move_OF_func.is_used):  # сохранение точки изменения
            last_move_OF_func.is_used.append('__main__.func')   # переменной last_move_OF_func
 
    k3.v += k3.v * n
 
    if not ('__main__.func' in k3.is_used):         # сохранение точки изменения
        k3.is_used.append('__main__.func')          # переменной k3
 
func(6)
 
print(last_move_OF_func.v)        # [0, 1, 4, 9, 16, 25]
 
print(last_move_OF_func.is_used)     # ['__main__.func']
print(k3.is_used)                    # ['__main__', '__main__.func']
1
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196
04.11.2021, 16:00  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
Глобальные переменные имеют две негативные особенности.
1) В крупных проектах могут возникать конфликты между глобальными переменными с одинаковыми именами.
2) Может нарушаться алгоритм работы программы, когда не понятно из какого места программы вносятся изменения в глобальную переменную.
По поводу этого.
1) Странно, вообще впервые узнаю, что кто-то может додуматься делать в одном проекте одноимённые переменные (не важно глобальные или приватные). Да и те ЯП, которые я даже мал мало затрагивал, подобного не допускали.
2) Для этого и нужен программист, который по ходу чтения кода понимает, откуда заносятся данные в переменные. Если уж очень всё сложно, для подобного существуют комментарии в коде.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
04.11.2021, 20:44
Цитата Сообщение от VKont Посмотреть сообщение
Странно, вообще впервые узнаю, что кто-то может додуматься делать в одном проекте одноимённые переменные
В крупных проектах как правило программу пишет не один человек, каждый свой кусок. И бывает трудно уследить за всем, что делают другие. Тем более что пока идет разработка все в динамике, и может изменяться. В такой ситуации очень даже вероятно, что разными разработчиками будут использованы одинаковые имена.
Цитата Сообщение от VKont Посмотреть сообщение
Для этого и нужен программист, который по ходу чтения кода понимает, откуда заносятся данные в переменные.
И это может происходить по той же причине, что крупным проектом занимается не один человек.
Кликните здесь для просмотра всего текста
Именно по этой причине стали использоваться независимые модули, каждый из которых может использоваться в различных программах, и при этом не должно возникать конфликта. Но у такого подхода есть и свои минусы, усложняется общая логика работы программы состоящей из множества изолированных модулей. Эта логика все меньше соответствует реальному мышлению человека, где нет таких ограничений. И это мешает созданию искусственного интеллекта, который собственно является моделированием этого человеческого мышления. При мышлении люди используют модульный подход, но только в ограниченных пределах, а не так массово, как сегодня используют независимые модули в программирования.
Я сейчас, стремясь максимально приближать алгоритм к мышлению человека (не программиста) , стал использовать агрегированные модули. Внутри которых свободные связи между файлами модулей, как если бы это был один файл. Такой подход дает возможность избежать ограничений по взаимодействию модулей, которые заставляют программистов для связи использовать функции, которые не естественны для мышления обычного человека.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38197 / 21130 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 14
05.11.2021, 16:09
Цитата Сообщение от VKont Посмотреть сообщение
Ну, а всё же, как мне передавать значение переменной из функции в функцию, можно в двух словах? Я чел понимающий.
чтобы разобраться, нужно рассмотреть предельно простую ситуацию (без GUI и т.п.)

Вот две функции:

Python
1
2
3
4
5
def foo(x,y,z):
   return x+y+z
 
def bar(x,y,z):
   return x*y*z
теперь скажи, что ты хочешь передавать из foo в bar (или наоборот)?

Добавлено через 37 минут
Цитата Сообщение от VKont Посмотреть сообщение
Да и те ЯП, которые я даже мал мало затрагивал, подобного не допускали.
- интересно, что это за ЯП?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
05.11.2021, 17:06
VKont, откройте для себя return.
1
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196
06.11.2021, 02:36  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
- интересно, что это за ЯП?
А вы вообще программист, такое спрашиваете? Любой ЯП открывайте, ну-ка объявите переменную i, как строковую и числовую

Добавлено через 6 минут
Цитата Сообщение от dondublon Посмотреть сообщение
откройте для себя return
я же привёл пример кода выше, return там не помощник, да и уже подсказал мне Viktorrus, как в питоне с переменными обходиться, я уже исправил и у меня всё работает
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
06.11.2021, 06:48
Цитата Сообщение от VKont Посмотреть сообщение
ну-ка объявите переменную i, как строковую и числовую
В языке питон нет объявления переменной, в нем динамическая типизация. В питоне тип определяется типом объекта, на который ссылается переменная i. Это называется динамической типизацией. Но мы можем инструкцией присваивания "=" поменять объект, на который ссылается переменная i, и она уже будет ссылаться на объект другого типа. Но так не делают, что бы не было путаницы, хотя питон такое позволяет. Но одновременно ссылаться на два объекта переменная не может, поэтому одновременно содержать два типа переменная не может.

Добавлено через 28 минут
VKont, Питон, благодаря такой динамической типизации, позволяет использовать алгоритмы из реальности, где в процессе выполнения программы меняется тип одной и той же переменной. Например, переменная i имеет тип int, так как значением ее является целое число 3. Но при деление числа 3 на 2, и присваивании результата переменной i , мы получаем уже, что переменная i теперь уже имеет тип float. В языке С++ мы бы должны были заранее объявлять тип переменной i как float. То есть определяя принадлежность к более общему классу, для которого класс int , является подклассом. В питоне же, мы в каждый момент времени имеем у переменной i тот тип, который является более соответствующий реальному числу, находящемуся в переменной в данный момент. Именно поэтому язык питон более точно соответствует объективной реальности, а правильнее сказать, мышлению человека.
0
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196
06.11.2021, 06:55  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
В языке питон нет объявления переменной, в нем динамическая типизация. В питоне тип определяется типом объекта, на который ссылается переменная i. Это называется динамической типизацией. Но мы можем инструкцией присваивания "=" поменять объект, на который ссылается переменная i, и она уже будет ссылаться на объект другого типа. Но так не делают, что бы не было путаницы, хотя питон такое позволяет. Но одновременно ссылаться на два объекта переменная не может, поэтому одновременно содержать два типа переменная не может.
ну дело даже не только в объявлении типа переменной. Да, действительно в старых ЯП в начале программы в обязательном порядке необходимо было объявить типы переменных и указание двух переменных с одинаковым именем уже не допускалось. Кое какие ЯП не имели такого подхода и переменная автоматом получала тип, по мере заносимого в неё значения. Но другое дело, какой программист будет использовать в программе переменную с одним именем для абсолютно разных объектов?
Можно по ходу программы, например, использовать везде переменную i для счётчиков циклов, но думаю никому и в голову не придёт в одной функции/процедуре использовать i для хранения количество карандашей, а в другой для названия цветов этих карандашей. Думаю теперь всё понятно, о чём речь

Добавлено через 4 минуты
поэтому меня и удивила сама мысль возможности появления глобальных одноимённых переменных в одной программе
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
06.11.2021, 07:39
Цитата Сообщение от VKont Посмотреть сообщение
но думаю никому и в голову не придёт в одной функции/процедуре использовать i для хранения количество карандашей, а в другой для названия цветов этих карандашей.
Во первых мы не говорим об одном модуле, а говорим о глобальных переменных, которые могут быть общими для множества модулей. Повторюсь. Да, одному человеку такое в голову не придет, но в крупных проектах разные части программы разрабатывают разные люди. И одному человеку может придти в голову использовать в своем модуле глобальную переменную i для хранения количества карандашей, а другому человеку может придти в голову использовать в его модуле (но одного проекта) глобальную переменную i для для названия цветов этих карандашей. И тогда, при объединении их модулей в один проект, возникает конфликт имен. Так как в этом случае, одна и та же переменная i имеет разный смысл. Хорошо, если импортирование модулей идет с помощью инструкции import <модуль>. Тогда мы получим разные пространства имен с разными квалифицированными именами. А вот если импортирование будет использовать синтаксис from <модуль> import * то переменные из модулей будут объединены в одно пространство имен, в котором окажутся две переменные с именем i , и с разным смыслом, или одна переменная i затрет значение (и смысл) другой переменной i. Как точно в этом случае ведет себя механизм наследования я не знаю. Но и в том и в другом случае это приведет к конфликту имен, то есть к ошибкам в программе.

Добавлено через 10 минут
VKont, Именно для того, что бы конфликта имен не случилось, а так же всегда можно было четко понять алгоритм работы программы и как используется одна и та же глобальная переменная в крупных проектах, я и предлагаю в качестве глобальный переменных использовать атрибуты специального класса, с помощью которого и определять такие глобальные переменные, которые будут доступны для записи и чтения из любого места в проекте и при этом не могут создавать конфликтов и быть прозрачными для понимания когда и какой функцией идет запись в эти переменные.
0
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196
06.11.2021, 07:46  [ТС]
Viktorrus ну я то вас понял и вроде как уже разобрались с переменными в среде Python, я продолжил это Catstail на довольно странный вопрос "в каких это ЯП нельзя иметь две и более одноимённые переменные?"
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
06.11.2021, 07:50
VKont, А для того, чтобы избежать конфликта имен, при названии таких классов одним именем, нужно импорт осуществлять используя синтаксис import <модуль>, или в имя класса добавлять имя модуля GV_module1.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38197 / 21130 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 14
06.11.2021, 08:27
Цитата Сообщение от VKont Посмотреть сообщение
А вы вообще программист, такое спрашиваете? Любой ЯП открывайте, ну-ка объявите переменную i, как строковую и числовую
- сынок, ну возьми любой скриптовый язык (VBScript, Javascript, Php...) да их много... Это называется "динамическая типизация".

Я-то программист... А вот у тебя, милок, будут проблемы, если так умеешь формулировать свои мысли.


"Странно, вообще впервые узнаю, что кто-то может додуматься делать в одном проекте одноимённые переменные (не важно глобальные или приватные). Да и те ЯП, которые я даже мал мало затрагивал, подобного не допускали." - Вот пример из C++


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main()
{
    int i=777;
    
    {
        string i="aaaa";
        cout << i << endl;
    }
 
    cout << i << endl;
 
    return 0;
}
Так что у тебя еще все впереди.

0
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196
06.11.2021, 08:53  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Так что у тебя еще все впереди.
Кто так пишет программы? Недотёпы криворукие недопрограммисты, используя переменную и для того и для этого и для третьего, если даже вдруг и ЯП это позволяет...у нас бы с кафедры сразу вылетел за такой код.

Цитата Сообщение от Catstail Посмотреть сообщение
- сынок, ну возьми любой скриптовый язык (VBScript, Javascript, Php...) да их много... Это называется "динамическая типизация".
Сынком я может был для своих преподавателей ещё в 90-е годы...теперь уже ни для кого точно не сынок!

Цитата Сообщение от Catstail Посмотреть сообщение
А вот у тебя, милок, будут проблемы, если так умеешь формулировать свои мысли.
За что у меня могут быть проблемы, за чьё-то высокомерие?

Добавлено через 9 минут
грубейшую ошибку с одноименными переменными выдавать за возможности ЯП...мне бы стыдно стало перед молодыми людьми только начинающими путь в мире программирования, а уж асы бы тухлыми яйцами закидали
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
06.11.2021, 09:29
Цитата Сообщение от VKont Посмотреть сообщение
я же привёл пример кода выше, return там не помощник,
Читаю заголовок, "как передать значение из функции в функцию". Сморю код - несколько функций, и ни одного return. Хотя return, вообще-то, служит именно для этого. Ну, если вы так уверены, ладно, вам видней. На советы Victorrus полагаться не советую, он неопытный. А уже следовать ли моим советам - дело ваше.
0
10 / 10 / 0
Регистрация: 07.10.2016
Сообщений: 196
06.11.2021, 09:40  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
Читаю заголовок, "как передать значение из функции в функцию". Сморю код - несколько функций, и ни одного return. Хотя return, вообще-то, служит именно для этого. Ну, если вы так уверены, ладно, вам видней. На советы Victorrus полагаться не советую, он неопытный. А уже следовать ли моим советам - дело ваше.
Ну почему вы считаете, что я чьи-то советы игнорирую, наоборот, мне интересны все мнения. А return я пробовал в своём коде, но ошибка была как раз-таки не с пустой переменной, а с неопознанной переменной, которая и была решена с подачи Victorrus.

Я не собираюсь чьи-то мнения превозносить, а чьими-то пренебрегать, я не за этим здесь нахожусь. А по поводу информации от Victorrus, очень даже полезная и дельная, видно, что человек в теме.

Всем спасибо, кто помогает и не только в этой ветке, а вообще на форуме.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38197 / 21130 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 14
06.11.2021, 09:43
Цитата Сообщение от VKont Посмотреть сообщение
Сынком я может был для своих преподавателей ещё в 90-е годы...теперь уже ни для кого точно не сынок!
- если не умеришь свое ЧСВ, то "сынком" будешь всю жизнь. Собственно, твой вопрос "как передать ... из функции в функцию" может свидетельствовать о двух ситуациях:

1) просто неумение выражать свои мысли (что странно, поскольку возраст-то уже не детский)
2) непонимание самой сути императивного программирования

Тебе все разжевали (глобальные переменные, области видимости и времена жизни, return, использование объектов). Как говорится - Sapienti sat (умному достаточно).

Я бы не стал вообще ввязываться в эту дискуссию, если бы не вопрос "как передать значение из функции в функцию". Он, что называется - бросается в глаза. И не одному мне (dondublon)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.11.2021, 09:43
Помогаю со студенческими работами здесь

Вывести на экран значение функции в зависимости от переменной. И найти максимальное значение
Выполнить задание используя условный оператор и оператор цикла. Переменная x изменяется в интервале от -11 до 14 с шагом 3. Вывести на...

Составьте программу, которая: запрашивает значение переменной x и шага n; выводит значение функции
У ми жуткая программа по информе: 5 занятий по паскалю и контрольная. А мы ЭТОГО даже на алгебре ещё не проходили:'( Суть задачи: ...

Составте программу, которая:запрашивает значение переменной X и шага Y;выводит значение функции f(x)=(2x-cosx): (x+1) в точках х,х+n,х-n.
Люди, напишите прогу: 1 задание: Составте программу, которая:запрашивает значение переменной X и шага Y;выводит значение функции ...

Как посчитать и запомнить значение переменной в одной функции, а потом использовать ее в другой функции?
//файл task.cpp #include &quot;stdafx.h&quot; bool twice (int mas, int n) { int k=0; for (int i=1;i&lt;=n; i++) { if ((mas&gt;9)...

Значение функции по одной из функции в зав от переменной
Решение функции в зависимости от переменной , помогите сделать :) z=8y2-k, где y вычисляется по одной из формул: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru