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

vitortomaz

Vantagens do Pyhton em relação a outras linguagens?

28 mensagens neste tópico

Boas, podia pesquisar na net mas pareçe haver bastante gente entendida no assunto vou perguntar  :P

Quais as vantagens do Python em relação a outras linguagens como o Java, C#, VB ?

Possuí um ambiente managed? ou seja, corre numa maquina virtual? com serviços como Garbage Collection?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Quais as vantagens do Python em relação a outras linguagens como o Java, C#, VB ?

A principal vantagem é ser uma linguagem interpretada.

A principal desvantagem é ser uma linguagem interpretada.  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Essa resposta não é muito informativa.

Assim de rajada:

-é mais facil de usar, pois não é preciso estar a compilar, linkar, bla bla bla

-sintaxe elegante, simplificada e notoriamente mais facil de usar

-atribuição dinâmica de tipos de dados

-suporte embutido apra estruturas de dados

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa a minha ignorância. Isso é suposto significar o que?

Bem, um pouco desactualizado e tal mas aqui fica: http://wiki.python.org/moin/LanguageComparisons

Significa que sem escrevers qualquer código para o efeito, usando apenas listas e dicionários, podes arrumar os teus dados em estruturas de dados de todo o tipo.

As linguagens mais antigas o máximo que permitem são arrays de tipos de dados básicos. Para usar outros tipos de dados seria preciso estar a definir tipos de dados manualmente, seja através de uma classe, struct ou outro,  o que, por mais que se tente negar, não é preciso na maioria dos casos.

Os programadores que passaram a vida a usar linguagens mais antigas nunca falam disto, é alto tabu. Mas isto e outras pequenas coisas como casting automático, são a chave da popularidade de linguagens ditas de "scripting".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

casting automático, são a chave da popularidade de linguagens ditas de "scripting".

... tanto boa popularidade como má popularidade (se é que isso existe). É grandes críticas aos castings automáticos como, por exemplo, 1 == "0" devolver true, mas há quem ache que os castings automáticos são uma bênção dos céus. E, pessoalmente, considero que é uma bênção dos céus se usado com precaução.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não conheço python por isso não posso criticar o que quer que seja ou comparar com o que quer que seja, mas isso de uma linguagem ser melhor que outra tem muito que se lhe diga, temos que pensar é no problema que temos e como o queremos resolver, em que plataforma etc. a linguagem na minha opinião deve depender do que queremos fazer, por exemplo programar sistemas embutidos é usual c/c++ e assembly, não tou a ver jogos comerciais a serem programados em python, isto é simplesmente a minha opinião.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não conheço python por isso não posso criticar o que quer que seja ou comparar com o que quer que seja, mas isso de uma linguagem ser melhor que outra tem muito que se lhe diga, temos que pensar é no problema que temos e como o queremos resolver, em que plataforma etc. a linguagem na minha opinião deve depender do que queremos fazer, por exemplo programar sistemas embutidos é usual c/c++ e assembly, não tou a ver jogos comerciais a serem programados em python, isto é simplesmente a minha opinião.

Concordo.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O python ainda não é a linguagem mais adequada para jogos com 'despesa gráfica' massiva. Mas já existem mais jogos em python do que a maioria das pessoas pensa.

Mas atenção, o vitortomaz só perguntou as vantagens do python, não fez comparações nem perguntou se era melhor ou pior. É uma questão perfeitamente válida de ser discutida.

... tanto boa popularidade como má popularidade (se é que isso existe). É grandes críticas aos castings automáticos como, por exemplo, 1 == "0" devolver true, mas há quem ache que os castings automáticos são uma bênção dos céus. E, pessoalmente, considero que é uma bênção dos céus se usado com precaução.

Pois é realmente verdade. Pessoalmente penso que os que o usam seguem em frente com a sua produtividade, os restantes, como não conseguem admitir que é realmente prático ficam-se por mencionar situações onde pode eventualmente causar pequenos problemas, se não se tiver 1001 cuidados.

Pessoalmente acho problemas destes bem piores:

>>> a=0.1
>>> a+a+a+a+a+a+a+a+a+a
0.99999999999999989

Mas disto ninguem fala porque não serve para axincalhar linguagens supostamente inferiores, já que as supostamente superiores têm precisamente este problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pedrotuga, eu não me referia à parte dos jogos, mas sim à parte "linguagem na minha opinião deve depender do que queremos fazer".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu como estudei Java e .NET(C#) numa perspectiva de arquitectura (framework) e não de linguagem de programação em si queria saber o que tá por trás do Pyhton... corre em cima de quê? maquina virtual java? / "directo" no SO?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exemplo de um jogo em Python: Frets on Fire.

eu como estudei Java e .NET(C#) numa perspectiva de arquitectura (framework) e não de linguagem de programação em si queria saber o que tá por trás do Pyhton... corre em cima de quê? maquina virtual java? / "directo" no SO?

Python gera código compilado (que não é código máquina) que é interpretado por um género de VM. A implementação mais usada é a CPython, que como o nome indica, foi escrita em C.

@pedrotuga, isso do a = 0.1; print a+a+a+a+a+a+a+a+a+a é um problema herdado do C (da forma que a linguagem foi idealizada IMHO), pelo que venho lendo ao longo dos anos.

Eu não conheço python por isso não posso criticar o que quer que seja ou comparar com o que quer que seja, mas isso de uma linguagem ser melhor que outra tem muito que se lhe diga, temos que pensar é no problema que temos e como o queremos resolver, em que plataforma etc. a linguagem na minha opinião deve depender do que queremos fazer, por exemplo programar sistemas embutidos é usual c/c++ e assembly, não tou a ver jogos comerciais a serem programados em python, isto é simplesmente a minha opinião.

E porque não?
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pessoalmente acho problemas destes bem piores:

>>> a=0.1
>>> a+a+a+a+a+a+a+a+a+a
0.99999999999999989

Mas disto ninguem fala porque não serve para axincalhar linguagens supostamente inferiores, já que as supostamente superiores têm precisamente este problema.

Não falam disso, porque isso não é um problema de linguagens de programação, é um problema Matemático, e tem a ver com o facto do 0.1 ser uma dízima infinita em binário, e não ser possível representar em float esse valor.

EDIT: e não estou a ver em que é que isto tem a ver com o C.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E porque não?

Performance... Não digo que não seja possível fazer jogos em python, alias para alguns tipos de jogos (ex: didáticos até não é mau), mas para jogos mais exigentes em capacidade gráfica e física o python não consegue estar á altura por ser uma linguagem interpretada.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Performance... Não digo que não seja possível fazer jogos em python, alias para alguns tipos de jogos (ex: didáticos até não é mau), mas para jogos mais exigentes em capacidade gráfica e física o python não consegue estar á altura por ser uma linguagem interpretada.

Devias querer dizer "linguagem compilada" no fim...

De qualquer forma, o Python também pode ser compilado. Penso que a diferença estará no facto do C/C++ estarem mais próximos do Assembly, e como tal, permitirem mais optimizações por parte do programador.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Devias querer dizer "linguagem compilada" no fim...

De qualquer forma, o Python também pode ser compilado. Penso que a diferença estará no facto do C/C++ estarem mais próximos do Assembly, e como tal, permitirem mais optimizações por parte do programador.

Exacto.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só para clarificar o problema das casas decimais que eu apontei.

Rui carlos, só existe essa limitação porque os tipos de dados que são utilizados por exemplo em python estão desenhados de forma a que tenham essa limitação. É perfeitamente possível desenhar um tipo de dados cujo 0.1 e o 1 sejam cobertos por ele. Ou seja, não é uma limitação matemática, é uma limitação da forma como o o tipo de dados (ou escala) é concebido.

O passo (diferença entre dois valores imediatos) dos inteiros por exemplo é constante. O dos floats não. O que é uma grande ironia é que foi desenhado para ter o máximo da resolução em torno do valor zero, e depois, para 0.1 mostra logo limitações.

Não só podia ter sido projectado de formas diferentes como as linguagens podiam ter mecanismos que tratassem destas 'imprecisões', na verdade algumas já o fazem.

Em relação a ser herdado do C, acho se diz isso porque a implementação do python que todos usamos provavelmente pega no float do C e usa-o para armazenar os floats do python.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Presumo que os tipos de dados não tenha sido desenhados pelos criadores do Python... Presumo que usem a norma IEEE 754. Ou seja, os tipos de dados não são do C, o C usa os tipos de dados da máquina! Por isso, deixem o C fora da discussão.

Essa norma, tem esse problema. A nível Matemático, a representação binária tem esse problema (por isso não me venhas dizer que não é um problema Matemático, pois a linguagem natural da máquina é binário), assim como a representação decimal tem problemas com o 1/3. Quando falas na questão do "passo", fico a pensar que não percebeste o problema em causa... Por mais casa décimais que adicionasses ao número, nunca terias uma representação do 0.1!

Não sou especialista em Arquitectura de Computadores, mas parece-me que a maior parte das máquinas tem hardware optimizado para fazer operações aritméticas de inteiros e floats (o FLU?). Por isso, usar um tipo de dados diferente para representar floats, seria desastrosos em termos de desempenho...

Quem implementou os formatos de vírgula flutuante não foram propriamente 1/2 dúzia de amadores... Eles sabiam o que faziam, e tinha perfeita consciência desse problema do 0.1...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Performance... Não digo que não seja possível fazer jogos em python, alias para alguns tipos de jogos (ex: didáticos até não é mau), mas para jogos mais exigentes em capacidade gráfica e física o python não consegue estar á altura por ser uma linguagem interpretada.

Exactamente o que eu queria dizer

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Rui Carlos, estás a falar de tipos de dados lineares e, neste caso, com vírgula flutuante como é o caso do 'float' usado em muitas linguagens. Claro que se te confinares a isso não vais encontrar solução.

Eu não estou a dizer que foi mal feito ou que foi um erro, estou a dizer é que levanta problemas muito mais chatos e frequentes do que o casting autmático (por exemplo) e que hoje em dia é perfeitamente possível poupar muitos programadores desse tipo de preocupação desnecessária. É tambem óbvio que o casting automático tem as suas desvantagens, quanto a mim, 99% delas são insignificancias discutidas até à exaustão por que não o usa.

Usar uma escala linear tem as vantagens que tem, nomeadamente facilita a soma (e a subtracção), outro tipo de escala teria consequencias desastrosas? Depende, os computadores hoje em dia funcionam basicamente com base em somas e multimplicações binárias, divisões decimais por exemplo são tão disastrosas como imaginaste. Por esse motivo é que coisas como SSL e outros algoritmos que usam um sistema de chave pública/chave privada são seguros, mas isso é outra conversa.

Da mesma forma que uma escala linear permite calculo de somas muito facilmente, uma escala exponencial permite o cálculo de multiplicações de forma trivial.

Mas só para dar um exemplo concreto, o matlab, utiliza uma escala exponencial para o seu sistema numérico. Pessoalmente acho que faz todo o sentido dada a finalidade da ferramenta em causa.

Já que cá estamos... o sistema musical tambem é logarítmico, no entanto se ouvires uma escala ela soa-te toda muito linear... é porque o nosso ouvido tambem é logarítmico.

possivelmente existem outras aritméticas mais bizarras que nós desconhecemos, ou que o Homem desconheça por completo, mas concerteza terão as suas vantagens num determinado tipo de operações matemáticas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não estou a dizer que foi mal feito ou que foi um erro, estou a dizer é que levanta problemas muito mais chatos e frequentes do que o casting autmático (por exemplo) e que hoje em dia é perfeitamente possível poupar muitos programadores desse tipo de preocupação desnecessária. É tambem óbvio que o casting automático tem as suas desvantagens, quanto a mim, 99% delas são insignificancias discutidas até à exaustão por que não o usa.

Só nunca vi ninguém se queixar desse problema dos arredondamentos... Pelo contrário, no casting automatico, já vi mais gente a queixar-se.

Se calhar, porque não há solução para esse problema...

Usar uma escala linear tem as vantagens que tem, nomeadamente facilita a soma (e a subtracção), outro tipo de escala teria consequencias desastrosas? Depende, os computadores hoje em dia funcionam basicamente com base em somas e multimplicações binárias, divisões decimais por exemplo são tão disastrosas como imaginaste. Por esse motivo é que coisas como SSL e outros algoritmos que usam um sistema de chave pública/chave privada são seguros, mas isso é outra conversa.

A razão pela qual não usamos uma escala linear, não me parece que seja por questão de eficiência, é mesmo uma questão de utilidade... Os números que consegues representar com uma escala não linear têm mais utilidade do que os que terias com uma escala linear.

Além do mais, mesmo que arranjasses outra representação (linear se quisesses), nunca iria resolver o problema... Ias ter sempre arredondamentos, se não fossem no 0.1, eram noutro número qualquer (como já referi, esse já é um problema que temos na representação decimal, por maior precisão que tenhas disponível). A quantidade de números possíveis de serem representados é finita, e não há forma de contornar isso. Ou seja, não há solução para este problema, a menos que vás para um sistema de representação simbólico (e mesmo aí, quando não tens métodos analíticos para resolver os problemas, acabas por ter que arredondar valores).

Eu referi a eficiência pelo facto dos pcs actuais terem hardware preparado para trabalhar com floats, que deixarias de poder usar casos alterasses o seu formato (independentemente do novo formato permitir operações mais eficientes ou não com hardware especifico para aquele formato, os pcs actuais não têm esse hardware).

E já agora, entre as cifras de chave pública mais conhecidas, o RSA usa o problema da factorização de inteiros (e não de decimais), o DSA e com o El Gamal normalmente usa-se o grupo ciclico de inteiros. Ou seja, em qualquer um deles, estamos a falar de problemas com inteiros, e não tem nada a ver com o facto das divisões decimais serem desastrosas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Performance... Não digo que não seja possível fazer jogos em python, alias para alguns tipos de jogos (ex: didáticos até não é mau), mas para jogos mais exigentes em capacidade gráfica e física o python não consegue estar á altura por ser uma linguagem interpretada.

De qualquer forma, o Python também pode ser compilado. Penso que a diferença estará no facto do C/C++ estarem mais próximos do Assembly, e como tal, permitirem mais optimizações por parte do programador.

C compila para código máquina, tens logo ali o low-lever a ajudar para hackzinhos de performance. No entanto, também o podes fazer com Python usando libraries escritas em C.

Em relação a ser herdado do C, acho se diz isso porque a implementação do python que todos usamos provavelmente pega no float do C e usa-o para armazenar os floats do python.

Exactly my point.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exactly my point.

O problema é que é o float da máquina e não do C...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema é que é o float da máquina e não do C...

Sim, mas acho que percebeste o que quis dizer.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já estamos demasiado fora do tema desta thread e quem ler isto até pensa que eu estou a tentar dizer mal do python.

Eu sei que sou teimoso, mas rui, não me percebeste...

A razão pela qual não usamos uma escala exponencial, não me parece que seja por questão de eficiência, é mesmo uma questão de utilidade... Os números que consegues representar com uma escala não linear têm mais utilidade do que os que terias com uma escala linear.

Aco que era isto que querias dizer.... Mas aí é que te enganas. Uma escala linear na maior parte das situações hoje em dia é menos prática do que uma exponencial. É mais prático e diminui os erros usar uma escala cujo passo não seja constante, dessa forma, podes trablhar com números maiores e ter mais precisão nos valores mais usados.

Por esse motivo é que o SI defende que os valores numéricos devem ser representados em notação cientifica.

O matlab é um exemplo, há muitas ferramentas informáticas e linguagens que já seguem esta tendencia, pessoalmente não sigo muito este tipo de coisa, é uma questão de quem estiver interessado pesquisar.

Isto não são só os computadores, é todo o tipo de instrumentação. Existe sempre um compromisso entre largura de escala e precisão se quiseres ter as duas coisas acabas por não ter grande espingarda nem numa coisa nem noutra.

E já agora, entre as cifras de chave pública mais conhecidas, o RSA usa o problema da factorização de inteiros (e não de decimais), o DSA e com o El Gamal normalmente usa-se o grupo ciclico de inteiros. Ou seja, em qualquer um deles, estamos a falar de problemas com inteiros, e não tem nada a ver com o facto das divisões decimais serem desastrosas.

Inteiros são um tipo de dados com um passo constante, ou seja, com uma escala linear.

Eu disse "divisão decimal" de facto isso não significa coisa nenhuma, foi um erro meu aí, que causou confusão. O que interessa e o que eu quis apontar é que, enquanto que uma soma ou uma subtracção se conseguem com electrónica simples, uma multiplicação ou divisão por um número do tipo 2^n já necessita de uma memória do mesmo tamanho que o dividendo. Uma divisão por um valor diferente de 2^n então já precisa de uma carrada de memória e de muitas operações de cópia daqui para ali e multiplicações e somas por todo o lado.

Podes fazer o teste, faz um programa que percorra um array de grande dimensão e divide os elementos um a um por um numero qq (n vale escolher um fácil), faz o mesmo com uma soma e com uma multiplicação. Vais ver que a divisão é brutalmente mais lenta.

Se fizeres os mesmos testes no matlab a diferença não será tão grande.

Chamar 'problema' a isto de facto não é muito justo, é uma limitação, não um problema. A única coisa que eu acho é que não faz muito sentido numa linguagem com as características do python, não ter uma forma mais cómoda de lidar com este tipo de problemas. Quem se queixa do casting automático tambem se devia queixar de se poder escrever

a=0.1

e o compilador não se queixar, é exactamente o mesmo tipo de incongruencia. O pessoal não se queixa disto porque isto já é feito há 30 ou 40 anos. O casting automático é um passo à frente nesta simplificação  a única diferença é que funciona em mais situações do que na atribuição. Mas quanto este tiver 30 anos talvez o pessoal já se queixe de outra coisa qualquer :(

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