Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 6, 2023 16:29:00

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Разная работа приравнивания списка и метода ".append()" внутри функции.

py.user.next
Список - это объект, который меняется. Кортеж - это объект, который не меняется. Множество - это объект, который меняется. Число - это объект, который не меняется. Словарь - это объект, который меняется. Строка - это объект который не меняется.
Записал это себе в золотую рамочку как памятку! Спасибо!
Вот только курьез какой-то выходит… Я, конечно, сейчас просто к словам придираюсь, но… Ты вот посмотри. Переменная… Само ее название говорит о том, что она МОЖЕТ меняться, в отличие от константы!.. Она изменчива!.. Однако… переменная, которой присвоена строка или число, по сути, оказывается константой, а не переменной! Только она не выдает исключение при попытке ее изменить, а втихаря меняет адрес в памяти и обретает новое значение…

Офлайн

#2 Янв. 6, 2023 17:29:16

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Разная работа приравнивания списка и метода ".append()" внутри функции.

И еще я методом научного тыка интересные вещи узнал!
Мало того, что я забыл, что “IntVar()” работает только внутри “оболочки” “tkinter”, так я выяснил еще, что “IntVar()”, оказывается, по умолчанию является глобальной переменной. Или это не переменная глобальная, а методы “.get()” и “.set()” такие крутые, что могут изнутри тела функции любую переменную извне достать?
А еще я где-то читал, что без инструкции “root.mainloop()” окно не отобразится… Ага… Нифига подобного! Отображается!

 from tkinter import *
root = Tk()
a = IntVar()
a.set(10)
def check():
    print(a.get())
check()

Отредактировано Olezhka (Янв. 6, 2023 17:33:39)

Офлайн

#3 Янв. 6, 2023 19:33:23

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1355
Репутация: +  119  -
Профиль   Отправить e-mail  

Разная работа приравнивания списка и метода ".append()" внутри функции.

Olezhka
А еще я где-то читал, что без инструкции “root.mainloop()” окно не отобразится…
для чего нужен метод mainloop()?

Офлайн

#4 Янв. 6, 2023 20:54:26

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Разная работа приравнивания списка и метода ".append()" внутри функции.

xam1816
для чего нужен метод mainloop()?
Для зацикливания перехвата прерываний от обработчиков событий виджетов окна.

Офлайн

#5 Янв. 6, 2023 21:52:41

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1355
Репутация: +  119  -
Профиль   Отправить e-mail  

Разная работа приравнивания списка и метода ".append()" внутри функции.

Olezhka
Для зацикливания перехвата прерываний от обработчиков событий виджетов окна.
это замудреная фраза, в разделе для новичков, можешь простым примером объяснить хотя бы приблизительно, что делает этот метод
Olezhka
А еще я где-то читал, что без инструкции “root.mainloop()” окно не отобразится… Ага… Нифига подобного! Отображается!
у меня не отображается без него…Ну ладно для чего-то ведь он нужен, прерывания, события какие-то
помоги пожалуйста, почему у меня кнопка с лейблом не отображается?
  
import tkinter as tk
root = tk.Tk()
root.mainloop()
tk.Label(text='text').pack()
tk.Button(text='btn').pack()

Офлайн

#6 Янв. 6, 2023 21:53:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Разная работа приравнивания списка и метода ".append()" внутри функции.

Olezhka
Потому что ты сам же ее и создаешь! )) “new = ”
Когда запускается операция присваивания и имя new привязывается, там уже всё создано.

Вот пример без присваивания
  >>> s = 'abc'
>>> s.replace('a', 'x')
'xbc'
>>> s
'abc'
>>>
Строка с символами (подстроками) xbc создалась, вывелась и исчезла из памяти. А привязываем мы к ней какое-то имя или нет - неважно.

Olezhka
А метод “.append()” возвращает дырку от бублика , но при этом меняет ИСХОДНЫЙ список.
Это разные структуры данных. С чего они должны быть одинаковыми? Строка, например, не может хранить любые объекты, только строки может хранить (подстроки), а список может хранить любые объекты - строки, списки, функции и так далее.

Пример
  
>>> lst = ['a', 1, {'name': 'value'}, [1, 2, 3], lambda x: x * 2]
>>> lst[-1](4)
8
>>> lst
['a', 1, {'name': 'value'}, [1, 2, 3], <function <lambda> at 0x7f3609508ea0>]
>>>
Список можно пополнять и дальше, а можно и удалять из него. Это специальная структура данных, созданная как раз для этого.

А строки здесь при чём? Да правильно, они тут вообще ни при чём. Это другая структура данных вообще, поддерживающая юникод там и тому подобное.

Olezhka
Записал это себе в золотую рамочку как памятку!
Зачем? Это уже всё записано в документации к питону.

https://docs.python.org/3/
https://docs.python.org/3/library/index.html
https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str
https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range

Ты прямо как ребёнок, который прибегает и орёт “папа! папа! я нашёл букву! смотри! буква я - это буква я! вот в газете я нашёл её!”, потом опять прибегает и снова орёт “папа! папа! я нашёл букву! смотри! буква ж - это буква жэ! вот на двери нашёл её!” и так постоянно. А папа смотрит на это и говорит “сын, ты букварь возьми, вот там валяется где-то и там их ищи, они там все есть, да ещё и с картинками, А - аист, Л - лягушка, Ю - юла, а лучше возьми учебник по тригонометрии, он тебе всё равно понадобится, но синусов и косинусов ты на дверях или в газетах не найдёшь”.

Olezhka
Вот только курьез какой-то выходит… Я, конечно, сейчас просто к словам придираюсь, но… Ты вот посмотри. Переменная… Само ее название говорит о том, что она МОЖЕТ меняться, в отличие от константы!.. Она изменчива!
Так имя привязывается к адресу объекта, а адрес меняется. У каждой строки свой адрес.

Пример
  
string = 'a'
string = 'b'
string = string + 'c'
Выглядит, как переменная. Вот если бы ты присвоить туда больше не мог после первого раза, то это была бы константа. В других языках так и бывает обычно. Если константой что-то объявил, то повторно туда присвоить не можешь.

Olezhka
так я выяснил еще, что “IntVar()”, оказывается, по умолчанию является глобальной переменной. Или это не переменная глобальная, а методы “.get()” и “.set()” такие крутые, что могут изнутри тела функции любую переменную извне достать?
Это объект такой же, как список. А метод set() - это такой же метод, как у списка метод append(). Поэтому её не надо видеть глобально, достаточно её просто где-то видеть и задействовать её метод, который внутри неё и сохранит всё её же методом.

Olezhka
А еще я где-то читал, что без инструкции “root.mainloop()” окно не отобразится
А на нажатие кнопок на клавиатуре оно будет реагировать? Привяжи кнопку клавиатуры к окну и запусти с главным циклом и без главного цикла.



Отредактировано py.user.next (Янв. 6, 2023 22:16:14)

Офлайн

#7 Янв. 6, 2023 22:05:23

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Разная работа приравнивания списка и метода ".append()" внутри функции.

xam1816
у меня не отображается без него…Ну ладно для чего-то ведь он нужен, прерывания, события какие-то
помоги пожалуйста, почему у меня кнопка с лейблом не отображается?
Я не понял Ты прикалываешься надо мной что ли?

Офлайн

#8 Янв. 6, 2023 22:19:36

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Разная работа приравнивания списка и метода ".append()" внутри функции.

Olezhka
А на нажатие кнопок на клавиатуре оно будет реагировать? Привяжи кнопку клавиатуры к окну и запусти с главным циклом и без главного цикла.
4555443.png Вот о чем я говорю. Я не про обработку прерываний говорю.
САЙТ
Видишь, что пишут? А у меня в “IDLE” без “root.mainloop()” отображается окно!

Отредактировано Olezhka (Янв. 6, 2023 22:20:31)

Прикреплённый файлы:
attachment 4555443.png (195,7 KБ)

Офлайн

#9 Янв. 6, 2023 22:34:33

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1355
Репутация: +  119  -
Профиль   Отправить e-mail  

Разная работа приравнивания списка и метода ".append()" внутри функции.

Olezhka
у меня в “IDLE” без “root.mainloop()” отображается окно!
почему ты не развиваешься???Тебе говорят не используй ее, это шляпа шляпная. Установи PyCharm например, он специально под python создан. IDLE сделан на tkinter и mainloop() запущен уже с программой

Офлайн

#10 Янв. 6, 2023 22:38:22

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Разная работа приравнивания списка и метода ".append()" внутри функции.

py.user.next
Вот если бы ты присвоить туда больше не мог после первого раза, то это была бы константа.
 CONST = '1'
CONST += '1'
print(CONST)
Вывод:
11
Как же так-то?! Опять создается одноименный экземпляр по другому адресу памяти?
И даже так константа пропускает “хук справа” :
 CONST = ['1']
CONST.append('1')
print(CONST)
Вывод:
'1', ‘1’
Как же так с константами-то?! Или я чего-то недопонимаю опять?

Отредактировано Olezhka (Янв. 6, 2023 23:01:51)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version