Movatterモバイル変換


[0]ホーム

URL:


Ir para o conteúdo
Wikipédia
Busca

Python

Origem: Wikipédia, a enciclopédia livre.
Linguagem de programação de propósito geral
 Nota: "PEP" redireciona para este artigo. Para a expressão política associada ao antipalestinismo, vejaProgressista exceto pela Palestina. Para outros significados, vejaPython (desambiguação).
Python
Logo do Python
ParadigmaMultiparadigma:
Surgido em20 de fevereiro de1991 (35 anos)[1]
Últimaversão3.14.3[2]Edit this on Wikidata(3 fevereiro 2026)
Criado porGuido van Rossum[1]
Estilo de tipagem
  • dinâmica
  • forte
  • duck
  • gradual(desde a versão 3.5)
Principais implementações
DialetosCython,RPython,Starlark[3]
Influenciada por
Influenciou
Plataforma
Prioridade 1
Prioridade 2
Sistema operacional
LicençaPython Software Foundation License[9]
Extensão do arquivo
  • .py
  • .pyc
  • .pyd
  • .pyo
  • .pyw
  • .pyz
Página oficialwww.python.orgEditar isso no Wikidata

Python é umalinguagem de programação de alto nível,[10]interpretada descript,imperativa,orientada a objetos,funcional, detipagem dinâmica e forte. Foi lançada porGuido van Rossum em1991.[1] Atualmente, possui um modelo de desenvolvimento comunitário, aberto e gerenciado pelaorganização sem fins lucrativosPython Software Foundation. Apesar de várias partes da linguagem possuírem padrões e especificações formais, a linguagem, como um todo, não é formalmente especificada. O padrão na pratica é a implementaçãoCPython.

A linguagem foi projetada com a filosofia de enfatizar a importância do esforço do programador sobre o esforço computacional. Prioriza a legibilidade do código sobre a velocidade ou expressividade. Combina umasintaxe concisa e clara com os recursos poderosos de suabiblioteca padrão e pormódulos eframeworks desenvolvidos por terceiros.

Python é uma linguagem de propósito geral dealto nível,multiparadigma, suporta o paradigmaorientado a objetos, imperativo, funcional e procedural. Possui tipagem dinâmica e uma de suas principais características é permitir a fácil leitura do código e exigir poucas linhas de código se comparado ao mesmo programa em outras linguagens. Devido às suas características, ela é utilizada, principalmente, para processamento de textos, dados científicos e criação deCGIs para páginas dinâmicas para a web. Foi considerada pelo público a 3ª linguagem "mais amada", de acordo com uma pesquisa conduzida pelositeStack Overflow em 2018[11] e está entre as 5 linguagens mais populares, de acordo com uma pesquisa conduzida pelaRedMonk.[12]

O nomePython teve a sua origem no grupo humorísticobritânicoMonty Python,[13] criador do programaMonty Python's Flying Circus, embora muitas pessoas façam associação com oréptil do mesmo nome (emportuguês,píton oupitão).

História

[editar |editar código]
Guido van Rossum, São Francisco, Califórnia

O Python foi concebido no final de 1989[10][13] porGuido van Rossum noInstituto de Pesquisa Nacional para Matemática e Ciência da Computação (CWI), nosPaíses Baixos, como um sucessor daABC capaz detratar exceções e prover interface com osistema operacionalAmoeba[14] através descripts. Também da CWI, a linguagem ABC era mais produtiva queC, ainda que com o custo do desempenho emtempo de execução. Mas ela não possuía funcionalidades importantes para a interação com o sistema operacional, uma necessidade do grupo. Um dos focos primordiais de Python era aumentar a produtividade do programador.[13]

Python foi feita com base na linguagem ABC, possui parte da sintaxe derivada do C, compreensão de listas, funções anonimas e função map de Haskell. Os iteradores são baseados na Icon, tratamentos de exceção e módulos da Modula-3, expressões regulares de Perl.

Em 1991, Guido publicou o código (nomeado versão 0.9.0) no grupo de discussãoalt.sources.[1] Nessa versão já estavam presentesclasses comherança, tratamento de exceções,funções e ostipos de dado nativoslist,dict,str, e assim por diante. Também estava presente nessa versão um sistema de módulos emprestado doModula-3. O modelo de exceções também lembrava muito o do Modula-3, com a adição da opçãoelse clause.[14] Em 1994 foi formado o principal fórum de discussão do Python, comp.lang.python, um marco para o crescimento da base de usuários da linguagem.

A versão 1.0 foi lançada em janeiro de 1994. Novas funcionalidades incluíam ferramentas paraprogramação funcional comolambda,map,filter ereduce. A última versão enquanto Guido estava na CWI foi o Python 1.2. Em 1995, ele continuou o trabalho no CNRI emReston,Estados Unidos, de onde lançou diversas versões. Na versão 1.4 a linguagem ganhou parâmetros nomeados (a capacidade de passar parâmetro pelo nome e não pela posição na lista de parâmetros) e suporte nativo anúmeros complexos, assim como uma forma deencapsulamento.[15]

Ainda na CNRI, Guido lançou a iniciativaComputer Programming for Everybody (CP4E; literalmente, "Programação de Computadores para Todos"), que visava tornar aprogramação mais acessível, um projeto financiado pelaDARPA.[16] Atualmente o CP4E encontra-se inativo.

Em 2000, o time de desenvolvimento da linguagem se mudou para a BeOpen a fim de formar o timePythonLabs. A CNRI pediu que a versão 1.6 fosse lançada para marcar o fim de desenvolvimento da linguagem naquele local. O único lançamento na BeOpen foi o Python 2.0, e após o lançamento o grupo de desenvolvedores da PythonLabs agrupou-se naDigital Creations.

Python 2.0 implementoulist comprehension, uma relevante funcionalidade de linguagens funcionais comoSETL eHaskell. A sintaxe da linguagem para essa construção é bastante similar a de Haskell, exceto pela preferência do Haskell por caracteres de pontuação e da preferência do python porpalavras reservadas alfabéticas. Essa versão 2.0 também introduziu um sistemacoletor de lixo capaz de identificar e tratar ciclos de referências.[17]

Já o 1.6 incluiu uma licença CNRI substancialmente mais longa que a licença CWI que estavam usando nas versões anteriores. Entre outras mudanças, essa licença incluía uma cláusula atestando que a licença era governada pelas leis daVirgínia. AFree Software Foundation alegou que isso era incompatível com aGNU GPL. Tanto BeOpen quanto CNRI e FSF negociaram uma mudança na licença livre do Python que o tornaria compatível com a GPL. Python 1.6.1 é idêntico ao 1.6.0, exceto por pequenas correções de falhas e uma licença nova, compatível com a GPL.[18]

Python 2.1 era parecido com as versões 1.6.1 e 2.0. Sua licença foi renomeada para Python Software Foundation License.[9] Todo código, documentação e especificação desde o lançamento daversão alfa da 2.1 é propriedade daPython Software Foundation (PSF), umaorganização sem fins lucrativos fundada em 2001, um modelo tal qual daApache Software Foundation.[18] O lançamento incluiu a mudança na especificação para suportar escopo aninhado, assim como outras linguagens com escopo estático.[19] Esta funcionalidade estava desativada por padrão, e somente foi requerida na versão 2.2.

Uma grande inovação da versão 2.2 foi a unificação dos tipos Python (escritos emC) e classes (escritas em Python) em somente uma hierarquia. Isto tornou o modelo de objetos do Python consistentemente orientado a objeto.[20] Também foi adicionadogenerator, inspirado emIcon.[21]

O incremento da biblioteca padrão e as escolhas sintáticas foram fortemente influenciadas porJava em alguns casos: o pacotelogging[22] introduzido na versão 2.3,[23] oanalisador sintáticoSAX, introduzido na versão 2.0 e a sintaxe de decoradores que usa@,[24] adicionadas na versão 2.4.[25]

Em 1 de outubro de 2008 foi lançada a versão 2.6, já visando a transição para a versão 3.0 da linguagem. Entre outras modificações, foram incluídasbibliotecas paramultiprocessamento,JSON eE/S, além de uma nova forma de formatação decadeias de caracteres.[26]

Atualmente a linguagem é usada em diversas áreas, comoservidores de aplicação ecomputação gráfica. Está disponível comolinguagem de script em aplicações comoOpenOffice (Python UNO Bridge),Blender e pode ser utilizada emprocedimentos armazenados nosistema gerenciador de banco de dadosPostgreSQL (PL/Python).

A terceira versão da linguagem foi lançada em dezembro de 2008,[27] chamada Python 3.0 ou Python 3000. Com noticiado desde antes de seu lançamento,[28] houve quebra de compatibilidade com a família 2.x para corrigir falhas que foram descobertas neste padrão, e para limpar os excessos das versões anteriores.[13] A primeiraversão alfa foi lançada em 31 de agosto de 2007, a segunda em 7 de dezembro do mesmo ano.

Mudanças da versão incluem a alteração dapalavra reservadaprint, que passa a ser uma função, tornando mais fácil a utilização de uma versão alternativa da rotina. Em Python 2.6, isso já está disponível ao adicionar o códigofrom __future__ import print_function.[29] Também, a mudança paraUnicode de todas ascadeias de caracteres.[30]

Em 2012, foi criado o Raspberry Pi, cujo nome foi baseado na linguagem Python. Uma das principais linguagens escolhidas é Python. Python influenciou várias linguagens, algumas delas foram Boo e Cobra, que usa a indentação como definição de bloco e Go, que se baseia nos princípios de desenvolvimento rápido de Python.

Atualmente, Python é um dos componentes padrão de vários sistemas operacionais, entre eles estão a maioria das distribuições do Linux, AmigaOS 4, FreeBSD,NetBSD,OpenBSD e OS X. A linguagem se tornou a padrão no curso de ciências da computação do MIT em 2009

Filosofia

[editar |editar código]

Parte da cultura da linguagem gira ao redor deThe Zen of Python, um poema que faz parte do documento "PEP 20 (The Zen of Python)",[31] escrito peloprogramador em Python de longa data Tim Peters, descrevendo sumariamente a filosofia do Python. Entre os vinte princípios do poema, estão presentes:

  • Bonito é melhor que feio;
  • Explícito é melhor que implícito;
  • Simples é melhor que complexo;
  • Complexo é melhor que complicado;
  • Legibilidade faz diferença.

Pode-se vê-lo através de umeaster egg do Python pelo comando:

>>>importthis

Desenvolvimento

[editar |editar código]

O desenvolvimento de Python é conduzido amplamente através do processo Python Enhancement Proposal ("PEP"), em português Proposta de Melhoria do Python. Os PEPs são documentos de projeto padronizados que fornecem informações gerais relacionadas ao Python, incluindo propostas, descrições,justificativas de projeto (design rationales) e explicações para características da linguagem. PEPs pendentes são revisados e comentados por Van Rossum, oBenevolent Dictator for Life (líder arquiteto da linguagem) do projeto Python. Desenvolvedores do CPython também se comunicam através de uma lista de discussão, python-dev, que é o fórum principal para discussão sobre o desenvolvimento da linguagem. Questões específicas são discutidas nogerenciador de errosRoundup mantido em python.org. O desenvolvimento acontece no auto-hospedadohttps://svn.python.org/

Python possui uma licençalivre aprovada pelaOSI e compatível com aGPL, porém menos restritiva. Ela prevê (entre outras coisas) que binários da linguagem sejam distribuídos sem a necessidade de fornecer ocódigo fonte junto.[9]

Módulos eframeworks

[editar |editar código]

Ao longo do tempo têm sido desenvolvidos pela comunidade de programadores muitasbibliotecas de funções especializadas (módulos) que permitem expandir as capacidades base da linguagem. Entre estes módulos especializados destacam-se:

