Clousure x função aninhada

68 views
Skip to first unread message

jmarcell...@ufpi.edu.br

unread,
Mar 25, 2017, 12:33:57 AM3/25/17
to Python Brasil
Olá a todos. Tenho uma dúvida meio boba mas vai assim mesmo:

Qual a diferença entre clousure e função aninhada?

Juan Lopes

unread,
Mar 25, 2017, 6:50:58 PM3/25/17
to python...@googlegroups.com
Uma closure é definida por uma função que referencia variáveis de algum escopo léxico a qual ela normalmente não teria acesso. A closure de fato é o par composto pela função e o escopo que ela referencia. Uma função aninhada pode estar numa closure, se ela referenciar variáveis da função que a definiu. Neste caso, as variáveis também fariam parte da closure.

Pela sua pergunta, imagino que você queria saber sobre a diferença entre funções lambda e funções aninhadas. Funções lambda geralmente são confundidas com closures, pois normalmente elas estão em closures, mas são coisas diferentes. Uma função lambda é simplesmente uma função anônima. Ela tem esse nome por analogia ao Lambda Calculus, sistema formal desenvolvido pelo Alonzo Church (o mesmo da Church-Turing hypotesis). O sistema é definido pela composição de funções anônimas para expressar qualquer computação que uma máquina de Turing também conseguiria expressar. Por isso, em muitas linguagens as funções anônimas são chamadas de funções lambda.

Do ponto de vista prático, em Python, a maior diferença entre funções anônimas e funções aninhadas é que nas anônimas não é possível representar qualquer statement, somente expressões. Não é possível, por exemplo, escrever um "if" ou um laço "for". Por esse motivo, as funções lambda geralmente são chamadas de "expressões lambda".

2017-03-25 1:33 GMT-03:00 <jmarcell...@ufpi.edu.br>:
Olá a todos. Tenho uma dúvida meio boba  mas vai assim mesmo:

Qual a diferença entre clousure e função aninhada?

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar

<*> Para visitar o site do grupo na web, acesse:
    http://groups.google.com/group/python-brasil

<*> Para sair deste grupo, envie um e-mail para:
    python-brasil+unsubscribe@googlegroups.com

---
Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/d/optout.

--

jmarcell...@ufpi.edu.br

unread,
Mar 27, 2017, 12:33:26 PM3/27/17
to Python Brasil
Olá Juan

Boa explicação, sobre o assunto. Minha dúvida é porque funções aninhada são muito parecidas com clousures e em alguns texto até se confunde com o assunto - e acho que é também a dúvida de alguns aqui. Pode colocar um exemplo para ficar ficar mais claro? 


Em sábado, 25 de março de 2017 19:50:58 UTC-3, Juan Lopes escreveu:
Uma closure é definida por uma função que referencia variáveis de algum escopo léxico a qual ela normalmente não teria acesso. A closure de fato é o par composto pela função e o escopo que ela referencia. Uma função aninhada pode estar numa closure, se ela referenciar variáveis da função que a definiu. Neste caso, as variáveis também fariam parte da closure.

Pela sua pergunta, imagino que você queria saber sobre a diferença entre funções lambda e funções aninhadas. Funções lambda geralmente são confundidas com closures, pois normalmente elas estão em closures, mas são coisas diferentes. Uma função lambda é simplesmente uma função anônima. Ela tem esse nome por analogia ao Lambda Calculus, sistema formal desenvolvido pelo Alonzo Church (o mesmo da Church-Turing hypotesis). O sistema é definido pela composição de funções anônimas para expressar qualquer computação que uma máquina de Turing também conseguiria expressar. Por isso, em muitas linguagens as funções anônimas são chamadas de funções lambda.

Do ponto de vista prático, em Python, a maior diferença entre funções anônimas e funções aninhadas é que nas anônimas não é possível representar qualquer statement, somente expressões. Não é possível, por exemplo, escrever um "if" ou um laço "for". Por esse motivo, as funções lambda geralmente são chamadas de "expressões lambda".
2017-03-25 1:33 GMT-03:00 <jmarcell...@ufpi.edu.br>:
Olá a todos. Tenho uma dúvida meio boba  mas vai assim mesmo:

Qual a diferença entre clousure e função aninhada?

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar

<*> Para visitar o site do grupo na web, acesse:
    http://groups.google.com/group/python-brasil

<*> Para sair deste grupo, envie um e-mail para:


---
Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages