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.

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...


[Curso de Python] Escopo de Variáveis Parte 3

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

Antes de prosseguir leia os artigos anteriores aqui



Olá pessoal! Na última aula vimos mais sobre variáveis globais, hoje vamos ver um pouco sobre as variáveis locais e onde elas ocorrem.

Escopo de Variáveis Parte 3



Como eu disse anteriormente as variáveis globais (de escopo global) podem ser utilizadas em qualquer parte do código. Para acesso como "leitura" da variável global basta referenciá-la normalmente. Já para "escrever" na variável é necessário "declara-la" como global utilizando o comando global.

Muitas pessoas tem dificuldade de entender o escopo global. Eu costumo dizer que para entender e saber usar o escopo global você tem que entender o escopo local. Mas então porque eu não expliquei o escopo local antes? Simples, porque para entender o escopo local você precisa ter passado pelo escopo global.

O que eu quis dizer é que sesse conteúdo é algo que você não consegue estudar linearmente. Depois de estudar o escopo local é altamente recomendado que vocês voltem e estudem o escopo global.

Mas o que é o escopo de variáveis locais? Escopo local (ou variáveis locais) são variáveis que existem somente "dentro" de um certo trecho de código. Diferentemente das variáveis globais, uma variável local só pode ser acessada pelo trecho de código "responsável" por ela. Na aula passada eu havia comentado que existe apenas um escopo global, mas podem existir diversos escopos locais.

Mas então, que trechos de códigos "criam" escopos locais? Somente funções e métodos de classe. Vamos ver como consultar o escopo de variáveis locais do seu programa:

Código python:
>>> x = 1
>>> texto = 'teste'
>>>
>>> locals().keys()
['__builtins__', 'texto', '__package__', 'x', '__name__', '__doc__']
>>>
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, 'texto': 'teste', '__package
__': None, 'x': 1, '__name__': '__main__', '__doc__': None}
>>>

Como podemos ver o escopo local é idêntico ao escopo global pois não estamos dentro de uma função. Segue a comparação:
Código python:
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, 'texto': 'teste', '__package
__': None, 'x': 1, '__name__': '__main__', '__doc__': None}
>>>
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, 'texto': 'teste', '__package
__': None, 'x': 1, '__name__': '__main__', '__doc__': None}
>>>

Como dito, o escopo local será diferenciado somente dentro de funções e métodos de classe. Como ainda não vimos orientação a objeto, utilizarei somente funções nos exemplos.

Código python:
>>> teste()
>>> def teste():
...  print locals()
...
>>>
>>> teste()
{}
>>>


Como podemos ver, o retorno da função locals() dentro da função teste retorna um dicionário vazio. Vamos ver aquele exemplo da aula passada:


Código python:
>>> x = 1
>>> def altera_x():
...     print 'variaveis locais:',locals()
...     x = 10
...     print 'variaveis locais:',locals()
...
>>> print 'x é',x
x é 1
>>> altera_x()
variaveis locais: {}
variaveis locais: {'x': 10}
>>> print 'x ainda é',x
x ainda é 1
>>>


Como podemos ver, depois de "tentar" atribuir um valor ao x, é criada uma variável local. Essa variável só existe dentro da função, ela é destruída assim que a função acaba de ser executada. Dessa forma temos que tomar cuidados extra ao criar variáveis dentro de funções e métodos de classes, pois eles estão restritos àquele trecho de código.

Se sua intenção é "repassar algo" obtido dentro de uma função para outro trecho de código, você pode usar variáveis globais, mas isso é altamente desencorajado e considerado uma má prática. O método correto é você retornar o valor de interesse.

É isso ai pessoal, pratiquem esses conceitos pois eles são essenciais. Até mais...


[Curso de Python] Escopo de Variáveis Parte 2

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

Antes de prosseguir leia os artigos anteriores aqui



Olá pessoal! Na última aula tivemos uma breve introdução sobre os escopo de variáveis, hoje veremos mais características do escopo global.


Escopo de Variáveis Parte 2



O escopo global vale para todo o programa e pode ser acessado por qualquer trecho de código. Vamos ver alguns exemplos de saída do comando globals() em determinadas estruturadas de código:

Código python:
>>> x = 1
>>>
>>> def teste():
...     print globals().keys()
...
>>>
>>> teste()
['__builtins__', '__package__', 'teste', 'x', '__name__', '__doc__']
>>>

Como podemos ver, ao chamar a função o comando globals mostra a variável x criada "fora" da função. Logo deduzimos que podemos acessar a variável, conseqüentemente achamos que podemos alterar as variáveis. Vamos a um exemplo:

Código python:
>>> x = 1
>>>
>>> def mostra_x():
...     print 'x dentro da funcao:',x
...
>>> altera_x()
x dentro da funcao: 1

Como imaginamos, o x foi acessado com sucesso de dentro da variável, agora vamos ver um exemplo de alteração da variável x:

Código python:
>>> x = 1
>>>
>>> def altera_x():
...     x = 10
...     print 'x:',x
...
>>> print 'x:',x
x: 1
>>> altera_x()
x: 10
>>> print 'x:',x
x: 1
>>>

Aqui começamos a nos confundir, se eu consegui mostrar o valor de x, porque ao alterar o x, ele continua como 1. Pensando um pouco mais, como dentro da função eu consegui atribuir o valor 10 à variável x? Novamente, tudo isso é culpa do escopo. Vamos usar o comando globals() para visualizar a variável x:

Código python:
>>> x = 1
>>> def altera_x():
...     print globals()
...     x = 10
...     print '\nx alterado:',x
...     print '\n'
...     print globals()
...
>>> print 'x:',x
x: 1
>>> altera_x()
{'__builtins__': <module '__builtin__' (built-in)>, '__package__': None, 'teste'
: <function teste at 0x00B410F0>, 'x': 1, '__name__': '__main__', 'altera_x': <f
unction altera_x at 0x00B41030>, '__doc__': None}
 
x alterado: 10
 
{'__builtins__': <module '__builtin__' (built-in)>, '__package__': None, 'teste'
: <function teste at 0x00B410F0>, 'x': 1, '__name__': '__main__', 'altera_x': <f
unction altera_x at 0x00B41030>, '__doc__': None}
>>>
>>> print 'x:',x
x: 1
>>>

Pronto, agora podemos ver que no início da função o valor de x é 1 (saída da função globals()). Quando alteramos o valor de x, chamamos o print que mostra o valor de x como sendo 10. Na segunda chamada da função globals podemos ver que x ainda é 1. Então fica a pergunta, que x é aquele que alteramos? A resposta é simples: é um x local!

Sim, isso mesmo! É um x local. Complicou, ne?! Por enquanto vamos deixar, isso será explicado com mais calma quando falarmos de escopo local. Vamos apenas aprender como alterar o valor do x global:


Código python:
>>> x = 1
>>>
>>> def altera_x():
...     global x
...     print 'valor global:',x
...     x = 10
...     print 'valor global:',x
...
>>>
>>> print 'x:',x
x: 1
>>> altera_x()
valor global: 1
valor global: 10
>>> print 'x:',x
x: 10
>>>

Pronto, utilizando a chamada global x podemos "ter acesso" ao valor global de x e alterá-lo.

Ok, por hoje é só pessoal. Com certeza deve ter muita gente perdida nessa aula. Vamos deixar esse conceito "assentar" na mente e continuaremos na próxima aula! Até mais...


[Curso de Python] Escopo de Variáveis Parte 1

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

Antes de prosseguir leia os artigos anteriores aqui



Olá pessoal! Agora estamos entrando em um assunto muito mais "pesado". Vamos logo ao conteúdo!

Escopo de Variáveis Parte 1



Inicialmente vamos entender o que é escopo. Escopo é o mesmo que extensão, alcance, âmbito e/ou competência. Dessa forma o escopo de uma variável é a "área" na qual ela pode ser utilizada.

O Python tem 3 escopos principais:
  • locais;
  • globais;
  • built-ins.

O escopo mais simples de se entender é o global. Existe um e apenas um escopo global. Você pode consultar o escopo global do seu programa usando a função globlas():

Código:
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__d
oc__': None, '__package__': None}
A função globals() retorna um dicionário contendo diversos itens. Como o dicionário é composto por chaves e valores ele nos apresenta o nome do item e o seu respectivo valor. Para facilitar a visualização, vou usar um método do dicionário que imprime somente suas chaves, o método keys():

Código:
>>> globals().keys()
['__builtins__', '__package__', '__name__', '__doc__']
>>>
Como podemos ver o nosso escopo global apresenta 4 "itens" que sempre estarão presentes: __builtins__, __main__, __doc__ e __package__.

No momento não vou me ater a explicar o que seriam esses nomes pois eles serão entendidos à medida que vemos outros conteúdos, vamos focar no momento no que o globals representa, para isso vou mostrar um outro exemplo:

Código:
>>> globals().keys()
['__builtins__', '__name__', '__doc__', '__package__']
>>> x = 12
>>> texto = 'teste'
>>> lista = [1, 2, 3]
>>> globals().keys()
['__builtins__', 'texto', '__package__', 'x', '__name__', 'lista', '__doc__']
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, 'texto': 'teste', '__package
__': None, 'x': 12, '__name__': '__main__', 'lista': [1, 2, 3], '__doc__': None}

>>>
Conforme apresentado, a função globals() agora apresenta as variáveis criadas (x, texto e lista). Podemos ver que o nome das variáveis são as chaves dos dicionários enquanto os valores das variáveis são os itens vinculados às chaves. Com isso podemos "chamar" as variáveis utilizando o dicionário:

Código:
>>> globals()['x']
12
>>> globals()['texto']
'teste'
>>> globals()['lista']
[1, 2, 3]
>>>
Claro, isso não tem utilidade nenhuma para nós no momento, mas é sempre bom ressaltar as possibilidades. Vamos criar agora algumas funções:

Código:
>>> def funcao_1():
...     print 'Estou na função 1'
...
>>> def funcao_2():
...     print 'Estou na função 2'
...
>>>
>>> globals().keys()
['funcao_2', '__builtins__', 'texto', '__package__', 'x', '__name__', 'funcao_1'
, 'lista', '__doc__']
>>>
Podemos ver que o comando globals mostra também as funções existentes no programa. Isso pode ser útil caso você precise descobrir se uma dada função já existe no seu programa. Vamos ver como as funções são apresentadas nos itens do dicionário retornado pelo comando globals():
Código:
>>> globals()
{'funcao_2': <function funcao_2 at 0x00B41130>, '__builtins__': <module '__built
in__' (built-in)>, 'texto': 'teste', '__package__': None, 'x': 12, '__name__': '
__main__', 'funcao_1': <function funcao_1 at 0x00B41030>, 'lista': [1, 2, 3], '_
_doc__': None}
>>>
Vinculado ao nome da função (por exemplo a funcao_2) temos o endereço de memória que a função está ocupando: <function funcao_2 at 0x00B41130>. Como se pode imaginar, é possível chamar a função dada o seu nome em string:
Código:
>>> globals()['funcao_1']
<function funcao_1 at 0x00B41030>
>>> globals()['funcao_1']()
Estou na função 1
>>>
Por enquanto vamos parar por aqui e deixar que todos se acostumem com a idéia. Em seguida vamos utilizar essa função para podermos descobrir a "abrangência" de uma função e/ou variável.

Até mais...


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