Frameworks web
Computação gráfica
Computação científica e IA
Rede e bancos de dados
Interfaces gráficas

Ambientes de desenvolvimento integrado

[editar |editar código]

Existem váriosambientes de desenvolvimento integrado (IDE) disponíveis para Python:

  • IDLE (Integrated Development and Learning Environment) – IDE padrão distribuído com oCPython (iniciantes).[32]
  • PyCharm - IDE muito usado, criado pela JetBrains, suporta JavaScript e CSS (profissionais)[32]
  • Komodo Edit - IDE versátil e forte para linguagens de programação dinâmicas, com recursos avançados.[32]
  • Visual Studio[33]
  • Visual Studio Code - IDE de código aberto criado pela Microsoft, com recursos bons que apenas alguns IDE pagos oferecem.[32]
  • Sublime Text - IDE popular que usa muitas linguagens, altamente personalizável e oferece velocidades de desenvolvimento.[32]
  • Atom - IDE de código aberto criado pelo GitHub semelhante ao Sublime, oferece quase os mesmos recursos.[32]
  • GNOME Builder
  • Geany - IDE pequeno e ágil, também usa plugins.[32]
  • PyDev (Eclipse) - com código aberto muito usado, conhecido por sua flexibilidade e extensibilidade com muitosplugins.[32]
  • Eric Python IDE - IDE completo multiplataforma construído no framework QtGUI, com bons plugins.[32]
  • PyScripter - compilado nativamente para Windows, combinando pouca memória com grande desempenho, tem os recursos do IDE moderno.[32]
  • Spyder - IDE com código aberto mais usado para desenvolvimento científico e ciência de dados.[32]
  • Wing IDE - oferece teste de 30 dias aos desenvolvedores.[32]
  • Thonny - IDE bom para uso no ensino da programação, possui depurador simples (iniciantes)[32]

Sintaxe e semântica

[editar |editar código]

Construções

[editar |editar código]

Construções de Python incluem:estrutura de seleção (if,else,elif);estrutura de repetição (for, while), que itera por um container, capturando cada elemento em uma variável local dada; construção declasses (class); construção desub-rotinas (def); construção de escopo (with), como por exemplo paraadquirir um recurso.

Tipos de dados

[editar |editar código]

A tipagem de Python é forte, pois os valores e objetos têm tipos bem definidos e não sofrem coerções como emC ouPerl. São disponibilizados diversostipos de dados nativos:

Tipo de dadoDescriçãoExemplo da sintaxe
boolBooleanoTrue ouFalse
intNúmero de precisão fixa, é transparentemente convertido paralong caso não caiba em um int.42
2147483648L
floatPonto flutuante3.1415927
complexNúmero complexo3+2j
listLista heterogênea mutável[4.0,'string',True]
tupleTupla imutável(4.0,'string',True)
rangeSequência de números imutável que pode ser transformada em listarange(10)
range(0,10)
range(0,10,1)
set,frozensetConjuntonão ordenado, não contém elementos duplicados{4.0,'string',True}
frozenset([4.0,'string',True])
str,unicodeUmacadeia de caracteres imutável'Wikipedia'
u'Wikipedia'
bytes,bytearray,memoryviewSequência bináriab'Wikipedia'
bytearray(b'Wikipedia')
memoryview(b'Wikipedia')
dictConjunto associativo{'key1':1.0,'key2':False}

Python também permite a definição dos tipos de dados próprios, através declasses. Instâncias são construídas invocando a classe (FooClass()), e as classes são instância da classetype, o que permitemetaprogramação ereflexão.Métodos são definidos como funções anexadas à classe, e a sintaxeinstância.método(argumento) é um atalho paraClasse.método(instância, argumento). Os métodos devem referenciar explicitamente a referência para o objeto incluindo o parâmetroself como o primeiro argumento do método.[34]

Antes da versão 3.0, Python possuía dois tipos de classes: "old-style" e "new-style". Classes old-style foram eliminadas no Python 3.0, e todas são new-style. Em versões entre 2.2 e 3.0, ambos tipos de classes podiam ser usadas. A sintaxe de ambos estilos é a mesma, a diferença acaba sendo de onde objeto da classe é herdado, direta ou indiretamente (todas classes new-style herdam de object e são instancias de type). As classes new-styles nada mais são que tipos definidos pelo usuário.

Palavras reservadas

[editar |editar código]

O Python 3 define as seguintespalavras reservadas:[35]

A versão 3.10.0 implementou aStructural Pattern Matching (Correspondência de Padrão Estrutural), semelhante ao Switch-Case de outras linguagens, assim como definido na PEP 634.[37] Por isso as palavras match e case passarão a ser reservadas.

Notas
  1. abasync eawait foram introduzidas na Python 3.5.[36]
  2. abTrue eFalse tornaram-se palavras-chave na Python 3.0. Anteriormente elas eramvariáveis ​​globais.
  3. nonlocal foi introduzida na Python 3.0.

Operadores

[editar |editar código]

Os operadores básicos de comparação como==,<,>=, entre outros são usados em todos os tipos de dados, como números, cadeias de texto, listas e mapeamentos. Comparações em cadeia comoa < b < c possuem o mesmo significado básico que na matemática: os termos são comparadas na ordem. É garantido que o processamento da expressão lógica irá terminar tão cedo o veredito seja claro, o princípio da avaliação mínima. Usando a expressão anterior, sea < b é falso,c não é avaliado.

Quanto aos operadores lógicos, até Python 2.2 não havia o tipo de dado booleano. Em todas as versões da linguagem os operadores lógicos tratam"",0,None,0.0,[] e{} como falso, enquanto o restante é tratado como verdadeiro de modo geral. Na versão 2.2.1 as constantesTrue eFalse foram adicionadas (subclasses de 1 e 0 respectivamente). A comparação binária retorna uma das duas constantes acima.

Os operadores booleanosand eor também seguem a avaliação mínima. Por exemplo,y == 0 or x/y > 100 nunca lançará a exceção de divisão por zero.

Interpretador interativo

[editar |editar código]

O interpretador interativo é uma característica diferencial da linguagem, porque há a possibilidade de testar o código de um programa e receber o resultado em tempo real, antes de iniciar acompilação ou incluí-las nos programas. Por exemplo:

>>>1+12>>>>>>a=1+1>>>printa2>>>print(a)2>>>
Nota: A partir da versão 3.0, o comandoprint passou a ser uma função, sendo obrigatório o uso de parênteses.[38]

Análise léxica

[editar |editar código]
Exemplo de script

No segundo capítulo doManual de Referência da Linguagem Python é citado que aanálise léxica é uma análise do interpretador em si, os programas são lidos por umanalisador sintático que divide o código emtokens.

Todo programa é dividido em linhas lógicas que são separadas pelotokenNEWLINE ouNOVA LINHA, as linhas físicas são trechos de código divididos pelo caractereENTER. Linhas lógicas não podem ultrapassar linhas físicas com exceção de junção de linhas, por exemplo:

ifresultado>2and \1<=5and \2<5:print('Resultado:%f'%d)

ou

MESES_DO_ANO=['janeiro','fevereiro','março','abril','maio','junho','julho','agosto','setembro','outubro','novembro','dezembro']

Para a delimitação de blocos de códigos, os delimitadores são colocados em umapilha e diferenciados por suaindentação, iniciando a pilha com valor 0 (zero) e colocando valores maiores que os anteriores na pilha. Para cada começo de linha, o nível de indentação é comparado com o valor do topo da pilha. Se o número da linha for igual ao topo da pilha, a pilha não é alterada. Se o valor for maior, a pilha recebe o nível de indentação da linha e o nomeINDENT (empilhamento). Se o nível de indentação for menor, então é desempilhado até chegar a um nível de indentação recebendo o nomeDEDENT (desempilhamento). Se não encontrar nenhum valor, é gerado um erro de indentação.

Abaixo um exemplo de permutação, retirado do capítulo 2.1 sobre Estrutura de linhas na Análise léxica do Manual de Referência da linguagem (Language Reference Manual):

         def perm(l):                   NOVA LINHAINDENT        if len(l) <= 1:           NOVA LINHAINDENT           return[1]              NOVA LINHADEDENT        r = [ ]                   NOVA LINHA              for i in range(len(l)):   NOVA LINHAINDENT            s = l[:i] + l[i+1:]   NOVA LINHA                  p = perm(s)           NOVA LINHADEDENT        for x in p:               NOVA LINHAINDENT            r.append(l[i:i+1]+x)  NOVA LINHADEDENT        return r

Indentação

[editar |editar código]

Python foi desenvolvido para ser uma linguagem de fácil leitura, com um visual agradável, frequentemente usando palavras e não pontuações como em outras linguagens. Para a separação de blocos de código, a linguagem usa espaços em branco eindentação ao invés de delimitadores visuais como chaves (C, Java) ou palavras (BASIC,Fortran,Pascal). Diferente de linguagens com delimitadores visuais de blocos, em Python a indentação é obrigatória. O aumento da indentação indica o início de um novo bloco, que termina da diminuição da indentação.

Usando umeditor de texto comum é muito fácil existir erros de indentação, o recomendado é configurar o editor conforme aanálise léxica do Python ou utilizar umaIDE. Todas as IDE que suportam a linguagem fazem indentação automaticamente.

Exemplo:

Indentação correta
defvalor1():whileTrue:try:c=int(input('Primeiro Valor: '))returncexceptValueError:print'Inválido!'

Indentação incorreta
defvalor1():whileTrue:try:c=int(input('Primeiro Valor: '))returncexceptValueError:print'Inválido!'

O código está correto para os dois exemplos, mas o analisador léxico verificará se a indentação está coerente. O analisador reconhecerá aspalavras reservadaswhile,def,try,except,return,print e ascadeias de caracteres entre aspas simples e a indentação, e se não houver problemas o programa executará normalmente, senão apresentará a exceção: "Seu programa está com erro no bloco de indentação".

Na internet, há uma comparação de velocidade e de codificação entre as linguagens Python e BASIC, esta última, o dialeto BBC BASIC for Windows.

Compilador de bytecode

[editar |editar código]

A linguagem é de altíssimo nível, como já dito, mas ela também podecompilar seus programas para que a próxima vez que o executar não precise compilar novamente o programa, reduzindo o tempo de carga na execução.

Utilizando o interpretador interativo não é necessário a criação do arquivo de Python compilado, os comandos são executados interativamente. Porém quando um programa ou um módulo é evocado, o interpretador realiza a análise léxica e sintática, compila o código de alto nível se necessário e o executa namáquina virtual da linguagem.

Obytecode é armazenado em arquivos com extensão.pyc ou.pyo, este último no caso debytecode otimizado. Interessante notar que obytecode da linguagem também é de alto nível, ou seja, é mais legível aos seres humanos que o código de byte do C, por exemplo. Para descompilar um código de byte é utilizado o módulodis da biblioteca padrão da linguagem e existem módulos de terceiros que tornam obytecode mais confuso, tornando a descompilação ineficaz.

Normalmente, o Python trabalha com dois grupos de arquivos:

  1. Os módulos donúcleo da linguagem, sua biblioteca padrão e os módulos independentes, criados pelo usuário.
  2. No núcleo do interpretador existe o analisador léxico, o analisador sintático que utilizaEstruturas de Objetos (tempo de execução), o Compilador quealoca memória (tempo de execução) e depois do Avaliador de código que modifica oestado atual do programa (tempo de execução), mostrando resultado para o usuário.

Orientação a objetos

[editar |editar código]

Python suporta a maioria das técnicas daprogramação orientada a objeto. Qualquer objeto pode ser usado para qualquer tipo, e o código funcionará enquanto haja métodos e atributos adequados. O conceito de objeto na linguagem é bastante abrangente: classes, funções, números e módulos são todos considerados objetos. Também há suporte parametaclasses,polimorfismo, eherança (inclusiveherança múltipla). Há um suporte limitado para variáveis privadas.

Na versão 2.2 de Python foi introduzido um novo estilo de classes em que objetos e tipos foram unificados, permitindo a especialização de tipos. Já a partir da versão 2.3 foi introduzido um novo método de resolução de ambiguidades para heranças múltiplas.[39]

Uma classe é definida comclass nome:, e o código seguinte é a composição dos atributos. Todos os métodos da classe recebem uma referência a uma instância da própria classe como seu primeiro argumento, e a convenção é que se chame este argumentoself. Assim os métodos são chamadosobjeto.método(argumento1, argumento2, ...) e são definidos iguais a uma função, comométodo(self, argumento1, argumento2, ...). Veja que o parâmetroself conterá uma referência para a instância da classe definida emobjeto quando for efetuada esta chamada. Os atributos da classe podem ser acessados em qualquer lugar da classe, e os atributos de instância (ou variável de instância) devem ser declarados dentro dos métodos utilizando a referência à instância atual (self)(ver código contextualizadoem anexo).

Em Python não existe proteção dos membros duma classe ou instância pelo interpretador, o chamadoencapsulamento. Convenciona-se que atributos com o nome começando com um _ são de uso privado da classe, mas não há um policiamento do interpretador contra acesso a estes atributos. Uma exceção são nomes começando com__, no caso em que o interpretador modifica o nome do atributo(ver código contextualizadoem anexo).

Python permite polimorfismo, que condiz com a reutilização de código. É fato que funções semelhantes em várias partes do software sejam utilizadas várias vezes, então definimos esta função como uma biblioteca e todas as outras funções que precisarem desta a chamam sem a necessidade de reescrevê-la(ver código contextualizadoem anexo).

Python não possui overloading; não é possível criar duas funções com o mesmo nome, pois elas são consideradas atributos da classe. Caso o nome da função se repita em outra assinatura, o interpretador considera esta última como override e sobrescreve a função anterior. Algumas operações entre diferentes tipos são realizadas através de coerção (ex.: 3.2 + 3).

É possível encapsular abstrações em módulos e pacotes. Quando um arquivo é criado com a extensão .py, ele automaticamente define um módulo. Um diretório com vários módulos é chamado de pacote e deve conter um modulo chamado __init__, para defini-lo como principal. Estas diferenciações ocorrem apenas no sistema de arquivos. Os objetos criados são sempre módulos. Caso o código não defina qual dos módulos será importado, o padrão é o __init__.

Programação funcional

[editar |editar código]

Uma das construções funcionais de Python écompreensão de listas, uma forma de construir listas. Por exemplo, pode-se usar a técnica para calcular as cinco primeiras potências de dois. O algoritmoquicksort também pode ser expressado usando a mesma técnica(ver códigos contextualizados para ambos os casosem anexo).

Em Python, funções são objetos de primeira classe que podem ser criados e armazenados dinamicamente. O suporte a funções anônimas está na construçãolambda (cálculo Lambda). Não há disponibilidade de funções anônimas de fato, pois os lambdas contêm somente expressões e não blocos de código.

Python também suportaclausuras léxicas desde a versão 2.2(ver códigos contextualizados para ambos os casosem anexo). Jágeradores foram introduzidos na versão 2.2 e finalizados na versão 2.3, e representam o mecanismo de Python para aavaliação preguiçosa de funções(ver códigos contextualizados para ambos os casosem anexo).

Tratamento de exceções

[editar |editar código]

Python suporta e faz uso constante detratamento de exceções como uma forma de testar condições de erro e outros eventos inesperados no programa. É inclusive possível capturar uma exceção causada por um erro de sintaxe. O estilo da linguagem apóia o uso de exceções sempre que uma condição de erro pode aparecer. Por exemplo, ao invés de testar a disponibilidade de acesso a um recurso, a convenção é simplesmente tentar usar o recurso e capturar a exceção caso o acesso seja rejeitado (recurso inexistente, permissão de acesso insuficiente, recurso já em uso, ...).

Exceções são usadas frequentemente como uma estrutura de seleção, substituindo blocosif-else, especialmente em situações que envolvemthreads. Uma convenção de codificação é o EAFP, do inglês, "é mais fácil pedir perdão que permissão". Isso significa que em termos de desempenho é preferível capturar exceções do que testar atributos antes de os usar. Segue abaixo exemplos de código que testam atributos ("pedem permissão") e que capturam exceções ("pedem perdão"):

Teste de atributo
ifhasattr(spam,'eggs'):ham=spam.eggselse:handle_error()

Captura de exceção
try:ham=spam.eggsexceptAttributeError:handle_error()

Ambos os códigos produzem o mesmo efeito, mas há diferenças de desempenho. Quandospam possui o atributoeggs, o código que captura exceções é mais rápido. Caso contrário, a captura da exceção representa uma perda considerável de desempenho, e o código que testa o atributo é mais rápido. Na maioria dos casos o paradigma da captura de exceções é mais rápido, e também pode evitar problemas deconcorrência.[40] Por exemplo, num ambiente multitarefa, o espaço de tempo entre o teste do atributo e seu uso de fato pode invalidar o atributo, problema que não acontece no caso da captura de exceções.

Biblioteca padrão

[editar |editar código]

Python possui uma grandebiblioteca padrão, geralmente citada como um dos maiores trunfos da linguagem,[41] fornecendo ferramentas para diversas tarefas. Por conta da grande variedade de ferramentas fornecida pela biblioteca padrão, combinada com a habilidade de usar linguagens de nível mais baixo como C e C++, Python pode ser poderosa para conectar componentes diversos de software.

A biblioteca padrão conta com facilidades para escrever aplicações para aInternet, contando com diversos formatos eprotocolos comoMIME eHTTP. Também há módulos para criarinterfaces gráficas, conectar embancos de dados relacionais e manipularexpressões regulares.

Algumas partes da biblioteca são cobertas por especificações (por exemplo, a implementaçãoWSGI dawsgiref segue o PEP 333[42]), mas a maioria dos módulos não segue.

Interoperabilidade

[editar |editar código]

Um outro ponto forte da linguagem é sua capacidade de interoperar com várias outras linguagens, principalmente código nativo. A documentação da linguagem inclui exemplos de como usar a Python C-API para escrever funções em C que podem ser chamadas diretamente de código Python - mas atualmente esse sequer é o modo mais indicado de interoperação, havendo alternativas tais comoCython,Swig oucffi. Abiblioteca Boost doC++ inclui uma biblioteca para permitir a interoperabilidade entre as duas linguagens, e pacotes científicos fazem uso de bibliotecas de alta performance numérica escritos emFortran e mantidos há décadas.

Comentários

[editar |editar código]

Python fornece duas alternativas para documentar o código. A primeira é o uso de comentários para indicar o que certo código faz. Comentários começam com# e são terminados pela quebra da linha. Não há suporte para comentários que se estendem por mais de uma linha; cada linha consecutiva de comentário deve indicar#. A segunda alternativa é o uso de cadeias de caractere, literais de texto inseridos no código sem atribuição. Cadeias de caracteres em Python são delimitadas por" ou' para única linha e por""" ou''' para múltiplas linhas. Entretanto, é convenção usar o métodos de múltiplas linhas em ambos os casos.

Diferente de comentários, a cadeias de caracteres usadas como documentação são objetos Python e fazem parte do código interpretado. Isso significa que um programa pode acessar sua própria documentação e manipular a informação. Há ferramentas que extraem automaticamente essa documentação para a geração da documentação deAPI a partir do código. Documentação através de cadeias de caracteres também pode ser acessada a partir do interpretador através da funçãohelp().

Exemplos

[editar |editar código]

Programa Olá Mundo

[editar |editar código]
Ver artigo principal:Programa Olá Mundo
print("Olá, Mundo!")

Algoritmo de Trabb Pardo-Knuth

[editar |editar código]
Ver artigo principal:Algoritmo de Trabb Pardo-Knuth
frommathimportsqrtdeff(t):returnsqrt(abs(t))+5*t**3a=[float(input())for_inrange(11)]fori,tinreversed(list(enumerate(a))):y=f(t)print(i,"TOO LARGE"ify>400elsey)

Ponto flutuante em Python na maioria das plataformas é IEEE 754, que pode retornar valores "nan" e "inf", oulançar uma exceção.

Analisador sintático

[editar |editar código]
Ver artigo principal:Análise sintática (computação)

Exemplo de umanalisador sintático usando umagramática de análise sintática de expressão (PEG):

#!/usr/bin/env python3frompyparsingimportChar,ParseException,Word,WordEnd,srangedeffrom_hex(tokens):return[int(tokens[0],base=16)]hex_primary=(Word(srange("[a-fA-F0-9]"),max=2).set_parse_action(from_hex).set_name("hex integer"))hex_color=(Char("#").suppress()+hex_primary.set_results_name("red")+hex_primary.set_results_name("green")+hex_primary.set_results_name("blue")+WordEnd())defmain():try:color=hex_color.parse_string("#2F14DF").as_dict()print(f"#2F14DF =>{color}")exceptParseExceptionaserr:print(err.explain())if__name__=="__main__":main()

Interface de linha de comandos

[editar |editar código]
Ver artigo principal:Interface de linha de comandos

Exemplo de uma implementação doecho doUnix:

#!/usr/bin/env python3__version__="0.1.0"fromargparseimportArgumentParserfromsysimportstdoutdefecho(strip_trailing_newline,strings):stdout.write(" ".join(strings))ifnotstrip_trailing_newline:print()if__name__=="__main__":parser=ArgumentParser(usage="%(prog)s [OPÇÃO]... [TEXTO]...",description="Ecoa o(s) TEXTO(s) para a saída padrão.",)parser.add_argument("--version",action="version",version=f"%(prog)s{__version__}")parser.add_argument("-n",dest="strip_trailing_newline",action="store_true",help="Não emitir o caractere de nova linha do final",)parser.add_argument("strings",metavar="TEXTO",nargs="*")args=parser.parse_args()echo(args.strip_trailing_newline,args.strings)

Servidor HTTP

[editar |editar código]
Ver artigos principais:Hypertext Transfer Protocol eREST

Exemplo de umweb serviceRESTful (HTTP) usandofunções assíncronas eserialização paraJSON; responde com um número deCPF formatado, se for válido, ao acessarhttp://localhost:8000/consultar-cpf/123:

fromdatetimeimportdatetime,timezonefrombrutilsimportformat_cpf,is_valid_cpffromfastapiimportFastAPIfromfastapi.responsesimportRedirectResponsefrompydanticimportBaseModelapp=FastAPI()classCheckCpfResponse(BaseModel):valid:boolformatted:str|Nonetimestamp:datetime@app.get("/",response_model=RedirectResponse)asyncdefindex():return"/consultar-cpf/123"@app.get("/consultar-cpf/{numbers}",response_model=CheckCpfResponse)asyncdefcheck_cpf(numbers:str):now=datetime.now(timezone.utc)valid=is_valid_cpf(numbers)return{"valid":valid,"formatted":format_cpf(numbers)ifvalidelseNone,"timestamp":now.isoformat(),}

Pode ser executado com o seguinte comando:

$fastapidevmain.py

Banco de dados

[editar |editar código]

Python possui várias bibliotecas para interagir com bancos de dados, como por exemplo osqlite3 (já embutido no Python).[43]

