Instalando pyOpenSSL no MAC

O comando campeão de instalação da biblioteca pyOpenSSL no macos é:

pip install pyOpenSSL

Mas você pode obter um de compilação:

/usr/libexec/gcc/powerpc-apple-darwin10/4.2.1/as: assembler (/usr/bin/../libexec/gcc/darwin/ppc/as or /usr/bin/../local/libexec/gcc/darwin/ppc/as) for architecture ppc not installed
Installed assemblers are:
/usr/bin/../libexec/gcc/darwin/x86_64/as for architecture x86_64
/usr/bin/../libexec/gcc/darwin/i386/as for architecture i386
OpenSSL/crypto/crypto.c:898: fatal error: error writing to -: Broken pipe
compilation terminated.
lipo: can't open input file: /var/folders/xk/xkd9kCNUEP4t7aq7D4DMB++++TM/-Tmp-//ccyDjnct.out (No such file or directory)
error: command 'gcc-4.2' failed with exit status 1

Isto ocorre porque ao compilar a variável de ambiente ou não está configurada ou está configurada errada e o build do setup.py vai usar essa variável para gerar os binários.

Observe, que tem um erro, dizendo que a arquitetura PPC não está instalada. Até certo tempo a arquitetura dos computadores da APPLE eram PPC, Power PC. Atualmente são intel, ou seja, i386 ou x86_64 (o padrão é x84_64)

Para ter sucesso na instalação do pyOpenSSL você precisa mudar a o archflags. Faca:

export ARCHFLAGS="-arch i386 -arch x86_64"

Então, tente instalar novamente o pacote pyOpenSSL: pip install pyOpenSSL

então:

$ python
Python 2.6.1 (r261:67515, Aug 2 2010, 20:10:18)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from OpenSSL import SSL
>>>

Python – Dividindo uma lista em n partes

Frequentemente eu uso esse código, então ao invés de ir no código antigo vou neste post.
Basicamente o que eu quero é o seguinte: Tenho uma lista e quero dividir em n partes quase-iguais. Explico

Suponha a lista [1,2,3,4,5,6,7,8,9,10] quero dividir a lista em 5 partes.

A divisão da lista resultaria em [1,2], [3,4], [5,6], [7,8], [9,10]

Ok, isso é chato de fazer…

Mas vamos ao código.

#A lista
lista = [1,2,3,4,5,6,7,8,9,10]

#quebrando tudo
def quebrador(lista,partes):
    return list(lista[ parte*len(lista)/partes:(parte+1)*len(lista)/partes ] for parte in range(partes))
print quebrador(lista,5)
print quebrador(lista,2)
print quebrador(lista,10)
print quebrador(lista,0)

É possível que ocorrram variações para o tipo de lista.

Python e lambda

Sabe lambda? Lambda é algo muito legal. Com lambda você pode criar em tempo de execução funções e fazer algumas graças.

Vejamos algo bonito com lambda. Suponha a função fatorial.

A função fatorial é definida tal que dado um número x o fatorial deste número é:

x*(x-n) com n variando de (x-1) até 1.

Logo podemos traduzir num código python:

def fatorial(x):
 if x<=1:
   return 1
 else:
   return x*fatorial(x-1)

Esse código usa recursão, espero que você saiba o que é recursão… ;)

Bom, com lambda esse mesmo código pode ter apenas uma linha, duvida?

fatorial = lambda x: 1 if x <=1 else x*fatorial(x-1)

Definimos em fatorial uma função que executa o calculo de um fatorial de um dado número x.

Agora abra o seu interpratador python copie e cole o código para testar. Né lindo?

Python tanto na versão 2 quanto na versão 3 define lambda com um atalho para criação de funções. A sintaxe é definida assim:

lambda_form  ::= "lambda" [parameter_list]: expression
old_lambda_form ::=  "lambda" [parameter_list]: old_expression

Vou ler para você: uma expressão lambda é formada pela palavra reservada lambda seguida por uma lista (não o objeto lista) de parametros seperada por “:” e a expressão.

No nosso código a cima, fatorial é o nome da expressão lambda. O python sabe que a função é um lambda porque você disse isso usando a string lambda logo no inicio da expressão.

O x é o parametro. Se você quisesse passar mais parametros, bastava separa-lo por virgulas. Assim:

funcao = lambda x,y,z: x+y+z

pergunta, qual o retorno de funcao(1,2,3) ?

Agora a parte mais difícil, a expressão.

A expressão é como você vai manipular os parametros para ter um retorno. Com lambda não é necessário por a palavra reservada return.

Essa expressão só pode ser de três formas:

  • Uma comando de uma linha (x+1)
  • outra expressão lambda.
  • Ou uma expressão condicional. (incluem testes de lógica [or, and, not] )

No fatorial eu usei uma expressão condicional. Na função eu usei uma expressão de uma linha. E poderia usar outra expressão lambda.

Mas para memorizar, você deve escrever a sua expressão sempre com uma linha.

Você pode fazer uso de recursão e uso avançados de expressão.