Skip to content

Instantly share code, notes, and snippets.

@Marceloromeugoncalves
Last active March 8, 2023 13:24
Show Gist options
  • Save Marceloromeugoncalves/ec32a565902f49b553ed92299fbf4e33 to your computer and use it in GitHub Desktop.
Save Marceloromeugoncalves/ec32a565902f49b553ed92299fbf4e33 to your computer and use it in GitHub Desktop.
Exemplo namedtuple.
from collections import namedtuple
Local = namedtuple('Local', ['nome', 'latitude', 'longitude'])
locais = [
Local('Estátua da Liberdade, Nova York, EUA', 40.6892, -74.0445),
Local('Torre Eiffel, Paris, França', 48.8584, 2.2945),
Local('Opera House, Sydney, Austrália', -33.8568, 151.2153),
Local('Cristo Redentor, Rio de Janeiro, Brasil', -22.9519, -43.2105),
Local('Pirâmides de Gizé, Cairo, Egito', 29.9792, 31.1342),
Local('Monte Everest, Himalaia, Nepal', 27.9881, 86.9250),
Local('Grande Muralha da China, China', 40.4319, 116.5704),
Local('Coliseu, Roma, Itália', 41.8902, 12.4922),
Local('Taj Mahal, Agra, Índia', 27.1750, 78.0422),
Local('Machu Picchu, Cusco, Peru', -13.1631, -72.5450),
]
for local in locais:
array_local = local[0].split(',')
if len(array_local) == 2:
nome_local = array_local[0].strip()
pais = array_local[1].strip()
if len(array_local) == 3:
nome_local = array_local[0].strip()
cidade = array_local[1].strip()
pais = array_local[2].strip()
latitude = local[1]
longitude = local[2]
tupla_lat_long = (latitude, longitude)
print(f'Local: {nome_local}')
print(f'País: {pais}')
print(f'Cidade: {cidade}')
print(f'Latitude: {latitude}')
print(f'Longitude: {longitude}')
print(f'Tupla Lat Long: {tupla_lat_long}')
print(10 * '-')
@Marceloromeugoncalves
Copy link
Author

Saída:

Local: Estátua da Liberdade
País: EUA
Cidade: Nova York
Latitude: 40.6892
Longitude: -74.0445
Tupla Lat Long: (40.6892, -74.0445)
----------
Local: Torre Eiffel
País: França
Cidade: Paris
Latitude: 48.8584
Longitude: 2.2945
Tupla Lat Long: (48.8584, 2.2945)
----------
Local: Opera House
País: Austrália
Cidade: Sydney
Latitude: -33.8568
Longitude: 151.2153
Tupla Lat Long: (-33.8568, 151.2153)
----------
Local: Cristo Redentor
País: Brasil
Cidade: Rio de Janeiro
Latitude: -22.9519
Longitude: -43.2105
Tupla Lat Long: (-22.9519, -43.2105)
----------
Local: Pirâmides de Gizé
País: Egito
Cidade: Cairo
Latitude: 29.9792
Longitude: 31.1342
Tupla Lat Long: (29.9792, 31.1342)
----------
Local: Monte Everest
País: Nepal
Cidade: Himalaia
Latitude: 27.9881
Longitude: 86.925
Tupla Lat Long: (27.9881, 86.925)
----------
Local: Grande Muralha da China
País: China
Cidade: Himalaia
Latitude: 40.4319
Longitude: 116.5704
Tupla Lat Long: (40.4319, 116.5704)
----------
Local: Coliseu
País: Itália
Cidade: Roma
Latitude: 41.8902
Longitude: 12.4922
Tupla Lat Long: (41.8902, 12.4922)
----------
Local: Taj Mahal
País: Índia
Cidade: Agra
Latitude: 27.175
Longitude: 78.0422
Tupla Lat Long: (27.175, 78.0422)
----------
Local: Machu Picchu
País: Peru
Cidade: Cusco
Latitude: -13.1631
Longitude: -72.545
Tupla Lat Long: (-13.1631, -72.545)
----------

@Marceloromeugoncalves
Copy link
Author

Marceloromeugoncalves commented Mar 8, 2023

Uma namedtuple é um tipo de classe em Python que é semelhante a uma tupla, mas com a vantagem de que cada elemento pode ser acessado por um nome, em vez de apenas por um índice. Ela é uma subclasse de tuple e pode ser definida usando a função collections.namedtuple(), que aceita dois argumentos: um nome para a classe e uma string com os nomes dos campos separados por espaços ou vírgulas.

Por exemplo, a definição de uma namedtuple Pessoa com os campos nome, idade e sexo seria:

from collections import namedtuple

Pessoa = namedtuple('Pessoa', ['nome', 'idade', 'sexo'])

Isso cria uma nova classe chamada Pessoa, que pode ser usada para criar objetos que têm atributos com nomes específicos, como:

p1 = Pessoa('João', 25, 'M')
print(p1.nome) # João
print(p1.idade) # 25
print(p1.sexo) # M

Uma namedtuple é imutável como uma tupla, o que significa que seus valores não podem ser alterados depois de criados.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment