Tipos Numéricos

Python suporta os seguintes tipos numéricos escalares (os códigos apresentados aqui estão no formato do console interativo, para serem executados como blocos de códigos precisam de algumas modificações, como por exemplo 1+1 -> print 1+1):

Inteiro:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

1 + 1
a = 4
type(a)

[/pastacode]

Floats:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

c = 2.1
type(c)

[/pastacode]

Complexos:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

a = 1.5 + 0.5j
a.real
a.imag
type(1. + 0j )

[/pastacode]

Boleanos:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

3 > 4
test = (3 > 4)
test
type(test)

[/pastacode]

Os operadores básicos:

  • + soma
  • – subtração
  • * multiplicação
  • / divisão
  • ** exponencial

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

3 + 5
10 - 5.
7 * 3.
2**10
7./2
8

[/pastacode]

Conversão de tipos:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

float(1)
int(4.3)
str(2)

[/pastacode]

ATENÇÃO: A divisão de inteiro por inteiro quando executada no console interativo resulta em float (caso seja quebrada), no entanto em blocos de códigos ela resulta em um inteiro, por exemplo, 7/2, eesulta em 3.5 no console e 3 executando o bloco de código. Dica: use sempre um dos valores como float na divisão, de preferência o denominador, 7/2.

Recipientes

O Python oferece, basicamente, cinco tipos de recipientes de dados: listas, strings, dicionários, tuplas e conjuntos.

Listas

Lista é uma coleção ordenada de objetos de diversos tipos. Para coleções de dados numéricos do mesmo tipo, muitas vezes é mais eficiente usar o tipo array fornecido pelo módulo NumPy. Uma array NumPy é um pedaço de memória que contém itens de tamanho fixo. Com arrays NumPy, operações nos elementos podem ser mais rápidas, porque os elementos são regularmente espaçados na memória e mais operações são realizadas através de funções especializadas C em vez de loops Python (isso será visto mais adiante). Exemplo de listas:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

L = ['red', 'blue', 1, 5.7, 3+2.j]
type(L)

[/pastacode]

Esses objetos podem ser acessados diretamente através do seu índice na lista, que podem ser contados do final com índices negativos:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

L[2]
L[-2]

[/pastacode]

ATENÇÃO: os índices iniciam em zero, e não em 1 como em C ou Fortran.

É possível cortar as listas obtendo-se sublistas com objetos regularmente espaçados:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

L[2:4]

[/pastacode]

Note que L[inicio:fim] contém os elementos com índices i de forma que inicio <= i <= fim (i varia do inicio ao fim-1). Além disso, L[inicio:fim] contém (fim-inicio) elementos.

Sintaxe de corte:

L[inicio:fim:incremento] (o parâmetro incremento é opcional) Teste:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

L[3:]
L[:3]
L[::2]

[/pastacode]

Listas são objetos mutáveis e podem ser alterados:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

L[0] = 'amarelo'
L[2:4] = ['gray', 'purple']
L

[/pastacode]

Python oferece uma grande gama de funções para modificar listas ou consultá-las. Abaixo alguns exemplos, mais em: Mais sobre listas!

Adicionar e remover elementos:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

L = ['red', 'blue', 'green', 'black', 'white']
L.append('pink')
L
L.pop() # remove o último item
L
L.extend(['pink', 'purple']) # expande L acrescentando no final
L
L = L[:-2] #remove os dois últimos
L

[/pastacode]

Reverter:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

r = L[::-1]
r
r2 = list(L)
r2
r2.reverse()
r2

[/pastacode]

Concatenar e repetir listas:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

r * L
r * 2

[/pastacode]

Ordenar:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

sorted(r) # novo objeto
r
r.sort() # modifica o objeto
r

[/pastacode]

Métodos e programação orientada a objeto

A notação:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

r.método()
r.sort()
r.append(3)
L.pop()

[/pastacode]

é o primeiro exemplo de programação orientada a objeto. Sendo uma lista, o objeto r possui a função método chamada usando a notação. Nenhum conhecimento adicional é necessário para a utilização nesse momento que o entendimento da notação “.”.

