Ir para o conteúdo
ou

Software livre Brasil

Magnun

Nenhum artigo selecionado ainda.
Tela cheia
 Feed RSS

Blog

27 de Maio de 2009, 0:00 , por Software Livre Brasil - | Ninguém está seguindo este artigo ainda.

[Curso de Python] Tipos Built-In - Parte 2

19 de Outubro de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

Antes de prosseguir leia os artigos anteriores aqui



Na última aula começamos a analisar os tipos built-in um por um. Vimos os tipos None, NotImplemented e o Ellipsis. Hoje daremos continuidade nesse estudo. Hoje veremos rapidamente os tipos numéricos.

Tipos Built-In - Parte 2




Retomando a lista dos tipos built-in:
  • None;
  • NotImplemented;
  • Ellipsis;
  • Numericos:
    • int;
    • long;
    • float;
    • bool;
    • complex;
  • Sequências Imutáveis:
    • str;
    • unicode;
    • tuple;
  • Sequências Mutáveis:
    • list;
    • bytearray;
  • Sets:
    • set;
    • frozenset;
  • Mapeamentos:
    • dict;
  • slice;
  • callable;
  • file;


Os tipos numéricos já foram brevemente abordados em aulas passadas, então comentarei um pouco mais sobre eles.


Int

Inicialmente temos o tipo inteiro identificado pela palavra int. Esse tipo representa um número inteiro, positivo ou negativo, nulo ou não-nulo que esteja entre -2147483648 e 2147483647. Caso uma operação matemática gere um número que extrapola essa faixa, ele é automaticamente retornado como um inteiro Longo (em alguns casos pode ocorrer o erro OverflowError).

Código python:
>>> type(12)
<type 'int'>
>>> 12**8
429981696
>>> 12**9
5159780352L
>>> type(12**9)
<type 'long'>
>>>



Long

Os números inteiros longos não estão restritos a uma faixa (como os inteiros), estão restritos somente à disponibilidade de memória virtual. Isto quer dizer que o interpretador do Python aloca espaços de memória dinamicamente possibilitando ter números de tamanhos incríveis. Quando necessário, o resultado de uma operação é automaticamente adaptado para um inteiro longo. Em um sistema de 32 bits o número 2.147.483.647 é o menor inteiro simples disponível.

Código python:
>>> int_simples = 10**9
>>> int_simples
1000000000
>>> type(int_simples)
<type 'int'>
>>>
>>> int_longo = 10**10
>>> int_longo
10000000000L
>>> type(int_longo)
<type 'long'>
>>>

O processo inverso não ocorre naturalmente, é necessário converter manualmente o inteiro longo para inteiro simples.
Código python:
>>> resultado = 10000000000L/100
>>> resultado
100000000L
>>> type(resultado)
<type 'long'>
>>> int(resultado)
100000000
>>> type(int(resultado))
<type 'int'>
>>>



Curiosidade

Uma curiosidade sobre os números é que eles podem ser escritos de forma binário ou hexadecimal. para escrever um número no modo binário basta preceder o número por 0b. Segue alguns exemplos:
Código python:
>>> 0b101111
47
>>> 0b011
3
>>> 0b111011111000011
30659

Para escrever um número em hexadecimal, utilizamos a notação 0x antes do número. Segue alguns exemplos:
Código python:
>>> 0xff
255
>>> 0x0a
10
>>>


Outra forma de se obter números através de representações binárias/hexadecimais é utilizar o construtor int:
Código python:
>>> print int('01010101111',2)
687
>>> int('1010', 2)
10
>>>
>>> int('ff', 16)
255
>>> int('b', 16)
11
>>>

Como podemos ver basta informar o número na forma de string e informar posteriormente a base numérica (2 para binário e 16 para hexadecimal).

Também é possível criar uma representação binária de um número inteiro comum. Note que o resultado é uma string:
Código python:
>>> bin(173)
'0b10101101'


Para criar uma representação hexadecimal de um número inteiro comum utilize a função hex:
Código python:
>>> hex(111)
'0x6f'
>>> hex(255)
'0xff'
>>> hex(14)
'0xe'
>>>



Float

O tipo float, são números que se utilizam de casas decimais para representar valores reais.

Código python:
>>> 1.2
1.2
>>> 2.75
2.75
>>>

O Python utiliza o ponto como marcador de casas decimais. Algumas vezes o Python pode apresentar números "incertos". Por exemplo:

Código python:
>>> 1.2-1.0
0.199999999999999996

Isto não é um bug. Na verdade isso não é relacionado com o Python em si, mas sim com a forma que a plataforma C manipula pontos flutuantes e com a imprecisão adicionada pelo processo de convertes números para strings com um numero definido de casas decimais.

A representação interna do ponto flutuante usa um numero fixo de dígitos binários para representar o numero decimal, Alguns números decimais ão podem ser representados precisamente, resultando em pequenos erros de aproximação.

Para os matemáticos curiosos: é fácil provar que 0.99999... é igual a 1, aqui vai um link: 0.999... - Wikipedia, the free encyclopedia


Booleanos

Os valores booleanos assumem apenas 2 valores, verdadeiro e falso. Eles se comportam como 1 e 0.

Código python:
>>> True
True
>>> False
False
>>>
>>>
>>> True + True
2
>>> True + False
1
>>> False + False
0
>>>



Complex

Números complexos são muito utilizados na matemática e na engenharia. Eles são representados por dois números com ponto flutuante (ou inteiros/longos), parte real e imaginária. A parte imaginária sempre está acompanhada pelo número complexo j, dependendo do livro adotado também é utilizado o i, ambos são uma substituição para o número complexo srq(-1) (raix quadrada de um).

Em Python, semelhante ao Long, não existe uma limitação de tamanho para números complexos. Isso se deve ao fato dos números complexos serem pares de números que se comportam de forma diferente ao serem somados, subtraídos, multiplicados e divididos. Dessa forma esses pares podem ser inteiros, pontos flutuantes ou longos.

Código python:
>>> 1 + 2j
(1+2j)
>>>
>>> -5 + 4j
(-5+4j)
>>>
>>> 2j
2j
>>>

O Python suporta também é capaz de realizar operações matemáticas com números complexos:

Código python:
>>> (2 - 3j) + (1 + 5j)
(3+2j)
>>> (2 - 3j) - (1 + 5j)
(1-8j)
>>> (2 - 3j)*(-1j)
(-3-2j)
>>> (2 - 3j)/(-2+2j)
(-1.25+0.25j)
>>> (2 - 3j)**2
(-5-12j)
>>>


Outra Curiosidade

O Python é um ótima linguagem também para os matemáticos. Nela é possível representar números extremamente grandes ou extremamente pequenos utilizando a notação científica Notação científica - Wikipédia, a enciclopédia livre . Vamos a alguns exemplos:
Código python:
>>> 2e10
20000000000.0
>>> 5e-3
0.0050000000000000001
>>>

Para imprimir números em notação científica basta usar o identificador %e na formatação:
Código python:
>>> x = 100000
>>> y = 0.00001
>>> print 'Numero grande %.2e\nNumero pequeno %.2e'%(x, y)
Numero grande 1.00e+05
Numero pequeno 1.00e-05
>>>

Lembrando que o '.2', entre o '%' e 'e', define que serão utilizadas somente duas casas decimais de precisão.

Até a próxima pessoal...


[Curso de Python] Tipos Built-In - Parte 1

16 de Outubro de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

Antes de prosseguir leia os artigos anteriores aqui



Estou de volta após um curto período de recesso...

Na última aula comentei novamente sobre os tipos builtins e destaquei alguns que já foram abordados nesse curso. A partir de hoje começa uma série de posts explorando cada tipo Built-In relevante.

Tipos Built-In - Parte 1




Quando digo "tipos built-in" estou me referindo a tipos de variáveis como int, string e etc. O Python possui diversos tipos, inclusive possui tipos que não são utilizados comumente durante o desenvolvimento de programas. Abaixo segue uma listagem de todos os tipos buit-in do Python:
  • None;
  • NotImplemented;
  • Ellipsis;
  • Numericos:
    • int;
    • long;
    • float;
    • bool;
    • complex;
  • Sequências Imutáveis:
    • str;
    • unicode;
    • tuple;
  • Sequências Mutáveis:
    • list;
    • bytearray;
  • Sets:
    • set;
    • frozenset;
  • Mapeamentos:
    • dict;
  • slice;
  • callable;
  • file;

Como comentado, muitos desses tipos não são utilizados durante o desenvolvimento de programas, mas podem vir a ser úteis portanto, é bom conhece-los.


None

Começando do topo da lista temos o tipo None. O None é o vazio do Python, geralmente utilizado para inicializar variáveis. O valor booleano do None é false, dessa forma podemos testar se uma variável está vazia ou não:

Código python:
>>> x = None
>>> print x
None
>>> if x == True:
...  print 'none e true'
... else:
...  print 'none e false'
...
none e false
>>>

Para simplificar o if e tornar o código mais legível podemos simplesmente escrever da seguinte forma:
Código python:
 
>>> x = None
>>> if x:
...  print 'none e true'
... else:
...  print 'none e false'
...
none e false
>>>

O None também é retornado quando uma função não retorna nenhum valor explicitamente. Abaixo um exemplo:

Código python:
>>> def teste():
...  print 'funcao teste'
...
>>>
>>> y = teste()
funcao teste
>>> print y
None
>>>


NotImplemented

Em seguida temos o tipo NotImplemented. Esta constante é utilizado para controlar novas implementações. Quando uma nova função/método está sendo implementada mas não está terminada ela retornará o valor NotImplemented. Só por curiosidade, o valor booleano de NotImplemented é True:

Código python:
>>> NotImplemented
NotImplemented
>>> print NotImplemented
NotImplemented
>>> type(NotImplemented)
<type 'NotImplementedType'>
>>> bool(NotImplemented)
True
>>>



Ellipsis...

O Ellipsis também é uma constante, ela representa o simbolo '...' utilizado no slicing de objetos criados pelo programador. Nativamente o Ellipsis só é suportado por objetos da biblioteca NumPy, voltada para cálculos e computação científica. Esse é um dos objetos mais estranhos que eu já vi no Python:

Código python:
>>> Ellipsis
Ellipsis
>>> print Ellipsis
Ellipsis
>>> ...
  File "<stdin>", line 1
    ...
    ^
SyntaxError: invalid syntax
>>>

A Ellipsis só parece funcionar dentro do slicing. Segue um exemplo simples para demonstrar a existência do Ellipsis e possíveis aplicações:

Código python:
>>> class Teste:
...     def __getitem__(self, pedacos):
...             print 'pedaços:',pedacos
... 
>>> 
>>> 
>>> x = Teste()
>>> x[1]
pedaços: 1
>>> x[1:2]
pedaços: slice(1, 2, None)
>>> x[1, ...]
pedaços: (1, Ellipsis)
>>> x[1, ..., 4:7]
pedaços: (1, Ellipsis, slice(4, 7, None))
>>>

Este exemplo aborda vário conhecimentos avançados como orientação a objeto e métodos especiais, mas espero que tenha sido claro o suficiente. Este exemplo é bem abrangente, ele mostra também o tipo slice que será comentado futuramente.

Com o exemplo acima podemos ver que o simbolo '...' foi substituído pelo nome Ellipsis. A Ellipsis pode ter diversas implementações, tudo depende do ponto de vista do programador. Podemos, por exemplo, dizer que [1, ...] irá retornar todos os objetos de uma lista com exceção do objeto de índice 1.

Por hoje é só pessoal...


Estou de volta!

15 de Outubro de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

Olá pessoal, voltei!

Clique na imagem para uma versão maior

Nome:	         rush-ticket-stage.JPG
Visualizações:	12
Tamanho: 	64,1 KB
ID:      	15134


O show começou pontualmente às 21:30. Como é padrão do Rush, este show teve a duração de incríveis 3 horas. O público foi de 40 mil pessoas, o que por um lado foi bom - pois não teve confusão - mas por outro foi ruim, pois o Rush teve um público de 62 mil pessoas nesse mesmo estádio no ano de 2002.

Pra mim o show teve um momento dramático. Próximo ao fim da música YYZ Neil Peart (o baterista) jogou a baqueta pra cima mas não conseguiu pega-la de volta... logo após a virada mais difícil da música. Claro, ele é "The Professor" (como os outros integrantes do Rush se referem a ele), sendo assim ele conseguiu continuar sem prejuízos à música. O mais curioso é que ele fez isso várias vezes no show e essa foi a única vez que ele não deu certo...

Setlist do show:
Set 1:
01. Video de introdução
02. The Spirit of Radio
03. Time Stand Still
04. Presto
05. Stick It Out
06. Workin' Them Angels
07. Leave That Thing Alone!
08. Faithless
09. BU2B
10. Freewill
11. Marathon
12. Subdivisions
Intervalo
Set 2:
13. Tom Sawyer (com introdução em vídeo)
14. Red Barchetta
15. YYZ
16. Limelight
17. The Camera Eye
18. Witch Hunt
19. Vital Signs
20. Caravan
21. Drum Solo
22. Closer to the Heart
22. 2112 Overture/Temples of Syrinx
23. Far Cry
Bis
24. La Villa Strangiato
25. Working Man
26. Video de fechamento.



