Resumo : neste tutorial, você aprenderá como usar a namedtuple
função Python para criar tuplas nomeadas.
Introdução ao Python nomeou tuplas
O seguinte mostra uma tupla que possui dois elementos:
point = (100,200)
Linguagem de código: Python ( python )
A point
tupla representa um ponto 2D cuja coordenada x é 100
e a coordenada y é 200
.
Para obter a coordenada x e a coordenada y, você pode usar a seguinte sintaxe:
x = point[0]
y = point[1]
Linguagem de código: Python ( python )
Este código funciona bem. No entanto, não é tão óbvio.
Ao olhar para o point[0]
, você precisa saber seu significado implícito, que não é mencionado no código.
Para tornar o código mais claro, você pode querer usar um class . Por exemplo:
class Point2D:
def __init__(self, x, y):
self.x = x
self.y = y
Linguagem de código: Python ( python )
E você pode criar uma nova instância do Point2D
:
a = Point2D(100, 200)
Linguagem de código: Python ( python )
Além disso, você pode acessar os atributos da coordenada x e da coordenada y:
print(a.x)
print(a.y)
Linguagem de código: Python ( python )
Para comparar se dois pontos são iguais, você precisa implementar o __eq__
método:
class Point2D:
def __init__(self, x, y):
self.x = x
self.y = y
def __eq__(self, other):
if isinstance(other, Point2D):
return self.x == other.x and self.y == other.y
return False
Linguagem de código: Python ( python )
O __eq__
método verifica se um ponto é uma instância da Point2D
classe e retorna True
se as coordenadas x e as coordenadas y são iguais.
O seguinte mostra como comparar duas instâncias da Point2D
classe:
a = Point2D(100, 200)
b = Point2D(100, 200)
print(a is b) # False
print(a == b) # true
Linguagem de código: Python ( python )
Pode Point2D
funcionar como você esperava. No entanto, você precisa escrever muito código.
Para combinar a simplicidade de uma tupla e o óbvio de uma classe, você pode usar uma tupla nomeada:
Tuplas nomeadas permitem criar tuplas e atribuir nomes significativos às posições dos elementos da tupla.
Tecnicamente, uma tupla nomeada é uma subclasse de tuple
. Além disso, adiciona nomes de propriedades aos elementos posicionais.
Criando classes de tupla nomeadas
Para criar uma classe de tupla nomeada, você precisa da namedtuple
função da collections
biblioteca padrão.
A namedtuple
é uma função que retorna uma nova classe de tupla nomeada. Em outras palavras, namedtuple()
é uma fábrica de classes.
Para usar a função, você precisa primeiro namedtuple
importá-la do módulo:collections
from collections import namedtuple
Linguagem de código: JavaScript ( javascript )
A namedtuple
função aceita os seguintes argumentos para gerar uma classe:
- Um nome de classe que especifica o nome da classe de tupla nomeada.
- Uma sequência de nomes de campos que correspondem aos elementos das tuplas. Os nomes dos campos devem ser nomes de variáveis válidos, exceto que não podem começar com um sublinhado (
_
).
Por exemplo, o seguinte usa a namedtuple
função para criar a Point2D
classe:
Point2D = namedtuple('Point2D',['x','y'])
Linguagem de código: Python ( python )
O nomeadotuple também pode aceitar nomes de campos como:
1) Uma tupla de string:
Point2D = namedtuple('Point2D',('x','y'))
Linguagem de código: Python ( python )
2) Ou uma única string com nomes de campos separados por vírgulas:
Point2D = namedtuple('Point2D',('x, y'))
Linguagem de código: Python ( python )
3) Ou uma única string com nomes de campos separados por espaços em branco
Point2D = namedtuple('Point2D','x y')
Linguagem de código: Python ( python )
Instanciando tuplas nomeadas
The Point2D
é uma classe, que é uma subclasse de tuple
. E você pode criar novas instâncias da Point2D
classe como faz com uma classe normal. Por exemplo:
point = Point2D(100, 200)
Ou você pode usar os argumentos de palavras-chave:
point = Point2D(x=100, y=200)
Linguagem de código: Python ( python )
O point
objeto é uma instância da Point2D
classe. Portanto, é uma instância da tuple
classe:
print(isinstance(point, Point2D)) # True
print(isinstance(point, tuple)) # True
Linguagem de código: Python ( python )
Acessando dados de uma tupla nomeada
Uma tupla nomeada é uma tupla regular. Portanto, você pode aplicar todas as operações de tupla em uma tupla nomeada.
Para acessar dados em uma tupla nomeada, você pode usar:
- Fatiamento
- Desempacotando
- Indexação
- e iterando
Por exemplo:
# unpacking
x, y = point
print(f'({x}, {y})') # (100, 200)
# indexing
x = point[0]
y = point[1]
print(f'({x}, {y})') # (100, 200)
# iterating
for coordinate in point:
print(coordinate)
Linguagem de código: Python ( python )
Saída:
(100, 200)
(100, 200)
100
200
Linguagem de código: Python ( python )
O argumento renomear da função nomeadatuple
A namedtuple
função aceita o rename
argumento somente de palavra-chave que permite renomear nomes de campos inválidos.
O seguinte resulta em erro porque o nome do campo _radius
começa com um sublinhado ( _
):
from collections import namedtuple
Circle = namedtuple(
'Circle',
'center_x, center_y, _radius'
)
Linguagem de código: Python ( python )
No entanto, quando você usa o rename
argumento, a namedtuple
função renomeia automaticamente _radius
para um nome de campo válido. Por exemplo:
from collections import namedtuple
Circle = namedtuple(
'Circle',
'center_x, center_y, _radius',
rename=True
)
Linguagem de código: Python ( python )
Para encontrar nomes de campos de uma tupla nomeada, você pode usar a _fields
propriedade class. Por exemplo:
print(Circle._fields)
Linguagem de código: Python ( python )
Saída:
('center_x', 'center_y', '_2')
Linguagem de código: Python ( python )
Neste exemplo, a namedtuple
função altera o _radius
campo para _2
automaticamente.
Funções adicionais do Python de tuplas nomeadas
Tuplas nomeadas fornecem algumas funções úteis prontas para uso. Por exemplo, você pode usar o operador igual ( ==
) para comparar duas instâncias de tupla nomeadas:
a = Point2D(100, 200)
b = Point2D(100, 200)
print(a == b) # True
Linguagem de código: Python ( python )
Se você usar a classe, precisará implementar o __eq__
para obter esta função.
Além disso, você pode obter a representação em string de uma tupla nomeada:
print(a)
Linguagem de código: Python ( python )
Saída:
Point2D(x=100, y=200)
Linguagem de código: Python ( python )
Novamente, se você usar a classe, precisará implementar __rep__
o método.
Como uma tupla nomeada é uma tupla, você pode aplicar qualquer função que seja relevante a uma tupla regular a uma tupla nomeada. Por exemplo:
print(max(a)) # 200
print(min(a)) # 100
Linguagem de código: Python ( python )
Resumo
- Tuplas nomeadas são tuplas cujas posições dos elementos possuem nomes significativos.
- Use a
namedtuple
função dacollections
biblioteca padrão para criar uma classe de tupla nomeada. - Tuplas nomeadas são imutáveis.