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

Sir Pereira

Porquê Python?

39 mensagens neste tópico

Boas pessoal,

já por diversas vezes que me iniciei na aprendizagem de uma linguagem (caso do C/C++/C#/Java), mas depois secalhar pela linguagem não me ter cativado ou coisa assim do género deixo de a praticar e regresso sempre a casa (VB.Net).

Gostaria de saber algumas features e qual o tipo de aplicações (e jogos se possível) é possível criar com esta linguagem, para talvez fazer uma nova tentativa de aprendizagem ;)

Cumprimentos :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes criar quase tudo com Python. "Google it" e vais encontrar muita coisa.

Uso o Python em particular para "colar" sistemas, ou seja, para gerar informação ou input para um sistema a partir do output de outro sistema. É uma linguagem de script que me permite uma flexibilidade muito grande na manipulação de informação, é muito fácil e rápido ler um XML e gerar um Excel ou aceder a um site e recolher informação que depois injecto numa base de dados, ou simplesmente sincronizar ficheiros entre dois sistemas...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes criar quase tudo com Python. "Google it" e vais encontrar muita coisa.

Uso o Python em particular para "colar" sistemas, ou seja, para gerar informação ou input para um sistema a partir do output de outro sistema. É uma linguagem de script que me permite uma flexibilidade muito grande na manipulação de informação, é muito fácil e rápido ler um XML e gerar um Excel ou aceder a um site e recolher informação que depois injecto numa base de dados, ou simplesmente sincronizar ficheiros entre dois sistemas...

Vou googlar, obrigado.

Já agora, tem alguma interface de edição gráfica? Ou é tudo feito por código?

EDIT: Tive a ver exemplos e isso, e pareceu-me um pouco complicado :shocking:

Outra coisa, isto é para aplicações web ou software?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Outra coisa, isto é para aplicações web ou software?

Ambos.

Podes fazer tudo por código, mas também tens editores para interfaces.

Porque achas complicado?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ambos.

Podes fazer tudo por código, mas também tens editores para interfaces.

Porque achas complicado?

Epah, essa parte do puder fazer tudo parece muito interessante...

Podes dizer-me uns exemplos de editores?

Não sei, pareceu-me. Deve ter sido a primeira impressão e estar mais habituada às linguagens .Net :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

De interfaces? wxGlade, Glade.

Para desenvolveres, tens o IDLE (que vem com o Python) que tem uma shell para testares comandos, mas não é nada de especial para desenvolveres normalmente. Eu uso o Geany, que considero um dos melhores desde que saibas configurá-lo. O Notepad++ também é bom no Windows (uma vez que o Geany no Windows perde um pouco o estilo que tem em Linux).

Não é complicado, é diferente. :) Dá uma olhada ao Python for Noobies que está na secção de Python.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom, não vou ser lá muito popular... mas aqui vai :)

Pessoalmente penso que a tua pergunta no titulo é mais pertinente hoje do que à uns anitos atrás. Realmente, porquê Python?

A resposta só pode mesmo ser uma; porque sabes programar em Python ou porque te pediram para programar em Python. Afinal esta será sempre uma razão importante em qualquer linguagem de programação. O problema é que no que toca às vantagens que a Python possa ter sobre outras linguagens, aí eu penso que as vantagens da Python foram-se diluindo e não é hoje uma linguagem que se possa considerar influente se pensarmos que outras linguagens há que a podem substituir.

A Python como linguagem embed foi superado por outras linguagens mais poderosas como Lua, na minha opinião. Mas como ferramenta pura de programação tenho dificuldade em perceber o que posso fazer em Python que não possa fazer numa das 3 linguagens que domino (C++, Ruby e Erlang) o que reduz o meu interesse por Python. Neste contexto, a minha opinião pessoal seria que a Python não te fará falta nenhuma. Pelo menos a mim ainda não me fez, e já lá vai 20 anos desta vida de ser pago para programar... portanto penso que tenho algo a dizer.

Mas, lá está... e se soubesse Python, será que acharia necessidade de estudar Ruby? De um ponto de vista meramente funcional, não. Não me faria falta nenhuma. A Python mais do que cobriria as minhas necessidades. Portanto a real resposta à tua pergunta só poderá ser dada por ti. Ao longo da minha experiência com linguagens de programação sempre estudei linguagens que se subreponham. Não me fez mal nenhum. Antes pelo contrário, permitiu-me escolher o caminho que queria seguir de uma forma mais informada e limitar as linguagens que domino a um grupo mais restrito e consequentemente mais fácil de gerir.

O Pyhton comigo ficou-se pelo caminho. Pode ser que contigo não seja bem assim.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom, não vou ser lá muito popular... mas aqui vai ;)

Pessoalmente penso que a tua pergunta no titulo é mais pertinente hoje do que à uns anitos atrás. Realmente, porquê Python?

A resposta só pode mesmo ser uma; porque sabes programar em Python ou porque te pediram para programar em Python. Afinal esta será sempre uma razão importante em qualquer linguagem de programação. O problema é que no que toca às vantagens que a Python possa ter sobre outras linguagens, aí eu penso que as vantagens da Python foram-se diluindo e não é hoje uma linguagem que se possa considerar influente se pensarmos que outras linguagens há que a podem substituir.

A Python como linguagem embed foi superado por outras linguagens mais poderosas como Lua, na minha opinião. Mas como ferramenta pura de programação tenho dificuldade em perceber o que posso fazer em Python que não possa fazer numa das 3 linguagens que domino (C++, Ruby e Erlang) o que reduz o meu interesse por Python. Neste contexto, a minha opinião pessoal seria que a Python não te fará falta nenhuma. Pelo menos a mim ainda não me fez, e já lá vai 20 anos desta vida de ser pago para programar... portanto penso que tenho algo a dizer.

Mas, lá está... e se soubesse Python, será que acharia necessidade de estudar Ruby? De um ponto de vista meramente funcional, não. Não me faria falta nenhuma. A Python mais do que cobriria as minhas necessidades. Portanto a real resposta à tua pergunta só poderá ser dada por ti. Ao longo da minha experiência com linguagens de programação sempre estudei linguagens que se subreponham. Não me fez mal nenhum. Antes pelo contrário, permitiu-me escolher o caminho que queria seguir de uma forma mais informada e limitar as linguagens que domino a um grupo mais restrito e consequentemente mais fácil de gerir.

O Pyhton comigo ficou-se pelo caminho. Pode ser que contigo não seja bem assim.

Vamos ver :)

Obrigado pela opinião. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Marfig, eu vejo o Python não como uma linguagem tipo Fiat Panda (simples, effective, o carro de 90% da população mundial) mas mais como uma linguagem tipo

(não usa {}, não é feito para ser o carro de 90% da população mundial): é feito para gosta de programação como uma arte, não como algo comum, tal como acontece com os 2 carros de que falei. É único, e o que a torna única, brilhante, e mais importante ainda, divertida. Programar C, Java ou PHP é, embora algumas destas sejam brilhantes tecnicamente, é aborrecido. Python pelo contrário é divertido.

Esta é a minha forma de ver as coisas. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu gostava particularmente da expressividade da linguagem. Entre outras, é uma das razões principais porque o Python realmente pode dizer que o seu código é fácil de manter e não estar a mentir... Outra coisa que sempre gostei no Python (mas isso é um principio que gosto sempre nas poucas linguagens que o implementam) é o facto de se ter tornado a linguagem o mais minimalista possível e colocado o máximo do seu poder na biblioteca standard. É assim que todas as linguagens deviam ser desenvolvidas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Marfig, eu vejo o Python não como uma linguagem tipo Fiat Panda (simples, effective, o carro de 90% da população mundial) mas mais como uma linguagem tipo

(não usa {}, não é feito para ser o carro de 90% da população mundial): é feito para gosta de programação como uma arte, não como algo comum, tal como acontece com os 2 carros de que falei. É único, e o que a torna única, brilhante, e mais importante ainda, divertida. Programar C, Java ou PHP é, embora algumas destas sejam brilhantes tecnicamente, é aborrecido. Python pelo contrário é divertido.

Esta é a minha forma de ver as coisas. :)

E mais um... Python pura e simplesmente é LINDO! Tu gostas, aprecias programar em Python. Uma pessoa consegue ler código de outra sem qualquer dificuldade. Python é multi-paradigma (outra vantagem), é portável e tudo o mais...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Python é multi-paradigma (outra vantagem), é portável e tudo o mais...

C++ também é multi-paradigma, e é mais portável que Python. O que mais seduz no Python não é o quão deployable pode ser, mas sim o seu estilo. Para quem não conhece, o Zen of Python que mostra um pouco o que é a alma do Python (as in, linguagem, comunidade, programador):

>>> import this

The Zen of Python, by Tim Peters

Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren't special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

In the face of ambiguity, refuse the temptation to guess.

There should be one-- and preferably only one --obvious way to do it.

Although that way may not be obvious at first unless you're Dutch.

Now is better than never.

Although never is often better than *right* now.

If the implementation is hard to explain, it's a bad idea.

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea -- let's do more of those!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cambada de pythonistas  :)

Poderia responder a cada uma dessas linhas. Mas de modo algum isso tira o valor ao Python - apenas que esses também fazem parte de linguagens como o C++ com a possível excepção de "There should be one-- and preferably only one --obvious way to do it" que realmente parece distinguir o Python de praticamte todas as outras linguagens (muito embora francamente nunca tenha visto como é que isto se aplica ao Python).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cambada de pythonistas  :)

Poderia responder a cada uma dessas linhas. Mas de modo algum isso tira o valor ao Python - apenas que esses também fazem parte de linguagens como o C++ com a possível excepção de "There should be one-- and preferably only one --obvious way to do it" que realmente parece distinguir o Python de praticamte todas as outras linguagens (muito embora francamente nunca tenha visto como é que isto se aplica ao Python).

Easy. Não tens funcionalidades duplicadas. Em PHP p.e., tens 2 sistemas de regex, tens milhares de funções duplicadas. Em Python, tens sempre UMA maneira mais inteligente/óbvia de fazer as coisas. Exemplo:

import random
print random.choice(range(10))

Embora possas fazer isto doutras maneiras, esta função não está duplicada:

import random
print range(10)[random.rand(0, 10)]
print random.randrange(0, 10)
print random.sample(range(10), 1)[0]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Continuem, estou a gostar da discussão ;)

Concordo com o tirácio...

(É só para dizer que estou aqui, não me apetece é escrever :))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É só para dizer que estou aqui, não me apetece é escrever

Miúfa.   :smoke:

Easy. Não tens funcionalidades duplicadas. Em PHP p.e., tens 2 sistemas de regex, tens milhares de funções duplicadas. Em Python, tens sempre UMA maneira mais inteligente/óbvia de fazer as coisas.

Pois. Mas aí é que as coisas se complicam - e o exemplo que deste é excelente para o que pretendo.

Como sabes o Python implementa o MT, um excelente algoritmo. Mas o que acontece se as especificações determinarem a necessidade de um BBS, por exemplo para criptografia? Nesse caso, digo eu, desenvolves tu o algoritmo ou usas a biblioteca Crypto para Python que já vem com um. Outro exemplo, algoritmos de sort. São vários e todos úteis dependendo do input e das especificações. Cabe ao Python fornecê-los de uma maneira ou outra.

Poderás dizer que isso não nega o facto de o Python manter o principio de não seguir funcionalidades duplicadas. Afinal cada um desses algoritmos procura responder a um problema específico. Bom... mas será isso realmente uma vantagem? Quer dizer, não digo que seja uma desvantagem. Ao nível de expressividade do python é até bastante desejável, penso eu. Mas não tem grandes efeitos, porque no fim do dia duas pessoas irão apresentar duas soluções completamente distintas para o mesmo problema. Basta apenas um nível de abstração para que perca o efeito.

Também não é único ao python. O C++ segue o mesmo caminho, sendo que são as bibliotecas que oferecem os vários modelos de implementação e a linguagem procura manter-se o mais clean possível de qualquer redundância.

Ao nível da linguagem, simplifica a aprendizagem e o seu uso diário. Mas não reduz de modo algum o número de potenciais soluções.

É uma vantagem? Sem dúvida. Mas não lhe daria a importância de um cânon exclusivo do python, e procuraria talvez chamar-lhe outra coisa mais apropriada... não sei... hmm... "small language set" :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não faço ideia para que serve o dito MT, e suponho que BBS seja o antecessor dos fóruns.

Anyway, algoritmos de sorting. Para 80% dos casos, tens na stdlib o sorting que necessitas. Não tens todos, mas tens os mais usados. Se precisas de algo específico, podes ou codar do nada em Python, ou fazer uma ponte entre Python e outra linguagem que tenha o sorting que precisas já implementado (solução que podes usar e abusar quando precisas de um pouco de mais performance mas és lazyass para mudares para uma linguagem mais rápida).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Marfig, eu vejo o Python não como uma linguagem tipo Fiat Panda (simples, effective, o carro de 90% da população mundial) mas mais como uma linguagem tipo

(não usa {}, não é feito para ser o carro de 90% da população mundial): é feito para gosta de programação como uma arte, não como algo comum, tal como acontece com os 2 carros de que falei. É único, e o que a torna única, brilhante, e mais importante ainda, divertida. Programar C, Java ou PHP é, embora algumas destas sejam brilhantes tecnicamente, é aborrecido. Python pelo contrário é divertido.

Não te estás a referir a Haskell? É que até o próprio motto da linguagem indica isso. Avoid success at all costs

Em relação a haver uma e uma só maneira de fazer algo em Python. Acho que o pessoal está a entrar em exageros. Essa linha só existe como resposta a PERL. Como o Marfig disse e bem, para um dado problema, no fim duas pessoas irão apresentar duas soluções bastante diferentes. Independentemente da linguagem que é usada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom, não vou ser lá muito popular... mas aqui vai :D

Pessoalmente penso que a tua pergunta no titulo é mais pertinente hoje do que à uns anitos atrás. Realmente, porquê Python?

[...]

O Pyhton comigo ficou-se pelo caminho. Pode ser que contigo não seja bem assim.

Percebo-te perfeitamente. Acredito que profissionalmente nunca tenhas tido necessidade de usar Python.

Já a mim acontece-me exactamente o oposto.

Se é verdade que podes fazer uma programa em qualquer linguagem, não é menos verdade que para coisas simples ou scripting avançado uma linguagem como Python tem um conjunto de vantagens que me fazem optar por essas linguagens.

Só a título de exemplo, abrir um Word ou uma página web, ler a informação do documento e gerar um Excel ou enviar um email com a informação recolhida é (tipicamente) mais rápido de implementar do que em C++, Java ou C#. Além disso tem outra grande vantagem que para mim é imprescindível: cross-platform sem compilação.

Dado que sou um pragmático, subscrevo a tua opinião. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O Python tem muitas vantagem, e claro, também desvantagem...

Derivado de ser uma linguagem com uma sintaxe simples, como já disseram, programar em Python é divertido, não digo que não seja divertido noutras linguagens mas no Python não te cansas tão depressa :D

Agora sempre que programo em PHP quase que entro em stress, acabo um script e bump syntax error, unexpected xx, e lá vou eu correr o código à procura do sitio onde falte uma ; ou } ou....

É simples para coisas simples, e simples para coisas complexas. Acho que é uma linguagem muito boa para resolver problemas de programação, tipo aqueles exercícios do Google Code Jam, porque derivado dessa simplicidade uma pessoa consegue mais rapidamente passar o raciocínio para código, não tem de se preocupar se o input é grande ou pequeno, se aparecer um erro é fácil descobrir a sua origem.

É fácil manipular strings, tem um regex muito poderoso, tem uma biblioteca standard muito completa.

Para mim o único grande problema do Python é a performance, e acho que é este ponto que não permite o Python ser usado em maior escala.

Resumindo, para fazer scripts pontuais, pequenos porgramas e páginas web o Python é ideal.

Em relação a haver uma e uma só maneira de fazer algo em Python. Acho que o pessoal está a entrar em exageros. Essa linha só existe como resposta a PERL. Como o Marfig disse e bem, para um dado problema, no fim duas pessoas irão apresentar duas soluções bastante diferentes. Independentemente da linguagem que é usada.

Isso é inevitável, as pessoas pensão de maneira diferente, logo fazem as coisas de maneira diferente.

Miúfa.   :smoke:

Ó não :P

Podes explicar isso do MT e do BBS?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não te estás a referir a Haskell? É que até o próprio motto da linguagem indica isso. Avoid success at all costs

Não, estou a referir-me mesmo ao Python. A sintaxe de Python é tão simples e limpa em comparação à que vejo de Haskell...

Em relação a haver uma e uma só maneira de fazer algo em Python. Acho que o pessoal está a entrar em exageros. Essa linha só existe como resposta a PERL. Como o Marfig disse e bem, para um dado problema, no fim duas pessoas irão apresentar duas soluções bastante diferentes. Independentemente da linguagem que é usada.

Isso é óbvio. Mas a linguagem pretende dar apenas a forma mais inteligente logo out-of-the-box, obriga-te a escrever mais para usares outra approach. E para newbies, isso é bom.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sem dúvida. Não posso negar as vantagens do Python que já foram referidas. Tenho que concordar.

Podes explicar isso do MT e do BBS?

Armei-me em chico esperto. Sorry. Pensei que os acrónimos eram largamente conhecidos. Aqui à uns anos interessei-me pelo estudo de números aleatórios e os termos hoje em dia fluem na minha cabeça e digo-os sem pensar.

MT é o Mersenne Twister e BBS é o Blum Blum Shub. São dois algoritmos para geração de números aleatórios. Há mais e existem também algoritmos para a geração de seeds.

A geração de números aleatórios num computador preocupa-se essencialmente com dois aspectos distintos que juntos definem a sua "qualidade"; quão estatisticamente aleatórios são os números gerados pelo algoritmo. Distribuição e  Período.

A distribuição define-se de uma forma simplista, por o quão próximo de uma Bell Curve qualquer sequência de números aleatórios está. É possível determinar esta informação com alguma precisão graças aos esforços no estudo de distribuições probabilísticas. O Período é a dimensão de uma sequência de números  aleatórios para a qual a distribuição se mantém. Quando se diz que um algoritmo tem um período de 1000 (patético, mas para fins ilustrativos), significa que se o algoritmo consegue garantir a sua distribuição por uma sequência de 1000 numéros. Ou seja, se clicares 1000 vezes no botão Gerar, os números resultantes irão obedecer à distribuição proposta no algoritmo. Mais do que isso e é possível que a qualidade do gerador se "degrade". Atenção que isto é apenas para uma seed. Se a seed for alterada, o "contador" recomeça.

Ora necessariamente poder-se-ão construir - e realmente construiram-se - vários algoritmos que respondem às necessidades de geração de números aleatórios de formas diferentes. Alguns poderão ter longos períodos mas uma fraca distirbuição. Outros poderão ter uma excelente distribuição por periodos mais pequenos, e outros ainda poderão ter uma distribuição aceitável para a maioria dos casos com longos periodos. O Mersenne Twister encontra-se no terceiro grupo.

Dentro das aplicações genéricas a dar à geração de números aleatórios, o MT responde à esmagadora maioria das situações. Se a linguagem o implementa nativamente, isso é fantástico. Mas O MT tem alguns defeitos. O maior o facto de ser relativamente lento. Em condições normais isto não é um problema. Mas quando as exigências a nível de performance são críticas (crítico não é o mesmo que "eu quero que seja rápido". o MT é rápido quando essa é a única exigência) o MT pode não ser a solução. Outro problema é que o MT é previsível. Claro que é preciso saber qual o seed. Mas para feitos de criptografia, o MT não pode ser utilizado. Existe finalmente ainda a questão do âmbito das especificações do software a desenvolver. Para muitos casos o MT é desnecessariamente complexo quando a linguagem não o implementa nativamente e as exigências não o justificam. Um simples LFG ou um Park-Miller RNG serão mais que suficientes e bastante rápidos. (Já agora estes são os algoritmos muitas vezes usados para gerar as seeds num MT).

Enfim... muitos algoritmos. Muitas soluções para um mesmo problema uma vez que em termos práticos nenhuma solução é ainda ideal.

...

Em relação ao resto, não sei.

O Python é definitivamente um excelente objecto de estudo. Não posso negar que tirei algum gozo com o Python. Mas de uma perspectiva puramente profissional realmente nunca o usei e como disse o M6 e bem, nestas coisas convém ser pragmático. Obviamente que se tivesse sido a dada altura funcionário da Google ou um dos programadores da Bethesda, já não pensaria assim. Portanto nada do que diga neste caso esconde o facto que o Python tem sido aplicado e continuará a ser aplicado em muitos sítios. Defendo que isto se deve em muitos casos apenas a questões culturais e históricas da própria empresa. Mas isso é apenas uma opinião e vale o que vale. Já em certas situações o python perfila-se como uma escolha apropriada como por exemplo a já referida simplicidade em lidar com várias aplicações ao mesmo tempo (desde que estas exponham métodos para o fazer).

Acho no entanto que a simplicidade, o prazer, ou o sempre relativo conceito de "a maneira correcta de programar", não são um exclusivo do Python.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, estou a referir-me mesmo ao Python. A sintaxe de Python é tão simples e limpa em comparação à que vejo de Haskell...Isso é óbvio.

Tão simples talvez. Limpa já discordo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tão simples talvez. Limpa já discordo.

Sim, simples é. Nisso tenho que concordar. Mas limpa não me parece MESMO (só que não quis ser bruto no outro post eheh) :P
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