O próprio console interativo nos mostra os métodos relacionados ao objeto assim que inserimos o “.”.

Strings

Python nos deixa escrever strings utilizando aspas simples, duplas ou, quando em múltiplas linhas, três aspas duplas.

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

s = 'Olá, como vai você?'
s = "Oi, como vai"
s = '''Oi,
tudo bem?'''

[/pastacode]

Cuidado com escritas com aspas simples, como frases em inglês:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

s = 'Hello, what's up'
s = "Hello, what's up"

[/pastacode]

O caractere para nova linha é \n e o de tabulação é \t.

As strings são coleções como as listas e, portanto, podem ser indexadas e cortadas com as mesmas regras das listas.

Indexação:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

a = "pós-graduação"
a[0]
a[1]
a[-1]

[/pastacode]

Observe que a acentuação sai em código ASCII-8BIT. Teste mudar a primeira linha do bloco de código para (sem os escritos entre parênteses):

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

# -*- coding: cp1252 -*- (caso esteja usando windows)
# -*- coding: utf-8 -*- (caso linux)

[/pastacode]

Essa primeira linha indica o tipo da codificação dos caracteres de texto utilizados. Veja mais em: Strings Unicode!

Corte:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

a = "programa de métodos numéricos"
a[3:6] # 3º ao 6º elementos: elementos 3, 4, 5
a[2:10:2] # Sintaxe: a[inicio:fim:incremento]
a[::3] # a cada três caracteres, do início ao fim

[/pastacode]

Strings são objetos imutáveis e portanto não podem ser modificados. No entanto, podem ser criadas novas strings com modificações em função das originais.

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

a = "isso é imutável"
a[2] = 'z' #vai gerar um erro

[/pastacode]

Tente com:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

a = "isso é imutável"
a.replace('l', 'z', 1)
a.replace('l', 'z')

[/pastacode]

Strings tem muitos métodos úteis, como por exemplo o a.replace visto acima. Lembre-se que a. é uma chamada para os métodos do objeto a que podem ser vistos após a digitação do “.” no console interativo (no arquivo com blocos de código também). Veja mais em:  Dicionários! para mais informação.

Chaves e Valores:

Um dicionário pode ter chaves e valores de diferentes tipos:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

d = {'a':1, 'b':2, 3:'palavra'}
d

[/pastacode]

Tuplas

As tuplas são basicamente listas imutáveis. Os elementos de uma tupla são escritos entre parenteses ou simplesmente separados por vírgulas.

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

t = 12345, 54321, 'telefone'
t[0]
t
u = (0, 2)

[/pastacode]

Conjuntos

Itens únicos e desordenados:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

s = set(('a', 'b', 'c', 'a'))
s
s.difference(('a', 'b'))

[/pastacode]

Operador de Atribuição

A biblioteca de referência do Python diz o seguinte:

“Instruções de atribuição são utilizados para ligar (religar) nomes a valores e para modificar os atributos ou itens de objetos mutáveis.”

Basicamente, isso funciona da seguinte maneira (atribuição simples):

  1. Uma expressão no lado direito é avaliada, o objeto correspondente é criado ou obtido;
  2. Um nome, no lado esquerdo é atribuído, ou ligado, para o objeto do lado direito.

Observação:

Um simples objeto pode ter diversos nomes conectados a ele, execute os códigos abaixo e preste atenção no resultado:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

a = [1, 2, 3]
b = a
a
b
a is b
b[1] = 'oi!'
a

[/pastacode]

Notem que para mudar uma lista na lista, utilize o índice ou o corte:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

a = [1, 2, 3]
print a
a = ['a', 'b', 'c'] # Cria outro objeto
print a
print id(a)
a[:] = [1, 2, 3] # Modifica o objeto
print a
print id(a)

[/pastacode]

Observe que mesmo sendo diferentes o primeiro a do segundo, eles possuem a mesma identificação.

O conceito chave aqui é mutável x imutável:

  • Objetos mutáveis podem ser modificados;
  • Objetos imutáveis não podem mais ser modificados após serem criados.

Uma explicação muito boa sobre isso pode ser lida no artigo do David M. Beazley Types and Objects in Python.