Jump to content
Sign in to follow this  
djthyrax

[PyTeam] Aspectos funcionais do Python

Recommended Posts

djthyrax

Encontrei através duma pesquisa para o joaoqalves um artigo sobre os aspectos funcionais do Python que finalmente me ensinou o que é o map/reduce/filter/zip (o lambda já conhecia :D ). :D

Aqui fica o link:

http://www.pythonbrasil.com.br/moin.cgi/PythonFuncional


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
rolando2424

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


Não me responsabilizo por qualquer dano ocorrido no seguimento dos meus conselhos. Prontos, a minha pessoa está oficialmente protegida legalmente :D

Share this post


Link to post
Share on other sites
JoaoRodrigues

   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

Share this post


Link to post
Share on other sites
djthyrax

   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


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
joaoqalves

: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 :)


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!Queres estar na moda? Utiliza a pesquisa e evita criar um tópico desnecessário.

Share this post


Link to post
Share on other sites
djthyrax

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

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
Tharis

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! :)

Share this post


Link to post
Share on other sites
Betovsky

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)


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
pedrotuga

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.

Share this post


Link to post
Share on other sites
Betovsky

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


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
djthyrax

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.

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
pedrotuga

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();

Share this post


Link to post
Share on other sites
djthyrax

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.

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.