196 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			196 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: The Tuples | |||
|  | localeTitle: Кортежи | |||
|  | --- | |||
|  | ## Кортежи
 | |||
|  | 
 | |||
|  | Кортеж представляет собой последовательность объектов Python. Кортежи неизменяемы, что означает, что они не могут быть изменены после создания, в отличие от списков. | |||
|  | 
 | |||
|  | **Создание:** | |||
|  | 
 | |||
|  | Пустой `tuple` создается с помощью пары круглых скобок `()` : | |||
|  | 
 | |||
|  | ```shell | |||
|  |     >>> empty_tuple = ()  | |||
|  |     >>> print(empty_tuple)  | |||
|  |     ()  | |||
|  |     >>> type(empty_tuple)  | |||
|  |     <class 'tuple'>  | |||
|  |     >>> len(empty_tuple)  | |||
|  |     0  | |||
|  | ``` | |||
|  | 
 | |||
|  | `tuple` с элементами создается путем разделения элементов запятыми (окружающие круглые скобки, `()` , являются необязательными с исключениями): | |||
|  | 
 | |||
|  | ```shell | |||
|  |     >>> tuple_1 = 1, 2, 3       # Create tuple without round brackets.  | |||
|  |     >>> print(tuple_1)  | |||
|  |     (1, 2, 3)  | |||
|  |     >>> type(tuple_1)  | |||
|  |     <class 'tuple'>  | |||
|  |     >>> len(tuple_1)  | |||
|  |     3  | |||
|  |     >>> tuple_2 = (1, 2, 3)     # Create tuple with round brackets.  | |||
|  |     >>> print(tuple_2)  | |||
|  |     (1, 2, 3)  | |||
|  |     >>> tuple_3 = 1, 2, 3,      # Trailing comma is optional.  | |||
|  |     >>> print(tuple_3)  | |||
|  |     (1, 2, 3)  | |||
|  |     >>> tuple_4 = (1, 2, 3,)    # Trailing comma in round brackets is also optional.  | |||
|  |     >>> print(tuple_4)  | |||
|  |     (1, 2, 3)  | |||
|  | ``` | |||
|  | 
 | |||
|  | `tuple` с одним элементом должен иметь конечную запятую (с круглыми скобками или без них): | |||
|  | 
 | |||
|  | ```shell | |||
|  |     >>> not_tuple = (2)    # No trailing comma makes this not a tuple.  | |||
|  |     >>> print(not_tuple)  | |||
|  |     2  | |||
|  |     >>> type(not_tuple)  | |||
|  |     <class 'int'>  | |||
|  |     >>> a_tuple = (2,)     # Single element tuple. Requires trailing comma.  | |||
|  |     >>> print(a_tuple)  | |||
|  |     (2,)  | |||
|  |     >>> type(a_tuple)  | |||
|  |     <class 'tuple'>  | |||
|  |     >>> len(a_tuple)  | |||
|  |     1  | |||
|  |     >>> also_tuple = 2,    # Round brackets omitted. Requires trailing comma.  | |||
|  |     >>> print(also_tuple)  | |||
|  |     (2,)  | |||
|  |     >>> type(also_tuple)  | |||
|  |     <class 'tuple'>  | |||
|  | ``` | |||
|  | 
 | |||
|  | Круглые скобки требуются в случаях двусмысленности (если кортеж является частью большего выражения): | |||
|  | 
 | |||
|  | > Обратите внимание, что на самом деле это запятая, которая делает кортеж, а не круглые скобки. Скобки являются необязательными, за исключением случая пустого кортежа, или когда они необходимы, чтобы избежать синтаксической двусмысленности. Например, `f(a, b, c)` является вызовом функции с тремя аргументами, тогда как `f((a, b, c))` является вызовом функции с 3-кортежем в качестве единственного аргумента.
 | |||
|  | 
 | |||
|  | ```shell | |||
|  |     >>> print(1,2,3,4,)          # Calls print with 4 arguments: 1, 2, 3, and 4  | |||
|  |     1 2 3 4  | |||
|  |     >>> print((1,2,3,4,))        # Calls print with 1 argument: (1, 2, 3, 4,)  | |||
|  |     (1, 2, 3, 4)  | |||
|  |     >>> 1, 2, 3 == (1, 2, 3)     # Equivalent to 1, 2, (3 == (1, 2, 3))  | |||
|  |     (1, 2, False)  | |||
|  |     >>> (1, 2, 3) == (1, 2, 3)   # Use surrounding round brackets when ambiguous.  | |||
|  |     True  | |||
|  | ``` | |||
|  | 
 | |||
|  | `tuple` также может быть создан с помощью конструктора `tuple` : | |||
|  | 
 | |||
|  | ```shell | |||
|  |     >>> empty_tuple = tuple()  | |||
|  |     >>> print(empty_tuple)  | |||
|  |     ()  | |||
|  |     >>> tuple_from_list = tuple([1,2,3,4])  | |||
|  |     >>> print(tuple_from_list)  | |||
|  |     (1, 2, 3, 4)  | |||
|  |     >>> tuple_from_string = tuple("Hello campers!")  | |||
|  |     >>> print(tuple_from_string)  | |||
|  |     ('H', 'e', 'l', 'l', 'o', ' ', 'c', 'a', 'm', 'p', 'e', 'r', 's', '!')  | |||
|  |     >>> a_tuple = 1, 2, 3  | |||
|  |     >>> b_tuple = tuple(a_tuple)    # If the constructor is called with a tuple for  | |||
|  |     the iterable,  | |||
|  |     >>> a_tuple is b_tuple          # the tuple argument is returned.  | |||
|  |     True  | |||
|  | ``` | |||
|  | 
 | |||