importsqlite3try:# Conecta ao banco de dados (cria o arquivo se não existir)conn=sqlite3.connect('meu_banco.db')print("Conexão com SQLite bem-sucedida!")# Você pode criar um cursor para executar comandos SQLcursor=conn.cursor()# Exemplo: criar uma tabelacursor.execute('''        CREATE TABLE IF NOT EXISTS usuarios (            id INTEGER PRIMARY KEY,            nome TEXT NOT NULL,            email TEXT NOT NULL UNIQUE        )    ''')conn.commit()# Salva as alteraçõesprint("Tabela 'usuarios' criada ou já existente.")exceptsqlite3.Errorase:print(f"Erro ao conectar ou operar o SQLite:{e}")finally:ifconn:conn.close()print("Conexão com SQLite fechada.")

Implementações

[editar |editar código]

A linguagem e seu interpretador estão disponíveis para uso nas mais diversasplataformas, que inclui:Unix (Linux,FreeBSD,Solaris,macOS, etc.);Windows com.NET (IronPython) eplataforma Java (Jython); consoles de jogos eletrônicos; alguns celulares, como a série 60, N8xx (PyMaemo) daNokia epalmtops.

A implementação original e mais conhecida do Python é oCPython, escrita emC e compatível com o padrãoC89,[44] sendo distribuída com uma grande biblioteca padrão escrita em um misto de Python e C. Esta implementação é suportada em diversas plataformas, incluindo Windows e sistemasUnix-like modernos.Stackless Python é uma variação do CPython que implementamicrothreads (permitindomultitarefa sem o uso dethreads), sendo suportada em quase todas as plataformas que a implementação original.

Em 2005 aNokia lançou um interpretador Python para ostelefones celularesS60, chamadoPyS60. Essa versão inclui vários módulos das implementações tradicionais, mas também alguns módulos adicionais para a integração com o sistema operacionalSymbian. Uma implementação paraPalm pode ser encontrada noPippy. Já oPyPy, é a linguagem Python totalmente escrita em Python.

Diversas implementações, como CPython, pode funcionar como uminterpretador de comandos em que o usuário executa as instruções sequencialmente, recebendo o resultado automaticamente. A execução compilada do código oferece um ganho substancial em velocidade, com o custo da perda dainteratividade.

Aplicações

[editar |editar código]

Alguns grandes projetos utilizam Python, como por exemplo: oservidor de aplicaçãoZope; o compartilhador de arquivosMnet; o sítioYouTube, e; o cliente originalBitTorrent. Grandes organizações que usam a linguagem incluemGoogle[45] (parte doscrawlers);Yahoo! (para o sítio de grupos de usuários);NASA;[46] aAir Canada (no sistema de gerenciamento de reservas).[47] A linguagem também tem bastante uso na indústria dasegurança da informação.

A linguagem tem sido embarcada comolinguagem de script em diversos softwares, como em programas deedição tridimensional comoMaya,[48]Autodesk Softimage,TrueSpace eBlender.[49] Programas de edição de imagem também a usam para scripts, como oGIMP.[50] Para diversos sistema operacionais a linguagem já é um componente padrão, estando disponível em diversas distribuiçõesLinux. ORed Hat Linux usa Python para instalação, configuração e gerenciamento de pacotes.

Outros exemplos incluem oPlone,sistema de gerenciamento de conteúdo desenvolvido em Python e Zope e, aIndustrial Light & Magic,[51] que produz filmes da sérieStar Wars usando extensivamente Python para acomputação gráfica nos processos de produção dos filmes.

Ver também

[editar |editar código]

