2016-05-13 3 views
3

Я только начал изучать Pythonпитона: несколько переменных, используя кортеж

Я читал о tuple. Once created, the values of a tuple cannot change.

Вот что я прочитал ..

Если вы хотите назначить несколько переменных одновременно, вы можете использовать кортежи:

name,age,country,career = ('Diana',32,'Canada','CompSci') 
print(country) 

Я сделал это ..

country = 'India' 
print(country) 

и его изменение.

Почему?

+6

Вы не меняете значения * tuple *, а только присваиваете значение переменной. Кортеж '('Diana', 32, 'Canada', 'CompSci')' * распакован * для 4 различных переменных 'str'. Следовательно, вы можете переназначить переменную 'country'. Однако, если вы хотите сделать что-то вроде '('Diana', 32, 'Canada', 'CompSci') [2] =" India "', вы не можете, поскольку вы пытаетесь изменить значение 'неизменяемого' кортежа. –

+2

^вероятно, опубликуйте это как ответ – Keiwan

+0

Хорошо. Он будет рассматривать «кортеж» только в том случае, если я назначу его одной переменной? – Shri

ответ

3

То, как вы использовали кортеж, заключалось в том, чтобы назначать одиночные значения одиночным переменным в одной строке. Это не сохраняет кортеж в любом месте, поэтому вы останетесь с 4 переменными с 4 различными значениями. Когда вы меняете значение страны, вы изменяете значение этой единственной переменной, а не кортежа, поскольку строковые переменные являются «вызовом по значению» в python.

Если вы хотите сохранить кортеж вы могли бы сделать это следующим образом:

tup = ('Diana',32,'Canada','CompSci') 

Тогда вы можете получить доступ к значениям с помощью индекса:

print tup[1] #32 

Edit: Что я забыл упоминалось, что кортежи не изменяются, поэтому вы можете получить доступ к значениям, но вы не можете установить их так, как вы могли бы с массивами. Вы все еще можете сделать:

name, age, country, job = tup 

Но значения будут копии кортежа - поэтому изменение их обыкновение менять кортеж.

+0

Спасибо. У меня появилась ясная идея. – Shri

+0

Забыл упомянуть, что кортежи неизменяемы, обновил мой ответ соответственно. –

1

Следующий код фрагмента может быть полезен для понимания причины. Здесь name, age, country и career являются одиночными переменными и поэтому могут быть изменены.

t = (name, age, country, career) = ('Diana',32,'Canada','CompSci') 

print(t)   # ('Diana', 32, 'Canada', 'CompSci') 
print(country)  # Canada 

country = 'India' 

print(t)   # ('Diana', 32, 'Canada', 'CompSci') 
print(country)  # India 

t[2] = 'India' 
# The error occurs as expected 
TypeError: 'tuple' object does not support item assignment 
0

Вы просто изменяете значение переменной Country, а не кортеж. Вы можете проверить это следующим образом:

tup=('Diana',32,'Canada','CompSci') 
name,age,country,career = tup 
print(country) 
country = 'India' 
print(tup) 

Вывод должен выглядеть следующим образом:

Canada 
('Diana', 32, 'Canada', 'CompSci') 

вы не можете изменить значение элемента внутри кортежа они неизменны. это одна из основных особенностей кортежей. Списки, с другой стороны, изменяемы.

1

Этот код:

name, age, country, career = ('Diana',32,'Canada','CompSci') 
print(country) 

делает это:

name = 'Diana' 
age = 32 
country = 'Canada' 
career = 'CompSci' 

кортежей не изменяемые, но вы не сделали кортеж.Для того, чтобы кортеж, попробуйте следующее:

nameAge = ('Diana', 32) 

теперь вы его изменить:

>>> nameAge[1] = 33 
Traceback (most recent call last): 
    File "<pyshell#23>", line 1, in <module> 
    nameAge[1] = 'a' 
TypeError: 'tuple' object does not support item assignment 

Как вы можете видеть, этот кортеж не меняется.

Смежные вопросы