Я изучаю Python для класса сейчас, и мы просто рассматривали кортежи как один из типов данных. Я прочитал на ней страницу Википедии, но я не мог понять, где такой тип данных будет полезен на практике. Могу ли я иметь несколько примеров, возможно, на Python, где необходим неизменный набор чисел? Как это отличается от списка?Для чего нужен кортеж?
ответ
- Кортежи используются всякий раз, когда вы хотите вернуть несколько результатов из функции.
- Поскольку они неизменяемы, они могут использоваться как ключи для словаря (списки не могут).
Я считаю их полезными, когда вы всегда имеете дело с двумя или более объектами в качестве набора.
В списке всегда можно заменить кортеж по функциональности (за исключением, по-видимому, ключей в dict). Однако кортеж может ускорить работу. То же самое верно для, например, неизменяемых строк в Java - когда вам когда-нибудь понадобится изменить свои строки? Никогда!
Я только что прочитал приличную дискуссию о том, как ограничить то, что вы можете сделать, чтобы создавать лучшие программы; Why Why Functional Programming Matters Matters
Кортежи делают хорошие словарные ключи, когда вам нужно объединить более одного фрагмента данных в свой ключ и не хочется создавать для него класс.
a = {}
a[(1,2,"bob")] = "hello!"
a[("Hello","en-US")] = "Hi There!"
Я использовал эту функцию прежде всего для создания словаря с ключами, которые являются координатами вершин сетки. Однако в моем конкретном случае точное сравнение используемых поплавков работало нормально, что может быть не всегда верно для ваших целей [в этом случае я, вероятно, конвертировал бы ваши поплавки в какое-то целое число с фиксированной запятой]
Кортеж полезен для хранения нескольких значений. Поскольку вы отмечаете, что кортеж похож на список, который является неизменным - например, после создания вы не можете добавлять/удалять/заменять элементы.
Одним из преимуществ неизменности является то, что, поскольку кортеж является фиксированным размером, он позволяет исполнению определенных оптимизаций. Это особенно полезно, когда в качестве значения возвращаемого значения или параметра используется функция.
Кортежи и списки имеют одинаковые виды использования в целом. Неизменяемые типы данных в целом имеют много преимуществ, в основном о проблемах с параллелизмом.
Итак, когда у вас есть списки, которые не являются изменчивыми по своей природе, и вам необходимо гарантировать, что ни один потребитель не изменит его, вы можете использовать кортеж.
Типичными примерами являются фиксированные данные в приложении, такие как подразделения компании, категории и т. Д. Если эти данные изменяются, обычно один производитель перестраивает кортеж.
Мне нравится this explanation.
В принципе, вы должны использовать кортежи, если существует постоянная структура (1-я позиция всегда содержит один тип значения, второй - и т. Д.), А списки должны использоваться для списков однородных значений.
Конечно, всегда есть исключения, но это хорошая общая рекомендация.
В дополнение к местам, где они синтаксически требуются, например, операция string% и для нескольких возвращаемых значений, я использую кортежи как форму легких классов. Например, предположим, что у вас есть объект, который передает непрозрачный файл cookie вызывающему из одного метода, который затем передается другому методу. Кортеж - это хороший способ упаковать несколько значений в этот файл cookie без необходимости определять отдельный класс, чтобы их содержать.
Я стараюсь быть разумным в отношении этого конкретного использования. Если файлы cookie используются свободно во всем коде, лучше создать класс, потому что он помогает документировать их использование. Если они используются только в одном месте (например, одна пара методов), я могу использовать кортеж. В любом случае, поскольку это Python, вы можете начать с кортежа, а затем изменить его на экземпляр пользовательского класса без изменения кода в вызывающем.
Кортеж представляет собой последовательность значений. Значения могут быть любого типа, и они индексируются по целому числу, поэтому кортежи не похожи на списки. Самое важное отличие состоит в том, что кортежей неизменяемы.
Кортеж представляет собой разделенный запятыми список значений:
t = 'p', 'q', 'r', 's', 't'
это хорошая практика, чтобы заключить кортежи в скобках:
t = ('p', 'q', 'r', 's', 't')
- 1. Для чего нужен PushFrame?
- 2. Для чего нужен PML4?
- 3. Для чего нужен csilogfile?
- 4. Для чего нужен FB.getLoginStatus?
- 5. Для чего нужен VisualStateManager?
- 6. Для чего нужен hex?
- 7. Для чего нужен файл XXXBundle.php?
- 8. Для чего нужен токен царства?
- 9. Для чего нужен вектор VectorDrawableCompat?
- 10. Для чего нужен объект MatOfMatch?
- 11. Для чего нужен язык M?
- 12. Moodle - для чего нужен токен?
- 13. Для чего нужен этот сайт?
- 14. Для чего нужен shebang/hashbang?
- 15. Для чего нужен идентификатор клиента?
- 16. Для чего вам нужен "initalValue"
- 17. Для чего нужен пустой файл?
- 18. Для чего нужен rspec gem?
- 19. DavLockDB: для чего он нужен?
- 20. Для чего нужен C++/CLI?
- 21. Для чего нужен элемент ItemsSource?
- 22. для чего нужен файл mpiC++?
- 23. нужен кортеж не для порта сканера
- 24. атрибут имени приложения - для чего он нужен?
- 25. Enterprise Architect: для чего нужен класс DataType?
- 26. capistrano,: db role, для чего он нужен?
- 27. Для чего нужен код с поддержкой потоков?
- 28. LIBSVM svmpredict: для чего нужен testLabel?
- 29. «printf» в микроконтроллере, для чего он нужен?
- 30. Mina - HTTP Proxy - для чего нужен AbstractHttpLogicHandler?
Из привередливых перспектив человека PL: Python является приравнивая множественный вещи здесь; в статически типизированном языке тип «кортеж» соответствует значениям, содержащим фиксированное количество под-значений с фиксированными типами. E.G., (string * int), тип кортежей, содержащих строку и целое число. На динамически типизированном языке этот смысл кажется погруженным. Понятие неизменности не является тем, что обычно связано с кортежами; Кажется, что python кооптировал и повторно накладывал термин «кортеж». – 2010-06-19 20:23:24
Кортежи также возвращаются некоторыми объектами коллекции, такими как enumerate(), где полезно знание кортежей – Murphy 2016-04-01 20:34:57