Aviso aos navegantes...

6 de Outubro de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

Olá pessoal, este é um post curto só pra avisar que vou desaparecer por alguns dias. Motivo?! Muito justificável eu diria:

Clique na imagem para uma versão maior

Nome:	         rush.JPG
Visualizações:	22
Tamanho: 	177,6 KB
ID:      	14843


O show é em São Paulo como podem ver, eu sou de Brasília. Logo peguei uns dias no trabalho e vou aproveitar pra passear :). Então estarei longe por alguns dias! Mas é por um bom motivo!

Aproveitando o assunto... esse ano está sendo muito favorável para os "roqueiros dos velhos tempos" (A banda Rush foi formada em 1968). Semana passada fui a outro show de uma banda histórica, só que aqui em Brasília:

Clique na imagem para uma versão maior

Nome:	         scorpions.jpg
Visualizações:	14
Tamanho: 	188,5 KB
ID:      	14844



Turnê "Sting In The Tail" (turne de despedida) do Scorpions, banda formada em 1965! Como eu poderia perder?!

Voltando ao Rush. Para quem não conhece, é o trio de rock mais incrível que eu conheço:



Definitivamente Neil Peart é o melhor baterista do mundo e Geddy Lee é o melhor baixista de rock.



[Curso de Pyhon] Introdução ao Módulo Built-in

5 de Outubro de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

Antes de prosseguir leia os artigos anteriores aqui



Olá pessoal! Fechamos os conceitos de variáveis globais e locais, hoje vamos iniciar o estudo do escopo built-in.

Escopo Built-In



Inicialmente vamos entender o que vem a ser built-in. Built-in é a palavra do inglês usada para se referenciar coisas "embutidas", ou seja, inclusas por padrão - nesse caso - no Python.

Dessa forma, o escopo built-in engloba funções, classes, tipos de variáveis, variáveis primitivas do Python e até erros.

Diferente dos escopos local e global não existe uma função para consultar "o seu conteúdo". Isso ocorre porque o conteúdo do escopo built-in é invocado ao carregar o Python. Para isso o escopo built-in está definido dentro de um módulo, referenciado pelo nome __builtins__. Podemos comprovar isso com as seguintes linhas:
Código python:
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'i']
>>> __builtins__
<module '__builtin__' (built-in)>
>>>

Para verificar o conteúdo de um modulo devemos usar o comando dir. Segue a lista do conteúdo da biblioteca built-in:
Código python:
>>> dir(__builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException',
'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError', 'Ellipsis',
'EnvironmentError', 'Exception', 'False', 'FloatingPointError', 'FutureWarning',
'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError',
'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError',
'NameError', 'None', 'NotImplemented', 'NotImplementedError', 'OSError',
'OverflowError', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError',
'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError',
'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'True', 'TypeError',
'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError',
'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError',
'Warning', 'ZeroDivisionError', '_', '__debug__', '__doc__', '__import__',
'__name__', '__package__', 'abs', 'all', 'any', 'apply', 'basestring', 'bin',
'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'cmp',
'coerce', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict',
'dir', 'divmod', 'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter',
'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help',
'hex', 'id', 'input', 'int', 'intern', 'isinstance', 'issubclass', 'iter',
'len', 'license', 'list', 'locals', 'long', 'map', 'max', 'min', 'next',
'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range',
'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr',
'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type',
'unichr', 'unicode', 'vars', 'xrange', 'zip']
>>>

Se olharmos com atenção esse conteúdo podemos ver que conhecemos diversas palavras listadas, vou ressaltar algumas:
  • bool;
  • complex;
  • dict;
  • dir;
  • float;
  • globals;
  • help;
  • id;
  • input;
  • int;
  • iter;
  • len;
  • list;
  • locals;
  • long;
  • print;
  • range;
  • raw_input;
  • tuple;
  • type.
Todos esses já foram citados aqui nesse curso. Na próxima aula vou dissertar sobre elas e mais algumas que valem a pena ressaltar.

Até a próxima...


Tags deste artigo: python linux arch programação desenvolvimento vim