Форум сайта python.su
34
Я прекрасно понимаю что там храняться ссылки
Я говорю про то, что нельзя надеятся что данные в кортеже будут те же саммые, что и при инициализации.
Офлайн
103
значит masks тоже не константа? а const говорит о обратном…
#include <iostream>
using namespace std;
int main()
{
char a[] = {'a', 'b'};
char b[] = {'c', 'd'};
const char* masks[] = {a, b};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
cout << masks[i][j];
}
}
cout << endl << "--------------" << endl;
a[0] = 'e';
b[1] = 'o';
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
cout << masks[i][j];
}
}
cout << endl;
}
abcd
--------------
ebco
Офлайн
0
GreyZmeemПодобно строкам, кортежи неизменяемы. В доказательство приведу интерактивную
terabaytКонстанта (из вики) - способ адресации данных, изменение которых рассматриваемой программой не предполагается или запрещается.А данные внутри кортежа могут меняться.
Отредактировано droft1312 (Янв. 20, 2015 14:34:05)
Офлайн
88
droft1312В общем случае они используются для обозначений крайне редко изменяемых значений, при том, изменяемых исключительно в процессе разработки, но не во время исполнения. Так улучшается удобочитаемость листингов и упрощается модификация значения константы ибо не нужно прочесывать весь проект поиском и заменой.
Зачем вообще нужны константы? Я знаю, что они неизменяемы, но в чем их практическая суть?В каких случаях их нужно использовать?
Офлайн
0
ShamanСпасибо
Офлайн
19
UPD: Невнимательно изучил пример terabyt.
Отредактировано cutwater (Янв. 20, 2015 15:34:32)
Офлайн
857
droft1312Есть константы, а есть обозначения, они очень похожи и частенько сливаются воедино. Константы - это такие замены, изменение которых не влияет на работу программы. Обозначения - это такие замены, изменение которых может влиять на работу программы. Поэтому обозначения вводятся только для читаемости кода, тогда как у констант две функции - повышение читаемости кода и быстрое изменение большого объёма данных.
Зачем вообще нужны константы? Я знаю, что они неизменяемы, но в чем их практическая суть?
>>> import re >>> re.findall(r'a', 'aaaAAA', flags=re.IGNORECASE) ['a', 'a', 'a', 'A', 'A', 'A'] >>> re.IGNORECASE 2 >>>
cutwaterда
неконстантный указатель на неконстантные данные (char * ptr)
cutwaterнет
константный указатель на неконстантные данные (const char * ptr)
cutwaterнет
неконстантный указатель на константные данные (char * const ptr)
cutwaterда
константный указатель на константные данные (const char * const ptr)
cutwaterОн, по-моему, попытался проиллюстрировать кортеж кодом на C++, но получилось неправильно. Потому что кортеж больше походит на массив константных указателей на данные (константные или неконстантные), а у него там совершенно другое.
аналогия terabayt с языком С++ некорректна
cutwaterНе, у него там неправильно, ты просто тоже запутался. Указатели должны быть константными, а массив изначально имеет фиксированное количество элементов. А у него указатели можно менять, const относится к данным, которые не разрешается менять через этот массив указателей.
UPD: Невнимательно изучил пример terabyt.
terabaytЭто не аналог кортежаconst char* masks[] = {a, b};
masks = (a, b)
masks[0] = 0;
>>> a = ['a'] >>> b = ['b'] >>> c = ['c'] >>> t = (a, b) >>> t[0] = c Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>>
Отредактировано py.user.next (Янв. 21, 2015 01:27:09)
Офлайн
19
py.user.next
Он, по-моему, попытался проиллюстрировать кортеж кодом на C++, но получилось неправильно. Потому что кортеж больше походит на массив константных указателей на данные (константные или неконстантные), а у него там совершенно другое.
int main() {
char a[] = "ab";
char b[] = "cd";
char c[] = "de";
char * const tuple[] = {a, b};
tuple[0] = c;
return 0;
}Отредактировано cutwater (Янв. 20, 2015 15:57:42)
Офлайн
857
cutwaterда
Если приводить аналогию кортежа на С++, то видимо должно быть как-то так
Отредактировано py.user.next (Янв. 20, 2015 16:05:14)
Офлайн
186
> а кортеж?
А строки с числами по твоему тоже “константы”?
Офлайн