|  | **Доступ к элементам `tuple` :** | |||
|  | 
 | |||
|  | Доступ к элементам `tuples` осуществляется и индексируется так же, как и `lists` . | |||
|  | 
 | |||
|  | ```shell | |||
|  |     >>> my_tuple = 1, 2, 9, 16, 25  | |||
|  |     >>> print(my_tuple)  | |||
|  |     (1, 2, 9, 16, 25)  | |||
|  | ``` | |||
|  | 
 | |||
|  | _Нулевой индекс_ | |||
|  | 
 | |||
|  | ```shell | |||
|  |     >>> my_tuple[0]  | |||
|  |     1  | |||
|  |     >>> my_tuple[1]  | |||
|  |     2  | |||
|  |     >>> my_tuple[2]  | |||
|  |     9  | |||
|  | ``` | |||
|  | 
 | |||
|  | _Обтекание индексации_ | |||
|  | 
 | |||
|  | ```shell | |||
|  |     >>> my_tuple[-1]  | |||
|  |     25  | |||
|  |     >>> my_tuple[-2]  | |||
|  |     16  | |||
|  | ``` | |||
|  | 
 | |||
|  | **Упаковка и распаковка:** | |||
|  | 
 | |||
|  | Утверждение `t = 12345, 54321, 'hello!'` пример упаковки кортежей: значения `12345` , `54321` и `'hello!'` упаковываются вместе в кортеж. Также возможна обратная операция: | |||
|  | 
 | |||
|  | ```shell | |||
|  |     >>> x, y, z = t  | |||
|  | ``` | |||
|  | 
 | |||
|  | Это называется, достаточно подходящим образом, распаковка последовательности и работает для любой последовательности с правой стороны. Для распаковки последовательности требуется, чтобы в левой части знака равенства было столько же переменных, сколько элементов в последовательности. Обратите внимание, что множественное назначение - это всего лишь комбинация упаковки кортежей и распаковки последовательностей. | |||
|  | 
 | |||
|  | ```shell | |||
|  |     >>> t = 1, 2, 3    # Tuple packing.  | |||
|  |     >>> print(t)  | |||
|  |     (1, 2, 3)  | |||
|  |     >>> a, b, c = t    # Sequence unpacking.  | |||
|  |     >>> print(a)  | |||
|  |     1  | |||
|  |     >>> print(b)  | |||
|  |     2  | |||
|  |     >>> print(c)  | |||
|  |     3  | |||
|  |     >>> d, e, f = 4, 5, 6    # Multiple assignment combines packing and unpacking.  | |||
|  |     >>> print(d)  | |||
|  |     4  | |||
|  |     >>> print(e)  | |||
|  |     5  | |||
|  |     >>> print(f)  | |||
|  |     6  | |||
|  |     >>> a, b = 1, 2, 3       # Multiple assignment requires each variable (right)  | |||
|  |     have a matching element (left).  | |||
|  |     Traceback (most recent call last):  | |||
|  |       File "<stdin>", line 1, in <module>  | |||
|  |     ValueError: too many values to unpack (expected 2)  | |||
|  | ``` | |||
|  | 
 | |||
|  | **Неизменный:** | |||
|  | 
 | |||
|  | `tuples` являются неизменяемыми контейнерами, гарантируя, **что** объекты, **которые** они содержат, не изменятся. Это **не** гарантирует, что объекты, которые они содержат, не изменятся: | |||
|  | 
 | |||
|  | ```shell | |||
|  |     >>> a_list = []  | |||
|  |     >>> a_tuple = (a_list,)    # A tuple (immutable) with a list (mutable) element.  | |||
|  |     >>> print(a_tuple)  | |||
|  |     ([],)  | |||
|  |   | |||
|  |     >>> a_list.append("Hello campers!")  | |||
|  |     >>> print(a_tuple)         # Element of the immutable is mutated.  | |||
|  |     (['Hello campers!'],)  | |||
|  | ``` | |||
|  | 
 | |||
|  | Область **применения:** | |||
|  | 
 | |||
|  | Функции могут возвращать только одно значение, однако гетерогенный `tuple` может использоваться для возврата нескольких значений из функции. Одним из примеров является встроенная функция `enumerate` которая возвращает итерабельность гетерогенных `tuples` : | |||
|  | 
 | |||
|  | ```shell | |||
|  |     >>> greeting = ["Hello", "campers!"]  | |||
|  |     >>> enumerator = enumerate(greeting)  | |||
|  |     >>> enumerator.next()  | |||
|  |     >>> enumerator.__next__()  | |||
|  |     (0, 'Hello')  | |||
|  |     >>> enumerator.__next__()  | |||
|  |     (1, 'campers!')  | |||
|  | ``` | |||
|  | 
 | |||
|  | ### Больше информации:
 | |||
|  | 
 | |||
|  | [Документы Python - кортежи](https://docs.python.org/3/library/stdtypes.html#tuples) |