Referências

  1. abcd«HISTORY».Fonte do Python (em inglês).Python Software Foundation. Consultado em 5 de junho de 2008. Arquivado dooriginal em 17 de fevereiro de 2016 
  2. «Python 3.14.3 and 3.13.12 are now available!». 3 fevereiro 2026. Consultado em8 fevereiro 2026 
  3. «Starlark Language». Consultado em 25 de maio de 2019.Cópia arquivada em 15 de junho de 2020 
  4. abcGuido van Rossum (Maio de 1996).«Foreword for "Programming Python" (1st ed.)» (em inglês).Python Software Foundation. Consultado em 12 de junho de 2008 
  5. «Ada 83 Reference Manual (raise statement)». Consultado em 7 de janeiro de 2020.Cópia arquivada em 22 de outubro de 2019 
  6. «itertools – Functions creating iterators for efficient looping – Python 3.7.1 documentation».docs.python.org. Consultado em 22 de novembro de 2016.Cópia arquivada em 14 de junho de 2020.This module implements a number of iterator building blocks inspired by constructs from APL, Haskell, and SML. 
  7. Krill, Paul (4 de maio de 2023).«Mojo language marries Python and MLIR for AI development».InfoWorld (em inglês). Consultado em 5 de maio de 2023.Cópia arquivada em 5 de maio de 2023 
  8. abc«PEP 11 – CPython platform support».peps.python.org (em inglês). Consultado em 9 de outubro de 2024 
  9. abc«History and License» (em inglês).Python Software Foundation. Consultado em 7 de abril de 2020 
  10. ab«The Making of Python» (em inglês). Artima Developer. Consultado em 22 de março de 2007 
  11. «Stack Overflow Developer Survey 2018».Stack Overflow. Consultado em 16 de abril de 2018 
  12. O'Grady, Stephen (7 de março de 2018).«The RedMonk Programming Language Rankings: January 2018» (em inglês).RedMonk. Consultado em 13 de março de 2018 
  13. abcdNaomi Hamilton (5 de agosto de 2008).«The A-Z of Programming Languages: Python» (em inglês). Computerworld. Consultado em 17 de agosto de 2008 
  14. ab«Why was Python created in the first place?» (em inglês). Python FAQ. Consultado em 22 de março de 2007 
  15. «LJ #37: Python 1.4 Update» (em inglês). Consultado em 29 de abril de 2007. Arquivado dooriginal em 1 de maio de 2007 
  16. Guido van Rossum.«Computer Programming for Everybody» (em inglês). Consultado em 22 de março de 2007. Arquivado dooriginal em 23 de fevereiro de 2009 
  17. A.M. Kuchling and Moshe Zadka.«What's New in Python 2.0» (em inglês). Consultado em 22 de março de 2007. Arquivado dooriginal em 14 de dezembro de 2009 
  18. ab«History of the software».Referência da Biblioteca Python (em inglês). Consultado em 22 de março de 2007 
  19. Jeremy Hylton.«Statically Nested Scopes» (em inglês). Consultado em 22 de março de 2007 
  20. «2 PEPs 252 and 253: Type and Class Changes» (em inglês).Python Software Foundation. Consultado em 11 de junho de 2008 
  21. «4 PEP 255: Simple Generators» (em inglês).Python Software Foundation. Consultado em 11 de junho de 2008 
  22. «PEP 282 - A Logging System» (em inglês).Python Software Foundation. Consultado em 11 de junho de 2008 
  23. «8 PEP 282: The logging Package» (em inglês).Python Software Foundation. Consultado em 11 de junho de 2008 
  24. «PEP 318 - Decorators for Functions and Methods» (em inglês).Python Software Foundation. Consultado em 11 de junho de 2008 
  25. «5 PEP 318: Decorators for Functions and Methods» (em inglês).Python Software Foundation. Consultado em 11 de junho de 2008 
  26. A.M. Kuchling (1 de outubro de 2008).«What's New in Python 2.6» (em inglês).Python Software Foundation. Consultado em 3 de outubro de 2008 
  27. «Python 3.0 Release» (em inglês).Python Software Foundation. Consultado em 3 de dezembro de 2008 
  28. Sarah Stokely (1 de fevereiro de 2008).«Python 3.0 to be backwards incompatible» (em inglês). iTnews. Consultado em 11 de junho de 2008 
  29. Georg Brandl.«Make print a function» (em inglês). Consultado em 3 de outubro de 2008 
  30. «Diferenças entre Python 2 e Python 3». Blog da Caelum. Consultado em 16 de março de 2019 
  31. «PEP 20 - The Zen of Python» (em inglês). Python - Núcleo de Desenvolvimento. Consultado em 15 de janeiro de 2010 
  32. abcdefghijklm«20 Most Popular Python IDEs in 2024: Code Like a Pro».www.simplilearn.com (em inglês). Consultado em 8 de agosto de 2024 
  33. «Python support in Visual Studio on Windows».learn.microsoft.com (em inglês). 18 de abril de 2024. Consultado em 28 de outubro de 2024 
  34. «Classes — Random Remarks».Python Documentation (em inglês).Python Software Foundation 
  35. DOWNEY, Allen B.Pense em Python. [S.l.]: Novatec. 38 páginas.ISBN 9788575225080 
  36. «New Keywords».Python v3.5 documentation. Docs.python.org. Consultado em 1 de junho de 2016.Cópia arquivada em 18 de junho de 2016 
  37. «PEP 634 – Structural Pattern Matching: Specification».Python Enhancement Proposals (PEP) (em inglês). Consultado em 8 de agosto de 2024 
  38. «What's New In Python 3.0» (em inglês).Python Software Foundation. Consultado em 15 de janeiro de 2011 
  39. Michele Simionato.«The Python 2.3 Method Resolution Order» (em inglês).Python Software Foundation. Consultado em 11 de junho de 2008 
  40. «EAFP vs LBYL (was Re: A little disappointed so far)». web.archive.org. Consultado em 6 de maio de 2012. Arquivado dooriginal em 29 de setembro de 2007 
  41. Przemyslaw Piotrowski (Julho de 2006).«Build a Rapid Web Development Environment for Python Server Pages and Oracle» (em inglês).Oracle. Consultado em 11 de junho de 2008 
  42. Phillip J. Eby (7 de dezembro de 2003).«PEP 333 -- Python Web Server Gateway Interface v1.0» (em inglês).Python Software Foundation. Consultado em 11 de junho de 2008 
  43. «sqlite3, interface DB-API 2.0 interface para bancos de dados SQLite».Python Documentation. Consultado em 24 de julho de 2025 
  44. Guido van Rossum (5 de julho de 2001).«PEP 7 -- Style Guide for C Code» (em inglês).Python Software Foundation. Consultado em 11 de junho de 2008 
  45. «Quotes about Python» (em inglês).Python Software Foundation. Consultado em 11 de junho de 2008 
  46. Daniel G. Shafer (17 de janeiro de 2003).«Python Streamlines Space Shuttle Mission Design» (em inglês).Python Software Foundation. Consultado em 11 de junho de 2008 
  47. Darryl K. Taft (5 de março de 2005).«Python Slithers into Systems» (em inglês). eWEEK. Consultado em 11 de junho de 2008 
  48. «Introduction to Maya Python API».Documentação do Maya (em inglês).Autodesk. Consultado em 18 de julho de 2008 
  49. «Python Scripts» (em inglês).Blender. Consultado em 18 de julho de 2008. Arquivado dooriginal em 18 de junho de 2012 
  50. James Henstridge (16 de maio de 2006).«GIMP Python Documentation».Documentação do GIMP (em inglês).GIMP. Consultado em 18 de julho de 2008 
  51. Robin Rowe (1 de julho de 2002).«Industrial Light & Magic» (em inglês). Linux Journal. Consultado em 18 de julho de 2008 

Bibliografia

[editar |editar código]

Ligações externas

[editar |editar código]
Outros projetosWikimedia também contêm material sobre este tema:
WikcionárioDefinições noWikcionário
WikilivrosLivros e manuais noWikilivros
WikiquoteCitações noWikiquote
CommonsCategoria noCommons
Controle de autoridade
Obtida de "https://pt.wikipedia.org/w/index.php?title=Python&oldid=71719550"
Categorias:
Categorias ocultas:

[8]ページ先頭

©2009-2026 Movatter.jp