Найти - Пользователи
Полная версия: Разная работа приравнивания списка и метода ".append()" внутри функции.
Начало » Python для новичков » Разная работа приравнивания списка и метода ".append()" внутри функции.
1 2 3 4 5
Olezhka
py.user.next
Список - это объект, который меняется. Кортеж - это объект, который не меняется. Множество - это объект, который меняется. Число - это объект, который не меняется. Словарь - это объект, который меняется. Строка - это объект который не меняется.
Записал это себе в золотую рамочку как памятку! Спасибо!
Вот только курьез какой-то выходит… Я, конечно, сейчас просто к словам придираюсь, но… Ты вот посмотри. Переменная… Само ее название говорит о том, что она МОЖЕТ меняться, в отличие от константы!.. Она изменчива!.. Однако… переменная, которой присвоена строка или число, по сути, оказывается константой, а не переменной! Только она не выдает исключение при попытке ее изменить, а втихаря меняет адрес в памяти и обретает новое значение…
Olezhka
И еще я методом научного тыка интересные вещи узнал!
Мало того, что я забыл, что “IntVar()” работает только внутри “оболочки” “tkinter”, так я выяснил еще, что “IntVar()”, оказывается, по умолчанию является глобальной переменной. Или это не переменная глобальная, а методы “.get()” и “.set()” такие крутые, что могут изнутри тела функции любую переменную извне достать?
А еще я где-то читал, что без инструкции “root.mainloop()” окно не отобразится… Ага… Нифига подобного! Отображается!
 from tkinter import *
root = Tk()
a = IntVar()
a.set(10)
def check():
    print(a.get())
check()
xam1816
Olezhka
А еще я где-то читал, что без инструкции “root.mainloop()” окно не отобразится…
для чего нужен метод mainloop()?
Olezhka
xam1816
для чего нужен метод mainloop()?
Для зацикливания перехвата прерываний от обработчиков событий виджетов окна.
xam1816
Olezhka
Для зацикливания перехвата прерываний от обработчиков событий виджетов окна.
это замудреная фраза, в разделе для новичков, можешь простым примером объяснить хотя бы приблизительно, что делает этот метод
Olezhka
А еще я где-то читал, что без инструкции “root.mainloop()” окно не отобразится… Ага… Нифига подобного! Отображается!
у меня не отображается без него…Ну ладно для чего-то ведь он нужен, прерывания, события какие-то
помоги пожалуйста, почему у меня кнопка с лейблом не отображается?
  
import tkinter as tk
root = tk.Tk()
root.mainloop()
tk.Label(text='text').pack()
tk.Button(text='btn').pack()
py.user.next
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()” окно не отобразится
А на нажатие кнопок на клавиатуре оно будет реагировать? Привяжи кнопку клавиатуры к окну и запусти с главным циклом и без главного цикла.
Olezhka
xam1816
у меня не отображается без него…Ну ладно для чего-то ведь он нужен, прерывания, события какие-то
помоги пожалуйста, почему у меня кнопка с лейблом не отображается?
Я не понял Ты прикалываешься надо мной что ли?
Olezhka
Olezhka
А на нажатие кнопок на клавиатуре оно будет реагировать? Привяжи кнопку клавиатуры к окну и запусти с главным циклом и без главного цикла.
4555443.png Вот о чем я говорю. Я не про обработку прерываний говорю.
САЙТ
Видишь, что пишут? А у меня в “IDLE” без “root.mainloop()” отображается окно!
xam1816
Olezhka
у меня в “IDLE” без “root.mainloop()” отображается окно!
почему ты не развиваешься???Тебе говорят не используй ее, это шляпа шляпная. Установи PyCharm например, он специально под python создан. IDLE сделан на tkinter и mainloop() запущен уже с программой
Olezhka
py.user.next
Вот если бы ты присвоить туда больше не мог после первого раза, то это была бы константа.
 CONST = '1'
CONST += '1'
print(CONST)
Вывод:
11
Как же так-то?! Опять создается одноименный экземпляр по другому адресу памяти?
И даже так константа пропускает “хук справа” :
 CONST = ['1']
CONST.append('1')
print(CONST)
Вывод:
'1', ‘1’
Как же так с константами-то?! Или я чего-то недопонимаю опять?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB