• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

djthyrax

[PyTeam] Aspectos funcionais do Python

15 mensagens neste tópico

Fiquei com uma dor de cabeça só de tentar compreender os exemplos no fundo :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

   9 # Mandelbrot set
  10 print (lambda Ru,Ro,Iu,Io,IM,Sx,Sy:reduce(lambda x,y:x+y,map(lambda y,
  11 Iu=Iu,Io=Io,Ru=Ru,Ro=Ro,Sy=Sy,L=lambda yc,Iu=Iu,Io=Io,Ru=Ru,Ro=Ro,i=IM,
  12 Sx=Sx,Sy=Sy:reduce(lambda x,y:x+y,map(lambda x,xc=Ru,yc=yc,Ru=Ru,Ro=Ro,
  13 i=i,Sx=Sx,F=lambda xc,yc,x,y,k,f=lambda xc,yc,x,y,k,f:(k<=0)or (x*x+y*y
  14 >=4.0) or 1+f(xc,yc,x*x-y*y+xc,2.0*x*y+yc,k-1,f):f(xc,yc,x,y,k,f):chr(
  15 64+F(Ru+x*(Ro-Ru)/Sx,yc,0,0,i)),range(Sx))):L(Iu+y*(Io-Iu)/Sy),range(Sy
  16 ))))(-2.1, 0.7, -1.2, 1.2, 30, 80, 24)

Vão me perdoar a expressão.... mas p*** que pariu mais à legibilidade de código do Python :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

   9 # Mandelbrot set
  10 print (lambda Ru,Ro,Iu,Io,IM,Sx,Sy:reduce(lambda x,y:x+y,map(lambda y,
  11 Iu=Iu,Io=Io,Ru=Ru,Ro=Ro,Sy=Sy,L=lambda yc,Iu=Iu,Io=Io,Ru=Ru,Ro=Ro,i=IM,
  12 Sx=Sx,Sy=Sy:reduce(lambda x,y:x+y,map(lambda x,xc=Ru,yc=yc,Ru=Ru,Ro=Ro,
  13 i=i,Sx=Sx,F=lambda xc,yc,x,y,k,f=lambda xc,yc,x,y,k,f:(k<=0)or (x*x+y*y
  14 >=4.0) or 1+f(xc,yc,x*x-y*y+xc,2.0*x*y+yc,k-1,f):f(xc,yc,x,y,k,f):chr(
  15 64+F(Ru+x*(Ro-Ru)/Sx,yc,0,0,i)),range(Sx))):L(Iu+y*(Io-Iu)/Sy),range(Sy
  16 ))))(-2.1, 0.7, -1.2, 1.2, 30, 80, 24)

Vão me perdoar a expressão.... mas p*** que pariu mais à legibilidade de código do Python :D

# Mandelbrot set
print (lambda Ru,Ro,Iu,Io,IM,Sx,Sy:
        reduce(lambda x,y: x+y, map(lambda y, Iu=Iu,Io=Io,Ru=Ru,Ro=Ro,Sy=Sy,L=lambda yc,Iu=Iu,Io=Io,Ru=Ru,Ro=Ro,i=IM, Sx=Sx, Sy = Sy: 
               reduce(
                     lambda x,y:x+y,map(lambda x, xc=Ru, yc=yc, Ru=Ru, Ro=Ro, i=i,Sx=Sx,F=lambda xc,yc,x,y,k,f=lambda xc,yc,x,y,k,f:
                                 (k<=0)or (x*x+y*y >=4.0) or 1+f(xc,yc,x*x-y*y+xc,2.0*x*y+yc,k-1,f):
                                                f(xc,yc,x,y,k,f):chr(64+F(Ru+x*(Ro-Ru)/Sx,yc,0,0,i)),range(Sx))):
                                                          L(Iu+y*(Io-Iu)/Sy),range(Sy))))(-2.1, 0.7, -1.2, 1.2, 30, 80, 24)

É capaz de estar um pouco mais legível :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já só preciso de 2 Brufen em vez de um só para a dor de cabeça :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:D pois , vocês que codam python ficaram confusos, imaginem eu :D

oh djthyrax já é o segundo ou terceiro tópico que abres depois de me tirares umas dúvidas :D ao menos fiz-te pesquisar :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

oh djthyrax já é o segundo ou terceiro tópico que abres depois de me tirares umas dúvidas :D ao menos fiz-te pesquisar :D

Epá, alguma coisa tem de servir de motivação... :D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Que giro, não conhecia isto. Quando tiver tempo, olho isto com atenção.

Fiquei com uma dor de cabeça só de tentar compreender os exemplos no fundo :)

Eu nem tentei! :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, ao deambular pela Internet encontrei esta página. Achei interessante porque usa o Python de um modo funcional, apesar de não fazer nenhuma referência às funções ditas funcionais (map, reduce, filter). O que é uma boa forma de mostrar que programar funcionalmente passa por muito mais que usar as ditas funções.

Pysec: Monadic Combinatoric Parsing in Python (aka Parsec in Python)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, as funcoes lambda foram uma coisa tirada do lisp. Quanto a isso nada contra. Quanto à sua inutilidade, que seja uma questao de preferencia do programador.

Mas agora uma duvida minha: alguem me explica porque raio é que sempre que se fala em programacao funcional em python lá vêm as funcoes lambda?

É que sinceramente nao estou a perceber em que é que chamar uma funcao lambda é mais "funcional" do que chamar uma funcao normal.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É que sinceramente nao estou a perceber em que é que chamar uma funcao lambda é mais "funcional" do que chamar uma funcao normal.

Não é. Funções lambda foi dado esse nome por causa das linguagens funcionais, que provêm do lambda calculus.

Lambda Calculus -> uma visão funcional.

Turing machine -> uma visão imperativa.

Python deu esse nome por questões históricas (penso eu). Porque em Python funções lambda é apenas a capacidade de criar funções anónimas (on-the-fly) que é normal nas ditas linguagens funcionais. Mas no Python é exactamente a mesma coisa, que por exemplo em C# delegates.

Como disse no tópico anterior. Programação funcional passa por mais do que usar as ditas funções "funcionais". Programação funcional é um paradigma e como tal tem uma filosofia própria. É a mesma coisa alguém estiver a usar Java, e programar à la C. O facto de estar a usar Java não faz com que esteja a programar OOP.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque em Python funções lambda é apenas a capacidade de criar funções anónimas (on-the-fly) que é normal nas ditas linguagens funcionais.

Tal qual como o create_function() do PHP. :( Tem a grande vantagem de poderes mudar filtros on-the-fly por exemplo, evitando muitos if's e permitindo maior expansibilidade das aplicações com umas 2 ou 3 linhas a mais de código.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou seja, confirma-se que é um mito urbano sem qualquer fundamento.

Nada contra o python, até é uma linguagem que gosto e que é bem moderna. Mas ha demasiados teoricos a escrever coisas sobre python, e depois um diz uma parvoice e vão as outras marias todas atrás a dizer ámen.

Moral da historia... criou-se um monstro em torno de um preciosismo sintatico sem grande importancia e agora anda meio mundo a confundi-lo com "um aspecto funcional" do python.

Mas mesmo esquecendo este caso, recorrer a detalhes de sintaxe para explicar uma aproximacao a um problema segundo um determinado paradigma é desde logo uma coisa sem qualquer sentido.

Em php a funcionalidade que penso que pode dar mais jeito para programar funcionalmente penso ser mesmo as chamadas de funcoes atraves de uma string... estilo:

$nome="aminhafuncao";

$nome();

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em php a funcionalidade que penso que pode dar mais jeito para programar funcionalmente penso ser mesmo as chamadas de funcoes atraves de uma string... estilo:

$nome="aminhafuncao";

$nome();

Isso implica definires a função e nunca a poderes apagar, ao contrário do que acontece com o create_function() do PHP e o lambda do Python.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora