Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 6, 2023 22:45:06

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

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

Olezhka
Как же так-то?! Опять создается одноименный экземпляр по другому адресу памяти?
в переменной хранится указатель на объект = некий адрес, по которому этот объект хранится в памяти.

Переменная написанная большими буквами по факту не константа, это некая договоренность, что в начале файла описываются константы которые менять не нужно, только читать

Отредактировано xam1816 (Янв. 6, 2023 22:47:30)

Офлайн

#2 Янв. 6, 2023 22:47:55

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

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

xam1816
почему ты не развиваешься???
Ладно! Установлю! Не ругайся! Просто я с “IDLE” начал и уже к нему привык. А в “PyCharm” режим отладки с указанием значений всех переменных в режиме реального времени есть?

Офлайн

#3 Янв. 6, 2023 22:50:46

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

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

Olezhka
А в “PyCharm” режим отладки с указанием значений всех переменных в режиме реального времени есть?
дебаггер называется, он там есть

Офлайн

#4 Янв. 6, 2023 23:00:59

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

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

xam1816
Ясно. Спасибо

Офлайн

#5 Янв. 6, 2023 23:27:58

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

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

Olezhka
Опять создается одноименный экземпляр по другому адресу памяти?
Строки всегда создаются по новой. Сравни их id до операции += и после. Это разные строки. В питоне нет констант. В других языках есть константы.



Офлайн

#6 Янв. 7, 2023 04:12:28

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

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

py.user.next
В питоне нет констант.
Спасибо! Буду знать! А кортеж, строка не есть подобие констант?

Офлайн

#7 Янв. 7, 2023 08:27:32

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

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

Olezhka
А кортеж, строка не есть подобие констант?
Есть два понятия констант. Константы, который не переменные. Константы, которые значения.

Например, число 1 - это константа. Но что это даёт? Ничего. Числовая константа. Есть символьные константы, есть строковые константы. Это понятие константы тебе не даёт ничего. Оно просто идёт в качестве определения каких-то конструкций в языке программирования.

А вот именованная неизменная область памяти, это уже что-то даёт программисту. Есть переменная, которая является именованной изменяемой областью памяти, в которой может храниться значение определённого типа. И есть константа, которая является именованной неизменной областью памяти, в которой может храниться значение определённого типа.

Вот этих вторых констант нет в питоне, а в других языках они есть и для них есть специальный синтаксис в этих языках. Часто он выглядит в виде квалификатора const.

Вот я открыл в браузере через F12 консоль и там набираю в JavaScript.
Создаю константу n , вывожу её значение на экран, а потом пытаюсь её поменять и оно сразу пишет ошибку, потому что константы менять нельзя
  
>> const n = 3
<- undefined
>> console.log(n)
3
<- undefined
>> n = 4
Uncaught TypeError: invalid assignment to const 'n'
    <anonymous> debugger eval code:1
>>



Отредактировано py.user.next (Янв. 7, 2023 08:29:12)

Офлайн

#8 Янв. 7, 2023 17:41:49

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

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

py.user.next
Ясно. А какой смысл этих констант? Это чтобы по забывчивости не изменить случайно какое-то важное значение в программе, которое менять нельзя? Ну, допустим, пароль для логина в “requests”.
А насколько та область памяти, в которой в других языках сохраняются константы, РЕАЛЬНО защищена от изменений? Я просто помню “Artmoney”… Адреса памяти… Я ведь уверен, что и в “Пайтоне”, и тем более в “С” есть модули, позволяющие непосредственно и низкоуровнево работать с адресами памяти (почти как в АСМ). Неужели, даже в АСМе есть области памяти или регистры процессора, которые он не может изменить?! POP, PUSH там какими-нибудь…

Офлайн

#9 Янв. 7, 2023 21:33:37

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

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

Olezhka
А какой смысл этих констант? Это чтобы по забывчивости не изменить случайно какое-то важное значение в программе, которое менять нельзя?
Главный их смысл в том, что они быстрее обрабатываются. В питоне их нет, но это не проблема ни для кого. Люди всегда помнят, где у них константы, для этого достаточно их просто обозначить большими буквами. Например, в tkinter ты их видишь в виде LEFT, BOTH и так далее. Вот большие буквы это и значат, что это какие-то константы, которые имеют фиксированное значение. При этом их можно поменять так же прекрасно, потому что в питоне нет констант.

  
>>> import tkinter.constants
>>> 
>>> dir(tkinter.constants)
['ACTIVE', 'ALL', 'ANCHOR', 'ARC', 'BASELINE', 'BEVEL', 'BOTH', 'BOTTOM', 'BROWSE', 'BUTT', 'CASCADE', 'CENTER', 'CHAR', 'CHECKBUTTON', 'CHORD', 'COMMAND', 'CURRENT', 'DISABLED', 'DOTBOX', 'E', 'END', 'EW', 'EXTENDED', 'FALSE', 'FIRST', 'FLAT', 'GROOVE', 'HIDDEN', 'HORIZONTAL', 'INSERT', 'INSIDE', 'LAST', 'LEFT', 'MITER', 'MOVETO', 'MULTIPLE', 'N', 'NE', 'NO', 'NONE', 'NORMAL', 'NS', 'NSEW', 'NUMERIC', 'NW', 'OFF', 'ON', 'OUTSIDE', 'PAGES', 'PIESLICE', 'PROJECTING', 'RADIOBUTTON', 'RAISED', 'RIDGE', 'RIGHT', 'ROUND', 'S', 'SCROLL', 'SE', 'SEL', 'SEL_FIRST', 'SEL_LAST', 'SEPARATOR', 'SINGLE', 'SOLID', 'SUNKEN', 'SW', 'TOP', 'TRUE', 'UNDERLINE', 'UNITS', 'VERTICAL', 'W', 'WORD', 'X', 'Y', 'YES', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
>>>
>>> tkinter.constants.LEFT
'left'
>>> tkinter.constants.YES
1
>>>

В других языках, где есть константы в виде синтаксических конструкций языка, эти константы не только запускают оптимизацию в отношении себя, потому что константы требуют меньше операций (они только читаются, а писать их не надо, поэтому вокруг них и нет этой обвязки писательской), но и также проясняют написанный код. Когда ты видишь определённую функцию или только сигнатуру этой функции, в которой принимаемые аргументы какие-то константные, а какие-то переменные, то ты лучше понимаешь, как эту функцию вызывать можно, а как её вызывать нельзя, что в неё можно передать, а что в неё нельзя передавать. Например, если функция принимает только один константный массив, то ты уже заранее знаешь, что если ты передашь в неё любой массив, то функция его не поменяет, а просто будет читать его только. Но если функция принимает только один переменный массив (неконстантный), то ты уже заранее знаешь, что если ты передашь в неё любой массив, то функция его может запросто поменять, поэтому надо дополнительно учесть этот момент, чтобы ты потом не столкнулся с какими-то неожиданными изменениями в массиве, которые тебе не были нужны.

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



Отредактировано py.user.next (Янв. 7, 2023 21:36:16)

Офлайн

#10 Янв. 7, 2023 23:05:03

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

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

py.user.next
Ясно! Спасибо за подробное объяснение! А ты в “Пайтоне” не работал с модулями прямого доступа к памяти? Не редактировал что-нибудь в ОЗУ на лету?

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version