Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

tutorial de python, Notas de estudo de Engenharia Telemática

Um tutorial muito bom para quem quer se aventurar nessa linguagem tão usada hoje em dia, Python.

Tipologia: Notas de estudo

2011

Compartilhado em 04/03/2011

aleksandro-ferreira-9
aleksandro-ferreira-9 🇧🇷

5

(2)

1 documento

Pré-visualização parcial do texto

Baixe tutorial de python e outras Notas de estudo em PDF para Engenharia Telemática, somente na Docsity! TUTORIAL PYTHON 3.1 Português Instituto Federal de Educação, Ciência e Tecnologia da Paraíba Campus de Campina Grande Curso: Tecnologia em Telemática Semestre: 1° Disciplina: Algoritmos e Lógica de Programação Tutorial de python versão 3.1 Período Letivo: 2010.1 Python é fácil de aprender, poderosa linguagem de programação. Tem eficientes estruturas de dados de alto nível e uma abordagem simples, mas eficazes para a programação orientada a objeto. sintaxe elegante Python e tipagem dinâmica, juntamente com a sua natureza interpretada, tornam uma linguagem ideal para scripting e desenvolvimento rápido de aplicações em muitas áreas, na maioria das plataformas. O interpretador Python e extensa biblioteca padrão estão disponíveis gratuitamente em formato binário ou fonte para todas as principais plataformas do site Python, http://www.python.org/, e pode ser distribuído gratuitamente. O mesmo site também contém distribuições e referências para muitos módulos de terceiros Python livre, programas e ferramentas e documentação adicional. O interpretador Python pode ser facilmente estendido com novas funções e tipos de dados implementados em C ou C + + (ou outros idiomas que pode ser chamado de C). Python também é indicado como uma linguagem de extensão para aplicações personalizável. Este tutorial introduz o leitor informalmente aos conceitos básicos e as características da linguagem Python e do sistema. Ela ajuda a ter um interpretador Python útil para hands-on experiência, mas todos os exemplos são auto-suficientes, de modo que o tutorial pode ser lido off-line também. Para obter uma descrição de objetos padrão e módulos, consulte o Python Standard Library. O Python Language Reference dá uma definição mais formal da língua. Para escrever extensões em C ou C + +, leia Extendendo e incorporação do interpretador Python e Python / C API Reference Manual. Há também vários livros abrangendo Python em profundidade. Este tutorial não pretende ser abrangente e cobrir todas as características individuais, ou mesmo todos os recursos usados. Em vez disso, ele introduz muitas das características mais marcantes do Python, e lhe dará uma boa idéia do sabor da linguagem e estilo. Depois de lê-lo, você será capaz de ler e escrever módulos Python e programas, e você estará pronto para aprender mais sobre a biblioteca Python vários módulos descrita na norma Python Library. O Glossário também vale a atravessar. TUTORIAL PYTHON 3.1 Português * 1. Abrindo seu apetite * 2. Usando o interpretador Python o 2.1. Invocando o Interpretador + 2.1.1. Argumento passando + 2.1.2. Interactive Mode o 2.2. O Intérprete e Seu Ambiente + 2.2.1. Tratamento de erro + 2.2.2. Executável Scripts Python + 2.2.3. O código-fonte Encoding + 2.2.4. O arquivo de inicialização Interactive * 3. Uma Introdução Informal a Python o 3.1. Usando Python como uma calculadora + 3.1.1. Números + 3.1.2. Strings + 3.1.3. Sobre Unicode + 3.1.4. Listas o 3.2. Primeiros passos rumo a programação * 4. Mais Ferramentas de Controle de Fluxo o 4.1. if o 4.2. para instruções o 4.3. A função range () o 4.4. break e continue, e mais cláusulas de Loops o 4.5. passar Demonstrações o 4.6. Definindo Funções o 4.7. Mais sobre Definição de Funções + 4.7.1. Argumento Valores Default + 4.7.2. Argumentos palavra-chave + 4.7.3. Arbitrário listas de argumento + 4.7.4. Descompactando listas de argumento + 4.7.5. Lambda Forms + 4.7.6. Documentação Strings o 4.8. Intermezzo: Estilo de Codificação * 5. Estruturas de Dados o 5.1. Mais informações sobre listas + 5.1.1. Usando Listas como pilhas + 5.1.2. Usando listas de filas + 5.1.3. Lista de compreensões + 5.1.4. Compreensões lista aninhada o 5.2. A declaração del o 5.3. Tuplas e Sequências o 5.4. Sets o 5.5. Dicionários o 5.6. Looping Técnicas o 5.7. Mais informações sobre as Condições TUTORIAL PYTHON 3.1 Português programa que poderia usar uma linguagem de extensão, e você não quer para conceber e implementar uma nova linguagem para sua aplicação. Python é apenas a língua para você. Você pode escrever um script shell Unix ou Windows arquivos em lote para algumas dessas tarefas, mas scripts shell são melhores movendo arquivos e alterar dados de texto, não é bem adequado para aplicações gráficas e jogos. Você pode escrever um C / C / programa em Java, mas pode levar muito tempo de desenvolvimento para obter ainda um projecto de programa de primeira. Python é simples de usar, disponível para Windows, Mac OS X e sistemas operacionais Unix, e vai ajudá-lo a começar o trabalho feito mais rapidamente. Python é simples de usar, mas é uma linguagem de programação, oferecendo muito mais estrutura e apoio a grandes programas de shell scripts ou arquivos em lote pode oferecer. Por outro lado, Python também oferece a verificação de erros muito mais do que C, e sendo uma linguagem de muito alto nível, tem tipos de dados de alto nível, integrada, tais como matrizes flexíveis e dicionários. Devido ao seu carácter mais geral de tipos de dados Python é aplicável a um domínio de problema muito maior do que Awk ou até mesmo Perl, mas muitas coisas são, pelo menos, tão fácil em Python como em outras línguas. Python permite dividir seu programa em módulos que podem ser reutilizados em outros programas Python. Ele vem com uma grande coleção de módulos-padrão que você pode usar como base de seus programas - ou como exemplos para começar a aprender a programar em Python. Alguns destes módulos oferecem coisas como arquivo I / O chamadas de sistema, sockets, e até mesmo interfaces de toolkits de interface gráfica do usuário como Tk. Python é uma linguagem interpretada, que você pode economizar tempo considerável durante o desenvolvimento do programa porque não compilação e ligação é necessária. O intérprete pode ser usado interativamente, o que torna a experiência mais fácil com as características da linguagem, escrever programas usar e deitar fora, ou para testar as funções durante o desenvolvimento do programa de baixo para cima. É também uma calculadora de mesa à mão. Python permite que os programas a serem gravados e lidos de forma compacta. Programas escritos em Python são tipicamente muito menor do que equivalente C, C, ou de programas Java, por várias razões: * Os tipos de alto nível, os dados permitem que você expresse operações complexas em uma única instrução; * Agrupamento declaração é feita por identação ao invés de início e término entre parênteses; * As declarações nenhuma variável ou argumento são necessárias. Python é extensível: se você sabe programar em C é fácil adicionar uma nova função interna ou módulo para o intérprete, seja para desempenhar operações críticas em máxima velocidade, ou para vincular programas Python a bibliotecas que só poderá ser em formato TUTORIAL PYTHON 3.1 Português binário (como uma biblioteca de gráficos específicos do fornecedor). Uma vez que você está realmente viciado, você pode vincular o interpretador Python em um aplicativo escrito em C e utilizá-lo como uma extensão ou uma linguagem de comando para o aplicativo. By the way, a linguagem é nomeado após o show da BBC "Monty Python's Flying Circus" e não tem nada a ver com répteis. Fazendo referências a esquetes de Monty Python na documentação não é apenas permitido, é encorajado! Agora que você está todo animado sobre Python, você vai querer examiná-lo em alguns detalhes. Desde que a melhor maneira de aprender uma língua é usá-lo, o tutorial convida-o a brincar com o interpretador Python que você lê. No próximo capítulo, a mecânica de usar o interpretador é explicada. Esta informação é bastante mundano, mas essencial para experimentar os exemplos mostrados posteriormente. O resto do tutorial introduz várias características da linguagem Python e do sistema através de exemplos, começando com simples expressões, declarações e tipos de dados, através de funções e módulos e, finalmente, tocar em cima de conceitos avançados como exceções e classes definidas pelo usuário. 2. Usando o interpretador Python 2.1. Invocando o Interpreter O interpretador Python é geralmente instalado em / usr/local/bin/python3.1 sobre aquelas máquinas onde se encontra disponível, colocando / usr / local / bin no caminho de seu shell do Unix pesquisa torna possível para iniciá-lo, digitando o comando python3.1 para o shell. [1] Desde a escolha do diretório onde vive o intérprete é uma opção de instalação, outros locais são possíveis, verifique com seu guru local de Python ou administrador do sistema. (Ex.: / usr / local / python é uma localização alternativa popular.) Em máquinas Windows, a instalação do Python é normalmente colocado em C: \ Python31, mas você pode alterar isso quando você estiver executando o instalador. Para adicionar esse diretório ao seu caminho, você pode digitar o seguinte comando no prompt de comando em uma caixa de DOS: % Path set path =%; C: \ python31 Digitar um caractere de fim-de-arquivo (Control-D em Unix, Control-Z em Windows) para as causas primárias prompt do interpretador a sair com um status de saída zero. Se isso não funcionar, você pode sair do interpretador, digitando o seguinte comando: quit (). TUTORIAL PYTHON 3.1 Português O intérprete de recursos de edição de linha geralmente não são muito sofisticados. Em Unix, quem instalou o intérprete pode ter habilitado o suporte para a biblioteca readline GNU, que adiciona mais elaborado edição interactiva e histórico. Talvez o mais rápido verificar se a edição de linha de comando é suportado está digitando Control-P para o Python primeiro prompt que você começa. Se ele apita, tem edição de linha de comando, ver apêndice Interactive Input Editando História e substituição de uma introdução para as chaves. Se nada parece acontecer, ou se ^ P é ecoado, edição de linha de comando não está disponível, você só vai poder usar backspace para remover caracteres da linha atual. O intérprete atua tanto como o shell do Unix: quando chamado com entrada padrão conectado a um dispositivo tty, ele lê e executa comandos interativamente; quando chamado com um argumento de nome de arquivo ou com um arquivo como entrada padrão, ele lê e executa um script que arquivo. Uma segunda maneira de começar o intérprete de comando python-c [arg] ..., que executa a instrução (s) no comando, análoga à opção c do shell. Uma vez que geralmente contêm declarações Python espaços ou outros caracteres que são especiais para o shell, que é geralmente aconselhada para citar comando em sua totalidade com aspas simples. Alguns módulos Python são também úteis como scripts. Estes podem ser chamados usando o módulo python-m [arg] ..., que executa o arquivo de origem para o módulo como se você tivesse escrito o seu nome completo na linha de comando. Observe que há uma diferença entre o arquivo python e <python arquivo. Neste último caso, as solicitações de entrada do programa, como chamar sys.stdin.read (), são cumpridos de arquivo. Uma vez que este arquivo já foi lido até o fim pelo analisador antes de o programa inicia a execução, o programa vai encontrar fim-de-arquivo imediatamente. No primeiro caso (que é geralmente o que você quiser) estão satisfeitos a partir de qualquer arquivo ou dispositivo está conectado à entrada padrão do interpretador Python. Quando um arquivo de script é utilizado, às vezes é útil para ser capaz de executar o script e depois entrar em modo interativo. Isso pode ser feito passando-i antes do script. (Isso não funciona se o script é lida da entrada padrão, pela mesma razão, como explicado no parágrafo anterior). 2.1.1. Argumento passando Quando conhecido o intérprete, o nome do script e depois argumentos adicionais são passados para o script no sys.argv variável, que é uma lista de strings. Seu comprimento é pelo menos um, quando nenhum script e nenhum argumento é dado, sys.argv [0] é uma seqüência vazia. Quando o nome do script é dada como '-' (significando entrada padrão), sys.argv [0] é definido como '-'. Quando o comando-c é usado, sys.argv [0] é definido como 'c'. Quando o módulo-M é usado, sys.argv [0] é definido como o nome completo do módulo localizado. Opções encontradas após o comando-c ou-m módulo não são consumidos pelo processamento do interpretador Python é opção, mas deixou em sys.argv para o comando ou TUTORIAL PYTHON 3.1 Português Quando você usa Python interativamente, é frequentemente útil para ter um padrão comandos executados toda vez que o intérprete é iniciado. Você pode fazer isso definindo uma variável de ambiente denominada PYTHONSTARTUP com o nome de um arquivo contendo os comandos de start-up. Isso é semelhante ao. Característica do perfil do shell do Unix. Este arquivo é somente leitura em sessões interativas, e não quando Python lê comandos de um script, e não quando o / dev / tty é dado como a fonte explícita de comandos (que de outra forma se comporta como uma sessão interativa). Ele é executado no mesmo namespace onde comandos interativos são executadas, de modo que os objetos que ele define ou importação podem ser usados sem qualificação na sessão interativa. Você também pode alterar as instruções sys.ps1 e sys.ps2 neste arquivo. Se você quiser ler um arquivo adicional start-up do diretório atual, você pode programar isso no global start-up de arquivos usando o código como se os.path.isfile ('. Pythonrc.py): exec (open (' . pythonrc.py). read ()). Se você quiser usar o arquivo de inicialização em um script, você deve fazer isso de forma explícita no script: OS importação filename = os.environ.get ('PYTHONSTARTUP) se filename e os.path.isfile (filename): exec (open (filename). read ()) Notas de Rodapé [1] Em Unix, o interpretador Python 3.x é instalado por padrão, não com o python executável nomeado, para que não entre em conflito com o Python 2.x instalado simultaneamente executável. [2] Um problema com o pacote GNU Readline pode impedir isso. 3. Uma Introdução Informal a Python ¶ Nos exemplos a seguir, a entrada e saída são distinguidos pela presença ou ausência de avisos (>>> e ...): a repetir o exemplo, você deve digitar tudo após o prompt linhas, quando aparece o prompt; que não começam estão com uma saída rápida do interpretador. Observe que um prompt secundário em uma linha por si só em um exemplo significa que você deve digitar uma linha em branco, o que é usado para terminar um comando multi-linha. Muitos dos exemplos neste manual, inclusive aqueles inscritos no prompt interativo inclui, comenta. Comentários em Python começar com o cardinal, #, e se estendem até o final da linha física. Um comentário pode aparecer no início de uma linha ou na sequência de espaços em branco ou código, mas não dentro de uma seqüência literal. Um personagem hash dentro de uma seqüência literal é apenas um personagem de hash. Desde que os comentários são para esclarecer código e não são interpretados pelo Python, que pode ser omitido quando se digita em exemplos. TUTORIAL PYTHON 3.1 Português Alguns exemplos: # Este é o primeiro comentário SPAM = 1 # e esse é o segundo comentário # ... e agora uma terceira! STRING = "# Isto não é um comentário." 3.1. Usando Python como uma calculadora ¶ Vamos tentar alguns comandos simples em Python. Inicie o interpretador e aguarde o prompt primário,>>>. (Não deve demorar muito.) 3.1.1. Números ¶ O interpretador atua como uma calculadora simples: você pode digitar uma expressão para ele e ele irá escrever o valor. A sintaxe da expressão é simples: os operadores +, -, * e / funcionam como na maioria dos outros idiomas (por exemplo, Pascal ou C); parênteses podem ser usados para o agrupamento. Por exemplo: >>> 2 +2 4 >>> # Este é um comentário ... 2 2 4 >>> 2 +2 # e comentário sobre a mesma linha de código 4 >>> (50-5 * 6) / 4 5,0 Frações>>> 05/08 # não são perdidos quando dividindo inteiros 1,6 Nota: Você não pode ver exatamente o mesmo resultado; resultados de ponto flutuante podem diferir de uma máquina para outra. Falaremos mais tarde sobre como controlar a aparência da saída de ponto flutuante. Veja também Floating Point Arithmetic: Problemas e limitações para uma ampla discussão de algumas das sutilezas de números de ponto flutuante e suas representações. Para fazer uma divisão inteira e obter um resultado inteiro, descartando qualquer resultado fracionário, não há outro operador, / /: >>> # Integer retorna a divisão do piso: ... 7 / / 3 2 >>> 7 / -3 -3 TUTORIAL PYTHON 3.1 Português O ('=') sinal de igual é usado para atribuir um valor a uma variável. Depois disso, nenhum resultado é exibido antes do próximo prompt interativo: >> Largura> = 20 >> Altura> = 5 * 9 >>> Width * height 900 Um valor pode ser atribuído a diversas variáveis simultaneamente: >>> X = y = z = 0 # Zero x, y e z >>> X 0 >>> Y 0 >>> Z 0 Variáveis devem ser "definidos" (atribuído um valor) antes que eles possam ser usados, ou um erro ocorrerá: >>> # Tentar acessar uma variável indefinida ... n Traceback (chamada mais recente passada): Arquivo "<stdin>", line 1, <module> n NameError: 'nome' não está definido Não há suporte completo para ponto flutuante, os operadores com operandos de tipo misto converter o inteiro operando em ponto flutuante: >>> 3 * 3,75 / 1,5 7,5 >>> 7.0 / 2 3,5 Números complexos também são suportados; números imaginários são escritas com um sufixo de j ou números de J. Complexo com um componente diferente de zero real são escritos como (real + imagj), ou pode ser criado com o complexo (real, imag função). >>> 1j * 1J (-1 0 j) >>> 1j * complexas (0, 1) (-1 0 j) >>> 3 +1 j * 3 TUTORIAL PYTHON 3.1 Português Ou, strings podem ser cercados em um par de correspondência triple-aspas: "" ou'''. Fim de linhas não precisam ser escapados ao usar triple-aspas, mas elas serão incluídas na seqüência. print ("" " Uso: thingy [OPTIONS] H-Apresentação de mensagem de esse uso -H Hostname hostname para conectar-se "" ") produz o seguinte resultado: Uso: thingy [OPTIONS] H-Apresentação de mensagem de esse uso -H Hostname hostname para conectar-se Se fizermos uma seqüência literal "string" crua, seqüências \ n não são convertidas em novas linhas, mas a barra invertida ao final da linha, eo caractere de nova linha na fonte, são incluídos na string como dados. Assim, o exemplo: Olá = r "Esta é uma cadeia bastante longa contendo \ n \ várias linhas de texto quanto você faria em C. " print (Olá) seria de impressão: Esta é uma cadeia bastante longa contendo \ n \ várias linhas de texto quanto você faria em C. Strings podem ser concatenadas (coladas) com o operador +, e repetidas com *: >> Palavra => 'Ajuda' + 'A' >> Palavra> "HelpA ' palavra>>> '<' + * 5 + '>' "<HelpAHelpAHelpAHelpAHelpA> ' Dois literais string próximas umas das outras são automaticamente concatenadas; a primeira linha acima também poderia ter sido escrito palavra Help = '' A ', o que só funciona com dois literais, não com expressões de seqüência arbitrária: ing str>>> '' # <- Esta é ok 'String' str>>> '. strip () ing +' # <- Esta é ok 'String' TUTORIAL PYTHON 3.1 Português str>>> '. strip ()' ing '# <- Esta é inválido Arquivo "<stdin>", line 1, in? 'Str'. Strip () 'ing' ^ SyntaxError: invalid syntax Strings podem ser subscritos (indexado); como no C, o primeiro caractere de uma string tem índice (index) 0. Não há nenhum tipo de caráter independente, um personagem é simplesmente uma seqüência de caracteres de tamanho único. Como na linguagem de programação Ícone, substrings podem ser especificadas com a notação de slice: dois índices separados por dois pontos. >> Palavra> [4] 'A' >> Palavra> [00:02] 'Ele' >> Palavra> [02:04] 'Lp' Slice índices têm padrões útil; uma omitido assume primeiro índice a zero, uma omitido assume segundo índice para o tamanho da string a ser cortado. >>> [Palavra: 2] # Os dois primeiros caracteres 'Ele' >> Palavra> [2: Tudo #], exceto os dois primeiros caracteres "LpA ' Ao contrário de uma string C, strings Python não pode ser mudado. Atribuir para uma posição indexados nos resultados da seqüência de caracteres em uma mensagem de erro: >> Palavra> [0] = 'x' Traceback (chamada mais recente passada): Arquivo "<stdin>", line 1, in? objeto str TypeError: 'não dá suporte a atribuição item >>> [Palavra: 1] = "Splat" Traceback (chamada mais recente passada): Arquivo "<stdin>", line 1, in? objeto str TypeError: 'não dá suporte a atribuição fatia No entanto, a criação de uma nova seqüência com o conteúdo combinado é fácil e eficiente: >>> 'X' + palavra [1]: "XelpA ' palavra>> "Splat '+ [4] "SplatA ' TUTORIAL PYTHON 3.1 Português Aqui está uma invariante útil de operações fatia: s [: i] + s [i:] é igual a s. >>> [Palavra: 2] + word [2:] "HelpA ' >>> [Palavra: 3] + palavra [3]: "HelpA ' índices slice degenerados são tratados normalmente: um índice que é muito grande passa a ter o tamanho da corda, um limite superior menor que o limite inferior retorna uma string vazia. >> Palavra> [1:100] "Elpa" >>> Palavra [10]: '' >> Palavra> [02:01] '' Índices podem ser números negativos, para iniciar a contagem a partir da direita. Por exemplo: >> Palavra> [-1] # O último personagem 'A' >> Palavra> [-2] # O passado-mas-um caráter 'P' >> Palavra> [-2:] # Os dois últimos caracteres 'Pa' >>> [Palavra: -2] # Tudo exceto os dois últimos caracteres "Hel" Mas observe que -0 é realmente o mesmo que 0, por isso ele não contar da direita! >> Palavra> [-0] # (uma vez que é igual a 0 -0) 'H' Out-of-range fatia índices negativos são truncados, mas não tente fazer isso em um único elemento (fatia ou não) os índices: >>> Palavra [-100:] "HelpA ' >> Palavra> [-10] erro # Traceback (chamada mais recente passada): Arquivo "<stdin>", line 1, in? IndexError: índice seqüência fora de alcance TUTORIAL PYTHON 3.1 Português 100 >>> A 1 [: -1] ['Ovos', 100] >>> A [:] 2] bacon + [', 2 * 2 spam [',' ovos ',' bacon ', 4] >>> 3 * a [: 3] Boo + ['!] spam [',' ovos ', 100' spam ',' ovos ', 100' spam ',' ovos ', 100' Boo! '] Ao contrário de cordas, que são imutáveis, é possível mudar elementos individuais da lista: >>> A spam [',' ovos ', 100, 1234] >>> A [2] = a [2] + 23 >>> A spam [',' ovos ', 123, 1234] Atribuição de fatias também é possível, e isso pode até mesmo alterar o tamanho da lista ou limpá-la inteiramente: >>> # Substituir alguns itens: ... um [00:02] = [1, 12] >>> A [1, 12, 123, 1234] >>> # Remova alguns: ... a] [00:02 = [] >>> A [123, 1234] >>> # Inserir alguns: ... a] [1:1 = Bletch [',' xyzzy '] >>> A [123, "Bletch ',' xyzzy ', 1234] >>> # Inserir (uma cópia) de si mesmo no início >>> A [: 0] = a >>> A [123, "Bletch ',' xyzzy ', 1234, 123, Bletch', xyzzy ', 1234] >>> # Limpar a lista: substituir todos os itens de uma lista vazia >>> A [:] = [] >>> A [] A built-in função len () também se aplica às listas: >>> A = ['a', 'b', 'c', 'd'] >> Len> (a) 4 TUTORIAL PYTHON 3.1 Português É possível aninhar listas (criar listas contendo outras listas), por exemplo: >>> Q = [2, 3] > P> = [1, q, 4] >> Len> (p) 3 > P>> [1] [2, 3] > P>> [1] [0] 2 Você pode acrescentar algo ao final da lista: > P>> [1]. Append ('xtra') > P> [1, [2, 3, 'xtra'], 4] >>> Q [2], 3, 'xtra' Note-se que no último exemplo, p [1] e q realmente se referem ao mesmo objeto! Voltaremos ao objeto semântica mais tarde. 3.2. Primeiros passos rumo a programação ¶ Naturalmente, nós podemos utilizar Python para tarefas mais complicadas do que somar dois e dois juntos. Por exemplo, podemos escrever uma primeira sub-seqüência da série de Fibonacci da seguinte forma: >>> # Série de Fibonacci: ... # A soma de dois elementos define o próximo ... a, b = 0, 1 >>> While b <10: ... print (b) ... a, b = b, a + b ... 1 1 2 3 5 8 Este exemplo introduz diversas novas funcionalidades. * TUTORIAL PYTHON 3.1 Português A primeira linha contém uma atribuição múltipla: as variáveis a e b simultaneamente recebem os novos valores 0 e 1. Na última linha deste é usado novamente, demonstrando que as expressões do lado direito são avaliadas antes de qualquer das atribuições lugar. As expressões do lado direito são avaliadas da esquerda para a direita. * O laço while é executado enquanto a condição (aqui: b <10) continua a ser verdade. Em Python, como em C, qualquer valor diferente de zero inteiro é verdade; zero é falso. A condição também pode ser uma string ou lista de valores, na verdade qualquer sequência nada, com um comprimento de zero é verdadeiro, seqüências vazias são falsas. O teste utilizado no exemplo é uma comparação simples. Os operadores de comparação padrão são escritos da mesma forma como no C: <(menor que),> (maior que), == (igual), <= (menor ou igual),> = (maior ou igual a) e! = (não igual). * O corpo do loop é recuado: recuo Python é a maneira de agrupar comandos. Python não (ainda!) Fornecer uma facilidade de edição inteligente de entrada de linha, então você tem que digitar um separador ou espaço (s) para cada linha recuada. Na prática, você vai preparar a entrada mais complicado para Python com um editor de texto, a maioria dos editores de texto têm uma facilidade de auto-travessão. Quando uma instrução composta é inserida de forma interactiva, que deve ser seguido por uma linha em branco para indicar a conclusão (uma vez que o analisador não é possível adivinhar quando você digitou a última linha). Note que cada linha dentro de um bloco de base deve ser recuado no mesmo montante. * A função print () escreve o valor da expressão (s) é dado. Ela difere de apenas escrever a expressão que você quer escrever (como fizemos nos exemplos anteriores calculadora) na forma como ele lida com várias expressões, quantidades ponto flutuante e strings. Strings são impressas sem aspas, e um espaço é inserido entre itens, para que você possa formatar as coisas bem, como este: >>> I = 256 * 256 >>> Print ('O valor de i é, i) O valor de i é 65.536 O fim-chave pode ser usada para evitar a quebra de linha após a saída ou a saída final com uma seqüência diferente: >>> A, b = 0, 1 >>> While b <1000: ... print (b, end = ') ... a, b = b, a + b ... 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 TUTORIAL PYTHON 3.1 Português ... print (i, a [i]) ... 0 Mary 1 teve 2-A 3 pequenas 4 cordeiro Na maioria dos casos, no entanto, é conveniente usar a enumerar () função, consulte Looping Técnicas. Uma coisa estranha que acontece se você acabou de imprimir um intervalo: >>> Print (intervalo) (10) intervalo (0, 10) Em muitas maneiras o objeto retornado por range () se comporta como se fosse uma lista, mas na verdade não é. É um objeto que retorna os itens sucessivos da seqüência desejada quando você iterar sobre ele, mas ele realmente não fazer a lista, economizando espaço. Dizemos que um objeto é iteráveis, ou seja, como um destino adequado para as funções e as construções que esperam algo de que eles podem obter itens sucessivos até que a oferta está esgotada. Vimos que a instrução for é como um iterador. A lista () função é outra, que cria listas de iterables: >>> Lista (intervalo (5)) [0, 1, 2, 3, 4] Mais tarde veremos mais funções que iterables retorno e tomar iterables como argumento. 4.4. break e continue, e mais cláusulas de Loops ¶ A instrução break, como no C, irrompe do menor para que encerram ou while. A instrução continue, também emprestado do C, continua com a próxima iteração do loop. Declarações Loop pode ter uma cláusula else, que é executado quando o laço se encerra por exaustão da lista (com a) ou quando a condição se torne falsa (com tempo), mas não quando o laço é encerrado por um comando break. Isto é exemplificado pelo ciclo seguinte, que procura por números primos: >>> For n in range (2, 10): ... para x no intervalo (2, n): ... se n% x == 0: ... print (n, 'é igual', x, * ', / n / x) ... quebrar TUTORIAL PYTHON 3.1 Português ... else: ... # Loop caiu completamente sem encontrar um factor ... print (n, 'é um número primo ") ... 2 é um número primo 3 é um número primo 4 * 2 é igual a 2 5 é um número primo 6 é igual a 2 * 3 7 é um número primo 8 é igual a 2 * 4 9 é igual a 3 * 3 4.5. Demonstrações passar ¶ A declaração de passar não faz nada. Pode ser utilizado quando é necessária uma declaração sintaticamente, mas o programa não requer nenhuma ação. Por exemplo: >>> While True: ... pass # Busy esperar para interrupção de teclado (Ctrl + C) ... Isto é comumente usado para a criação de classes mínimas: >>> Class MyEmptyClass: ... passar ... Outra passagem lugar pode ser usado como um lugar é detentor de uma função ou órgão subordinado quando você está trabalhando no novo código, permitindo-lhe manter-se pensar em um nível mais abstracto. O passe é ignorado: >> Initlog def> (* args): ... pass # Lembre-se de implementar isso! ... 4.6. ¶ Definindo Funções Podemos criar uma função que escreve a série de Fibonacci para um limite arbitrário: >> Def fib> (n): # escrever série de Fibonacci até n ... "" "Mostra uma série de Fibonacci até n." "" ... a, b = 0, 1 ... enquanto o n <: ... print (a, fim = ') TUTORIAL PYTHON 3.1 Português ... a, b = b, a + b ... print () ... >>> # Agora, chamar a função que acabamos de definir: ... FIB (2000) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 A palavra-chave def introduz uma definição de função. Deve ser seguido do nome da função eo parêntesis lista de parâmetros formais. Os depoimentos que formam o corpo do início da função na linha seguinte, e deve ser recuado. A primeira instrução do corpo da função pode ser opcionalmente uma seqüência literal, esta string é literal string a função de documentação, ou docstring. (Mais sobre docstrings podem ser encontradas na seção Documentação Strings.) Existem ferramentas que utilizam docstrings para produzir automaticamente online ou a documentação impressa, ou para permitir que o usuário navegar interativamente por meio de código, é boa prática incluir docstrings no código que você escreve, então faça disso um hábito. A execução de uma função de introduzir uma nova tabela de símbolos utilizados para as variáveis locais da função. Mais precisamente, olhar todas as atribuições de variáveis em uma loja de função o valor na tabela de símbolos local, referências Considerando primeira variável na tabela de símbolos local, em seguida, nas tabelas de símbolo do local que encerram funções e, em seguida na tabela de símbolos global e, finalmente, no tabela de built-in nomes. Assim, as variáveis globais não podem ser diretamente atribuído um valor dentro de uma função (a não ser chamado em uma declaração global), embora possam ser referenciadas. Os parâmetros reais (argumentos) para uma chamada de função são introduzidos na tabela de símbolos local da função chamada quando é chamado, portanto, argumentos são passados usando a chamada por valor (onde o valor é sempre uma referência de objeto, e não o valor da objeto). [1] Quando uma função chama outra função, a tabela de símbolos do novo local é criado para esse convite. A definição da função introduz o nome da função na tabela de símbolos corrente. O valor do nome da função tem um tipo que é reconhecido pelo interpretador como uma função definida pelo usuário. Este valor pode ser atribuído a outro nome que também pode ser usado como uma função. Isto serve como um mecanismo geral renomear: >> Fib> fib <função em 10042ed0> >>> F = fib >>> F (100) 0 1 1 2 3 5 8 13 21 34 55 89 Vindo de outras línguas, você pode fib objeto que não é uma função, mas um processo, uma vez que não retorna um valor. Na verdade, até mesmo funções sem uma declaração de TUTORIAL PYTHON 3.1 Português print (f) (1) print (f) (2) print (f) (3) Isto irá imprimir [1] [1, 2] [1, 2, 3] Se você não quer que o padrão a ser compartilhada entre as chamadas subseqüentes, você pode escrever a função assim: def f (a, L = None): se L é: Nenhum L = [] L.append (a) retorno L 4.7.2. Argumentos Palavra ¶ Funções também podem ser chamados usando argumentos-chave da chave = valor formulário. Por exemplo, a função do seguinte: papagaio def (tensão, estado = 'a duras', a ação voom = ', type = "Blue norueguês"): print ("- Este papagaio não ação", end = ') print ("se você colocar" tensão ", volts por ele.") print ("- Lovely plumagem, o", tipo) print ("- É", "Estado"! ") poderia ser chamado em qualquer uma das seguintes maneiras: papagaio (1000) papagaio (action = "VOOOOOM, tensão = 1000000) parrot ('a' mil, estado = 'empurrando para cima as margaridas ") parrot ('a' milhões ', desprovida de vida "," salto ") mas as chamadas seguinte tudo seria inválido: papagaio () # exigido argumento ausente Papagaio (tensão = 5.0 a seguir, 'morto') # argumento não-palavra-chave palavra-chave papagaio (110, tensão = 220) # valor duplicado para o argumento parrot (actor = 'John Cleese palavra-chave') # desconhecido TUTORIAL PYTHON 3.1 Português Em geral, uma lista de argumentos deve ter argumentos posicionais seguido por todos os argumentos-chave, onde as palavras devem ser escolhidos de entre os nomes de parâmetro formal. Não é importante se um parâmetro formal tem um valor padrão ou não. Nenhum argumento pode receber um valor mais de uma vez - os nomes dos parâmetros formais correspondendo a argumentos posicionais não podem ser usados como palavras-chave na mesma chama. Aqui está um exemplo que falhar devido a esta restrição: >> Função def> (a): ... passar ... >>> Função (0, a = 0) Traceback (chamada mais recente passada): Arquivo "<stdin>", line 1, in? TypeError: () função tem vários valores para o argumento-chave "a" Quando um parâmetro formal final do formulário ** denominação está presente, ele recebe um dicionário (veja Mapeamento de Tipos - dict) contendo todos os argumentos-chave, exceto para aqueles que corresponde a um parâmetro formal. Isto pode ser combinado com um parâmetro formal do nome * formulário (descrito na próxima subseção), que recebe uma tupla contendo os argumentos posicionais além da lista de parâmetro formal. (* Nome deve ocorrer antes ** nome.) Por exemplo, se definir uma função como esta: cheeseshop def (tipo, os argumentos *, ** palavras-chave): print ("- Você tem algum" tipo "?") print ("- Eu sinto muito, todos nós estamos fora", tipo) por arg em argumentos: print (arg) print ("-" * 40) Teclas ordenadas = (keywords.keys ()) por kw em chaves: print (kw, "", palavras-chave [kW]) Poderia ser chamado assim: cheeseshop ("Limburger", "É muito corrimento, senhor." "É realmente muito, muito corrimento, senhor." lojista = "Michael Palin", client = "John Cleese", sketch = "Cheese Shop Sketch") e é claro que iria imprimir: - Você tem algum Limburger? - Sinto muito, estamos todos de Limburger É muito corrimento, senhor. É realmente muito, muito corrimento, senhor. ---------------------------------------- TUTORIAL PYTHON 3.1 Português cliente: John Cleese lojista: Michael Palin sketch: Cheese Shop Sketch Note que a lista de nomes de argumento-chave é criado por ordenar o resultado das palavras- chave dicionário de teclas () método antes de imprimir o seu conteúdo, se isso não for feito, a ordem na qual os argumentos são impressos é indefinido. 4.7.3. Listas de argumentos arbitrários ¶ Finalmente, menos freqüentemente usado é opção para especificar que uma função pode ser chamada com um número arbitrário de argumentos. Esses argumentos serão embrulhados em uma tupla (ver Tuples e seqüências). Antes do número variável de argumentos, zero ou mais argumentos normais podem ocorrer. write_multiple_items def (arquivo, separador, * args): file.write (separator.join (args)) Normalmente, esses argumentos variádicas serão os últimos na lista de parâmetros formais, até porque colher todos os argumentos de entrada restantes que são passados para a função. Todos os parâmetros formais que ocorrem após o parâmetro args * são argumentos por palavra-chave apenas, o que significa que eles só podem ser utilizados como palavras-chave em vez de argumentos posicionais. >> Concat def> (* args, ="/"): setembro ... sep.join retorno (args) ... >> Concat> ("terra", "Marte", "Venus") »Terra / Marte / Vênus ' >> Concat> ("terra", "Marte", "Vênus", =".") setembro "Earth.mars.venus ' 4.7.4. Argumento Desembalar Lista ¶ A situação inversa ocorre quando os argumentos já estão numa lista ou tupla, mas precisa ser descompactado para uma chamada de função que exige separar argumentos posicionais. Por exemplo, o built-in range () função espera começar a separar e parar de argumentos. Se eles não estão disponíveis separadamente, escreva a chamada de função com o operador *- para descompactar os argumentos de uma lista ou tupla: > Lista> (gama (3, 6)) # chamada normal com argumentos distintos [3, 4, 5] >>> Args = [3, 6] > Lista> (intervalo (* args)) # chamada com argumentos descompactado a partir de uma lista [3, 4, 5] TUTORIAL PYTHON 3.1 Português * Quebrar linhas de modo que não excedam 79 caracteres. Isso ajuda os usuários com telas pequenas e torna possível ter vários arquivos de código lado a lado em telas maiores. * Use linhas em branco para separar as funções e classes, e grandes blocos de código dentro de funções. * Quando possível, colocar os comentários em uma linha própria. * Use docstrings. * Use espaços em torno de operadores e após uma vírgula, mas não diretamente dentro bracketing construções: a = f (1, 2) + g (3, 4). * Nome suas classes e funções de forma consistente, a convenção é usar CamelCase para aulas e lower_case_with_underscores para funções e métodos. Sempre use "eu" como o nome para o argumento primeiro método (ver Um primeiro olhar em classes para mais informações sobre classes e métodos). * Não use fantasia codificações se o seu código é feito para ser usado em ambientes internacionais. padrão do Python, UTF-8, ou mesmo em ASCII melhor trabalho em qualquer caso. * Da mesma forma, não utilizar caracteres não-ASCII em identificadores se houver apenas a menor chance de pessoas falando uma língua diferente vai ler ou manter o código. Notas de Rodapé [1] Na verdade, chamada por referência de objeto seria uma melhor descrição, pois, se um objeto mutável é passado, o chamador vai ver todas as mudanças o receptor faz para ele (itens inseridos em uma lista). 5. Estruturas de Dados Este capítulo descreve algumas coisas que você já aprendeu em mais detalhes, e adiciona algumas coisas novas também. TUTORIAL PYTHON 3.1 Português 5.1. Mais informações sobre listas ¶ A lista de tipo de dados tem alguns métodos mais. Aqui estão todos os métodos de objetos da lista: list.append (x) Adicionar um item ao fim da lista, equivalente a uma len [(a): [] = x]. list.extend (L) Estender a lista anexando todos os itens da lista fornecida, equivalente a uma len [(a):] = L. list.insert (i, x) Inserir um item em uma determinada posição. O primeiro argumento é o índice do elemento que antes de inserir, de forma a.insert (0, x) insere na frente da lista, e a.insert (len (a), x) é equivalente a a.append ( x). list.remove (x) Remove o primeiro item da lista cujo valor é x. É um erro se não houver esse item. list.pop ([i]) Remove o item na posição dada na lista, e devolvê-lo. Se nenhum índice é especificado, a.pop () remove e retorna o último item na lista. (Os colchetes em torno do eu na assinatura do método indicam que o parâmetro é opcional, e não que você deve digitar colchetes nessa posição. Você verá essa notação com frequência na Referência da Biblioteca Python.) list.index (x) Retornar ao índice na lista do primeiro item cujo valor é x. É um erro se não houver esse item. list.count (x) Retorna o número de vezes que x aparece na lista. list.sort () Ordenar os itens da lista, no lugar. list.reverse () Reverter os elementos da lista, no lugar. Um exemplo que utiliza a maior parte da lista de métodos: >>> A = [66,25, 333, 333, 1, 1234,5] >>> Print (a.count (333), a.count (66,25), a.count ('x')) 2 1 0 >> A.insert> (2, -1) >>> A.append (333) TUTORIAL PYTHON 3.1 Português >>> A [66,25, 333, 1, 333, 1, 1234,5, 333] >> A.index> (333) 1 >> A.remove> (333) >>> A [66,25, -1, 333, 1, 1234,5, 333] >> A.reverse> () >>> A [333, 1234,5, 1, 333, -1, 66,25] >> A.sort> () >>> A [-1, 1, 66,25, 333, 333, 1234,5] 5.1.1. Usando Listas como pilhas ¶ A lista de métodos de fazê-lo muito fácil de usar uma lista como uma pilha, onde o último elemento adicionado é o primeiro elemento recuperado ("last-in, first-out"). Para adicionar um item ao topo da pilha, use append (). Para recuperar um item do topo da pilha use pop () sem um índice explícito. Por exemplo: >>> Pilha = [3, 4, 5] >>> Stack.append (6) >>> Stack.append (7) >>> Pilha [3, 4, 5, 6, 7] >>> Stack.pop () 7 >>> Pilha [3, 4, 5, 6] >>> Stack.pop () 6 >>> Stack.pop () 5 >>> Pilha [3, 4] 5.1.2. Usando listas de filas ¶ Também é possível usar uma lista como uma fila, onde o primeiro elemento adicionado é o primeiro elemento recuperado ("first-in, first-out"), no entanto, as listas não são eficientes para essa finalidade. Enquanto acrescenta e aparece a partir do final da lista são rápidos, fazendo inserções ou aparece desde o início de uma lista é lenta (porque todos os outros elementos têm de ser desviado por um). TUTORIAL PYTHON 3.1 Português Agora, se quiser trocar as linhas e colunas, você pode usar uma lista de compreensão: >>> Print ([[linha [i] para a linha em] mat for i in [0, 1, 2]]) [[1, 4, 7], [2, 5, 8], [3, 6, 9]] Especial cuidado deve ser tomado para a compreensão lista aninhada: Para evitar a apreensão quando compreensões lista de nidificação, lido da direita para a esquerda. Uma versão mais detalhada desse trecho mostra o fluxo explicitamente: for i in [0, 1, 2]: para a linha em esteira: print (linha [i], final = "") print () No mundo real, você deve preferir funções embutidas para demonstrações de fluxo de complexos. O zip () função seria fazer um grande trabalho para este caso de uso: >>> Lista (zip (MAT *)) [(1, 4, 7), (2, 5, 8), (3, 6, 9)] Veja Desembalar argumento listas para obter detalhes sobre o asterisco nesta linha. 5.2. A declaração ¶ del Existe uma maneira de remover um item de uma lista dada o seu índice ao invés de seu valor: o comando del. Isso difere da pop () método que retorna um valor. A declaração del também pode ser utilizado para remover fatias de uma lista ou limpar a lista inteira (o que fizemos anteriormente pela atribuição de uma lista vazia para a fatia). Por exemplo: >>> A = [-1, 1, 66,25, 333, 333, 1234,5] >>> Del a [0] >>> A [1, 66,25, 333, 333, 1234,5] >>> Del a [02:04] >>> A [1, 66,25, 1234,5] >>> Del a [:] >>> A [] del também pode ser usado para apagar as variáveis inteiras: TUTORIAL PYTHON 3.1 Português >>> Del a Referenciando o nome de um futuro é um erro (pelo menos até que outro valor é atribuído a ele). Nós vamos encontrar outros usos para del mais tarde. 5.3. Tuplas e Sequências ¶ Nós vimos que listas e strings possuem muitas propriedades comuns, tais como indexação e operações de slicing. Eles são dois exemplos de tipos de dados sequencial (ver seqüência Tipos - str, bytes, ByteArray, lista, tupla, intervalo). Desde que Python é uma linguagem em evolução, tipos de dados de seqüência de outros podem ser adicionados. Existe também um outro padrão de seqüência tipo de dados: a tupla. Uma tupla consiste em uma série de valores separados por vírgulas, por exemplo: >>> T = 12345, 54321, 'Olá!' >>> T [0] 12345 >>> T (12345, 54321, 'Olá!') >>> # Tuplas podem ser aninhadas: ... u = t (1, 2, 3, 4, 5) >>> U ((12345, 54321, 'Olá!'), (1, 2, 3, 4, 5)) Como você vê, em tuplas de saída são sempre colocados entre parênteses, a fim de que tuplas aninhados são interpretados corretamente, elas podem ser de entrada, com ou sem parênteses, embora muitas vezes parênteses são necessários de qualquer forma (se a tupla é parte de uma expressão maior). Tuplas têm muitos usos. Por exemplo: (x, y) pares de coordenadas, registros de funcionários de um banco de dados, etc Tuples, como strings, são imutáveis: não é possível atribuir valores a itens individuais de uma tupla (você pode simular o mesmo efeito com corte e concatenação, embora). Também é possível criar tuplas que contêm objetos mutáveis, como listas. Um problema especial é a construção de tuplas contendo 0 ou 1 itens: a sintaxe tem certos truques para acomodar esses. tuplas vazias são construídas por um par de parênteses vazios; uma tupla com um item é construído seguindo um valor com uma vírgula (que não é suficiente para colocar um único valor entre parênteses). Feio, mas eficaz. Por exemplo: >>> Vazio = () >> Singleton => 'Olá', # <- note trailing comma >>> Len (vazio) 0 >> Len> (singleton) 1 TUTORIAL PYTHON 3.1 Português >> Singleton> ('Olá',) A declaração t = 12345, 54321, 'Olá!' é um exemplo de embalagem tupla: os valores 12345, 54321 e "Olá!" são empacotados juntos em uma tupla. A operação inversa também é possível: >>> X, y, z = t Isso se chama, apropriadamente, o desempacotamento de sequência e trabalha para qualquer seqüência no lado direito. Seqüência descompactar requer que há tantas variáveis no lado esquerdo do sinal de igual como há elementos na seqüência. Note-se que a atribuição múltipla é realmente apenas uma combinação de embalagem e desembalagem tupla seqüência. 5.4. Define ¶ Python também inclui um tipo de dados para conjuntos. Um conjunto é uma coleção não ordenada, sem elementos duplicados. utilizações básicas incluem a adesão de ensaio e eliminar entradas duplicadas. Definir os objetos também apoiar as operações matemáticas como união, intersecção, diferença e diferença simétrica. Chaves ou o set () função pode ser usada para criar jogos. Nota: Para criar um conjunto vazio que você tem que usar set (), não (), o último cria um dicionário vazio, uma estrutura de dados que vamos discutir na próxima seção. Aqui está uma breve demonstração: >> Cesto> = (maçã ',' laranja ', a maçã', 'pêra', laranja ',' banana ') >>> Print (cesta) (Laranja ', banana', 'pera, maçã') ]>> Fruta => Apple [',' laranja ', a maçã', 'pêra', laranja ',' banana ' >> Fruta => set (cesta) # criar um jogo sem duplicatas >> Fruto> (Laranja ', pêra', 'maçã', banana ') >> Fruto> = (laranja ',' maçã ') # sintaxe () é equivalente a [] para listas >> Fruto> (Laranja ', a maçã') laranja>>> 'no sector das frutas # teste rápido adesão Verdadeiro crabgrass>>> 'no sector das frutas Falso >>> # Demonstrar conjunto de operações sobre as cartas originais de duas palavras ... >>> Um jogo = ("Abracadabra") >>> B = set ('alacazam) >>> A # letras originais em um TUTORIAL PYTHON 3.1 Português ... Gallahad pura robin o bravo Quando o loop através de uma seqüência, o índice de posição eo valor correspondente pode ser recuperada, ao mesmo tempo usando a função () enumerar. ]>>> For i, v em enumerar toe (['tic' tac ','): ... print (i, v) ... 0 tic 1 tac Dois dedos Para loop por duas ou mais seqüências ao mesmo tempo, as entradas podem ser emparelhado com o zip () função. ]>>> Perguntas = [nome ',' busca 'de cor' favorito ' >>> Respostas = Lancelot [',' o Santo Graal ','] 'azul >>> Para q, em um zip (perguntas, respostas): ... print ('Qual é a sua (0)? É (1).. formato (q, a)) ... Qual é seu nome? É Lancelot. Qual é a sua missão? É o Santo Graal. Qual é a sua cor favorita? Ela é azul. Para loop em uma seqüência no sentido inverso, em primeiro lugar especificar a seqüência para a frente e depois chamar a função () invertidas. >>> For i in invertida (range (1, 10, 2)): ... print (i) ... 9 7 5 3 1 Para loop em uma seqüência na ordem de classificação, use o classificado () função que retorna uma nova lista de classificados, deixando inalterada a fonte. ]>> Cesto> = maçã [',' laranja ', a maçã', 'pêra', laranja ',' banana ' >>> For f in classificado (conjunto (cesta)): ... print (f) ... TUTORIAL PYTHON 3.1 Português maçã banana laranja pera 5.7. Mais informações sobre as Condições As condições utilizadas no tempo e if podem conter quaisquer operadores, não só as comparações. Os operadores de comparação in e não em verificar se um valor ocorre (não ocorre) em uma seqüência. Os operadores é e não é comparar se dois objetos são realmente o mesmo objeto, o que importa apenas para objetos mutáveis como listas. Todos os operadores de comparação possuem a mesma prioridade, que é menor que a de todos os operadores numéricos. Comparações podem ser encadeadas. Por exemplo, a <b == c testa se uma é menor que b e b resto é igual a c. Comparações podem ser combinadas usando os operadores booleanos AND e OR, e os resultados de uma comparação (ou de qualquer outra expressão Boolean) pode ser anulado com não. Estes possuem menor prioridade que os operadores de comparação, entre eles, não tem a prioridade mais alta ou mais baixa e, de modo que A e não B ou C é equivalente a (A e não (B)) ou C. Como sempre, os parênteses podem ser usados para expressar a composição desejada. Os operadores booleanos AND e OR são chamados operadores de curto-circuito: os seus argumentos são avaliados da esquerda para a direita, ea avaliação pára logo que o resultado é determinado. Por exemplo, se A e C são verdadeiros mas B é falsa, A e B e C não avalia a expressão C. Quando utilizado como um valor geral e não como um valor booleano, o valor de retorno de um operador de um curto-circuito é a última argumento avaliados. É possível atribuir o resultado de uma comparação ou outra expressão booleana a uma variável. Por exemplo, >>> String1, string2, string3 =''', Trondheim', 'Hammer Dance' >> Non_null> = string1 ou string2 ou string3 >> Non_null> »Trondheim» Observe que em Python, diferentemente de C, a atribuição não pode ocorrer dentro de expressões. Programadores C podem resmungar sobre isso, mas evita uma classe comum de problemas encontrados em programas C: digitar = numa expressão quando == se destina. 5.8. Comparando Sequências e Outros Tipos ¶ Sequência de objetos podem ser comparados a outros objetos com o tipo de seqüência. A TUTORIAL PYTHON 3.1 Português comparação lexicográfica utiliza ordenação: em primeiro lugar os dois primeiros itens são comparados, e se diferem, este determina o resultado da comparação, se eles forem iguais, nos próximos dois itens são comparados, e assim por diante, até que uma seqüência está esgotado. Se dois itens a serem comparados são próprias seqüências do mesmo tipo, a comparação lexicográfica é realizada de forma recursiva. Se todos os itens de comparar duas seqüências iguais, as seqüências são consideradas iguais. Se uma seqüência inicial é uma sub- seqüência da outra, a menor seqüência é menor (menos) um. Lexicográfica encomendas de strings usa o número codepoint Unicode para a ordem de caracteres individuais. Alguns exemplos de comparações entre sequências do mesmo tipo: (1, 2, 3) <(1, 2, 4) [1, 2, 3] <[1, 2, 4] 'ABC' <C '<' 'Pascal' Python '<' (1, 2, 3, 4) <(1, 2, 4) (1, 2) <(1, 2, -1) (1, 2, 3) == (1.0, 2.0, 3.0) (1, 2, ('aa', 'ab')) <(1, 2, ('ABC', 'a'), 4) Note que os objetos comparação de diferentes tipos com <e> é legal, desde que os objetos têm métodos de comparação apropriada. Por exemplo, os tipos numéricos mistos são comparados de acordo com seu valor numérico, de modo 0 é igual a 0,0, etc Caso contrário, ao invés de fornecer uma ordenação arbitrária, o intérprete irá levantar uma exceção TypeError. Notas de Rodapé [1] d.keys Calling () irá retornar um objeto de exibição dicionário. Ele suporta operações como teste de adesão e de iteração, mas seu conteúdo não é independente do dicionário original - é apenas uma exibição. 7. Entrada e Saída ¶ Existem várias maneiras de apresentar o resultado de um programa, os dados podem ser impressos em forma legível, ou escritos em um arquivo para uso futuro. Este capítulo vai discutir algumas das possibilidades. 7.1. Criadores de saída formatação ¶ Até agora nós encontramos duas maneiras de gravar valores: declarações expressão ea função print (). (A terceira maneira é utilizar o método write () de objetos de arquivo, o arquivo de saída padrão pode ser referenciado como sys.stdout. Consulte a Biblioteca de Referência para obter mais informações sobre este assunto.) Muitas vezes você quer mais controle sobre a formatação de sua saída do que simplesmente imprimindo valores separados por espaços. Existem duas maneiras de formatar a sua saída, a primeira maneira é fazer tudo a seqüência de tratar-se, usando cordas de corte e concatenação você pode criar qualquer layout que você pode imaginar. A seqüência padrão módulo contém algumas operações úteis para cordas estofo para uma largura determinada TUTORIAL PYTHON 3.1 Português >>> '-3,14. Zfill (7) "-003,14 ' >>> '3 0,14159265359. Zfill (5) '3 0,14159265359 " Basic uso do str.format () método parecido com este: >>> Print ("Nós somos o que dizer) (formato "{}!"'. ('cavaleiros', 'Ni')) Nós somos os cavaleiros que dizem "Ni!" Os suportes e os personagens dentro deles (campos formato chamado) são substituídos por objetos que são passados para o método format (). Um número entre parênteses pode ser usada para se referir à posição do objeto passado para o método format (). >>> Print ('(0) e (1)'. Formato ('spam', 'ovos')) spam e os ovos >>> Print ('(1) e (0)'. Formato ('spam', 'ovos')) ovos e spam Se os argumentos de palavras-chave são usadas no método format (), seus valores são referidos usando o nome do argumento. >>> Print ("Este alimento é (()) adjetivo.. (Formato ... alimentos = 'spam', adjetivo = "absolutamente horrível")) Este spam é absolutamente horrível. argumentos posicionais e podem ser combinadas arbitrariamente: >>> Print ("A história de (0), (1), e (outra).. Formato (" Bill "," Manfred ", outros = "Georg ')) A história de Bill, Manfred e Georg. ! Um "(aplicar ascii ()), '!' S (aplicar str ()) e '! R" (aplicar repr ()) pode ser usado para converter o valor antes de ser formatado: >> Matemática> Importar >>> Print ('O valor de PI é aproximadamente formato {}.'. (math.pi)) O valor de PI é aproximadamente 3,14159265359. >>> Print ('O valor de PI é aproximadamente (!) R.. Formato (math.pi)) O valor de PI é de aproximadamente 3,141592653589793. Um opcional ': especificador e formato pode acompanhar o nome do campo. Isto permite um maior controle sobre como o valor é formatado. O exemplo a seguir trunca Pi três casas depois da vírgula. TUTORIAL PYTHON 3.1 Português >> Matemática> Importar >>> Print ('O valor de PI é de cerca de (0: 0,3 m).. Formato (math.pi)) O valor de PI é de aproximadamente 3,142. Passa um número inteiro após a ':' fará com que esse campo deve ser um número mínimo de caracteres de largura. Isso é útil para fazer tabelas bonita. >> Tabela> = ('Sjoerd': 4127, 'Jack': 4098 ", BCAD ': 7678) >>> Para o nome, telefone table.items (): ... print ('(00:10) ==> d (01:10). formato (nome, telefone)) ... Jack ==> 4098 BCAD ==> 7678 Sjoerd ==> 4127 Se você tem uma seqüência de formato realmente muito tempo que você não quer dividir, seria bom se você pode as variáveis de referência a ser formatado pelo nome em vez de posição. Isso pode ser feito simplesmente passando o dicionário e usar [] 'entre colchetes' para ter acesso as chaves >> Tabela> = ('Sjoerd': 4127, 'Jack': 4098 ", BCAD ': 8637678) >>> Print ('Jack: (0 [Jack]: d); Sjoerd: (0 [Sjoerd]: d); "BCAD: (0 [BCAD]: d) 'formato. (Tabela)) Jack: 4098; Sjoerd: 4127; BCAD: 8637678 Isso também pode ser feito passando a tabela como argumentos palavras-chave com o "**" notação. >> Tabela> = ('Sjoerd': 4127, 'Jack': 4098 ", BCAD ': 8637678) >>> Print ('Jack: (Jack: d); Sjoerd: (Sjoerd: d); BCAD: (BCAD: d)' formato. (** Tabela)) Jack: 4098; Sjoerd: 4127; BCAD: 8637678 Isso é particularmente útil em combinação com o novo built-in vars () função, que retorna um dicionário contendo todas as variáveis locais. Para uma visão completa da seqüência de formatação com str.format (), consulte Formatar String Syntax. 7.1.1. Old seqüência de formatação ¶ O operador% também pode ser usado para formatação de string. Ele interpreta o argumento deixou bem como um sprintf () estilo seqüência de formato a ser aplicado ao argumento de direito, e retorna a string resultante desta operação de formatação. Por exemplo: >> Matemática> Importar >>> Print ('O valor de PI é aproximadamente 5.3f%. Math.pi%) TUTORIAL PYTHON 3.1 Português O valor de PI é de aproximadamente 3,142. Desde str.format () é muito novo, um monte de código Python ainda usa o operador%. Porém, como este velho estilo de formatação acabará por ser retirada da linguagem, str.format () geralmente deve ser usado. Mais informações podem ser encontradas na formatação Cadeia Velha seção de Operações. 7,2. Ler e gravar arquivos ¶ open () retorna um objeto de arquivo, e é mais comumente usado com dois argumentos: nome do arquivo (abrir, mode). >>> F = open ('/ tmp / workfile', 'w') O primeiro argumento é uma string contendo o nome do arquivo. O segundo argumento é outra string contendo alguns caracteres que descrevem a forma na qual o arquivo será usado. modo pode ser 'r' quando o arquivo só será lido, 'w' apenas por escrito (um arquivo existente com o mesmo nome será apagado), e 'a' abre o arquivo para acrescentar, todos os dados gravados no arquivo é automaticamente adicionado ao final. 'R +' abre o arquivo tanto para leitura e escrita. O argumento mode é opcional, 'r' será assumido se for omitido. Normalmente, os arquivos são abertos em modo texto, isto é, ler e escrever strings do e para o arquivo, que são codificados em uma codificação específica (sendo o padrão UTF-8). 'B' anexado ao modo de abrir o arquivo em modo binário: agora, os dados são lidos e escritos na forma de objetos de bytes. Este modo deve ser usado para todos os arquivos que não contêm texto. No modo texto, o padrão é converter finais de linha específica da plataforma (\ n em Unix, \ r \ n no Windows) para apenas \ n na leitura e \ n de volta aos finais de linha específica da plataforma sobre a escrita. Esta alteração nos bastidores para arquivo de dados é muito bem para arquivos de texto, mas irá corromper os dados binários como aquele em JPEG ou arquivos EXE. Tenha muito cuidado ao usar o modo binário ao ler e gravar esses arquivos. 7.2.1. Métodos de objetos de arquivo ¶ O restante dos exemplos nesta seção irá assumir que um arquivo chamado f objeto já foi criado. Para ler o conteúdo de um arquivo, chamado f.read (tamanho), que tem uma certa quantidade de dados e retorna como uma seqüência de bytes ou objeto. tamanho é um argumento numérico opcional. Quando o tamanho for omitido ou negativo, todo o conteúdo do arquivo será lido e retornado, que é o seu problema se o arquivo é o dobro de memória da sua máquina. Caso contrário, a maioria dos bytes de tamanho são lidos e devolvidos. Se o final do arquivo foi atingido, f.read () irá retornar uma string vazia (''). >> F.read> () TUTORIAL PYTHON 3.1 Português >>> Com open ('/ tmp workfile /', 'r') como f: ... f.read read_data = () >>> F.closed Verdadeiro objetos de arquivo tem alguns métodos adicionais, tais como isatty () e truncate () que são utilizados com menos frequência, consulte a Referência da Biblioteca de um guia completo para o arquivo de objetos. 7.2.2. O pickle Módulo ¶ Strings podem ser facilmente escritas e lidas de um arquivo. Números demorar um pouco mais de esforço, já que o método read () retorna apenas strings, que terão de ser passados para uma função como int (), que recebe uma string como '123 'e retorna seu valor numérico 123. No entanto, quando você deseja salvar os tipos de dados mais complexos, como listas, dicionários, ou instâncias de classe, as coisas ficam muito mais complicadas. Ao invés de ter os utilizadores estejam constantemente escrevendo e depurando código para salvar os tipos de dados complexos, Python fornece um módulo padrão chamado picles. Este é um módulo surpreendente que pode ter praticamente qualquer objeto Python (até mesmo algumas formas de código Python!) E convertê-lo para uma representação string; este processo é chamado de decapagem. Reconstruindo o objeto da representação em string é chamado unpickling. Entre decapagem e unpickling, a seqüência que representa o objeto pode ter sido armazenado em um arquivo ou dados, ou enviadas através de uma conexão de rede para uma máquina distante. Se você tem um objeto x, e um objeto arquivo f que foi aberto para escrita, a maneira mais simples de picles do objeto em apenas uma linha de código: pickle.dump (x, f) Para unpickle o objeto novamente, se f é um objeto de arquivo que foi aberto para leitura: pickle.load x = (f) (Há outras variantes deste, quando utilizado de decapagem muitos objetos ou quando você não quiser gravar os dados em conserva em um arquivo, consulte a documentação completa para a salmoura na Biblioteca de Referência Python). pickle é a forma padrão de tornar objetos Python que podem ser armazenados e reutilizados por outros programas ou por uma invocação futura do mesmo programa, o termo técnico para isso é um objeto persistente. Porque pickle é tão amplamente utilizado, vários autores que escrevem extensões Python tomar cuidado para garantir que novos tipos de dados, tais como as matrizes podem ser adequadamente conservado e unpickled. TUTORIAL PYTHON 3.1 Português 8. Erros e Exceções ¶ Até agora, as mensagens de erro não ter sido mais do que o indicado, mas se você já tentou os exemplos que você provavelmente já viu algum. Existem (pelo menos) dois tipos distintos de erros: erros de sintaxe e exceções. 8.1. Erros de sintaxe ¶ erros de sintaxe, também conhecida como análise de erros, são talvez o tipo mais comum de queixa que você começa quando você ainda está aprendendo Python: >>> While True print ('Olá mundo') Arquivo "<stdin>", line 1, in? enquanto impressão True ('Olá Mundo') ^ SyntaxError: invalid syntax O parser repete a linha de falta e exibe uma pequena seta "apontando para o primeiro ponto na linha onde o erro foi detectado. O erro é causado por (ou pelo menos detectado em) o token anterior a seta: no exemplo, o erro é detectado na função print (), uma vez que (':') cólon está faltando antes. Nome do arquivo eo número da linha são impressos para que você saiba onde procurar em caso de entrada veio de um script. 8.2. Exceções ¶ Mesmo que uma declaração ou expressão está sintaticamente correta, pode causar um erro quando uma tentativa é feita para executá-lo. Os erros detectados durante a execução são chamados exceções e não são incondicionalmente fatais: em breve você vai aprender como lidar com eles em programas Python. A maioria das exceções não são tratadas por programas, no entanto, resultar em mensagens de erro como mostrado aqui: >>> 10 * (1 / 0) Traceback (chamada mais recente passada): Arquivo "<stdin>", line 1, in? ZeroDivisionError: int divisão por zero ou modulo >>> 4 * 3 + spam Traceback (chamada mais recente passada): Arquivo "<stdin>", line 1, in? NameError spam: 'nome' não está definido >>> 2 "+ 2 Traceback (chamada mais recente passada): Arquivo "<stdin>", line 1, in? TypeError: Não é possível converter 'int' objeto str implicitamente A última linha da mensagem de erro indica o que aconteceu. As exceções vêm em diferentes tipos, eo tipo é impresso como parte da mensagem: os tipos no exemplo são ZeroDivisionError, NameError e TypeError. A seqüência de caracteres impressos como o tipo TUTORIAL PYTHON 3.1 Português de exceção é o nome do built-in exceção que ocorreu. Isso é verdadeiro para todas as built-in exceções, mas não precisa ser verdade para exceções definidas pelo usuário (embora seja uma convenção útil). nomes de exceção padrão são construídos em identificadores (não reservados palavras-chave). O resto da linha de base fornece detalhes sobre o tipo de exceção e que o causou. A parte anterior da mensagem de erro apresenta o contexto onde a exceção aconteceu, sob a forma de uma stack. Em geral, contém uma stack anúncio linhas de código, no entanto, não vai exibir as linhas de leitura da entrada padrão. Built-in listas de exceções do built-in exceções e seus significados. 8.3. Exceções Manipulação ¶ É possível escrever programas que tratam exceções selecionado. Veja o exemplo a seguir, que pede ao usuário para a entrada até que um inteiro válido tenha sido inscrito, mas permite que o usuário interrompa o programa (usando Control-C ou qualquer que seja o sistema operacional suporte); nota que uma interrupção gerada pelo usuário é sinalizado aumentando a exceção KeyboardInterrupt. >>> While True: ... tente: ... x = int (input ("Por favor insira um número:")) ... quebrar ... exceto ErroNumeroRuim: ... print ("Oops! que havia um número válido. Tente novamente ...") ... A instrução try funciona da seguinte maneira. * Em primeiro lugar, a cláusula de tentar (a declaração (s) entre a tentar exceto palavras- chave) é executado. * Se nenhuma exceção ocorrer, a cláusula de exceção é ignorado e execução da instrução é tentar terminar. * Se ocorrer uma exceção durante a execução da cláusula try, o restante da cláusula é ignorado. Então, se seu tipo de jogos a exceção nomeado após a palavra, exceto, a cláusula de exceção é executado, e, em seguida, a execução continua após o try. * Se ocorrer uma exceção que não coincide com a exceção nomeado na cláusula, exceto, é passada para tentar exterior declarações, se nenhum manipulador for encontrado, ele é uma exceção não tratada ea execução pára com uma mensagem como mostrado acima. A instrução try pode ter mais de uma cláusula de exceção, para especificar manipuladores para exceções diferentes. No máximo um manipulador será executado. Manipuladores de apenas lidar com exceções que ocorrem na cláusula tentar correspondente, e não em outros manipuladores de tentar mesmo comunicado. Uma cláusula except pode nomear várias TUTORIAL PYTHON 3.1 Português Traceback (chamada mais recente passada): Arquivo "<stdin>", line 1, in? NameError: HiThere O único argumento para aumentar indica a exceção a ser levantada. Este deve ser um exemplo, uma exceção ou uma classe de exceção (uma classe que deriva de Exception). Se você precisa determinar se uma exceção foi levantada, mas não pretendem lidar com isso, uma forma mais simples de elevar a declaração permite que você re-raise a exceção: >>> Tente: ... levantar NameError ('HiThere) ... exceto NameError: ... print ('Uma excepção voaram!') ... levantar ... Uma excepção voaram! Traceback (chamada mais recente passada): Arquivo "<stdin>", line 2, in? NameError: HiThere 8.5. Exceções definidas pelo usuário ¶ Os programas podem nomear seus próprios exceções, criando uma nova classe de exceção (ver classes para classes mais sobre Python). Exceções devem ser tipicamente derivada da classe Exception, direta ou indiretamente. Por exemplo: >>> Class MyError (exceção): ... def __init__ (self, valor): ... = valor self.value ... def __str__ (self): ... repr retorno (self.value) ... >>> Tente: ... levantar MyError (2 * 2) ... exceto MyError como e: ... print ('My exceção ocorreu, o valor: ", e.value) ... Meu exceção ocorreu, o valor: 4 >>> Levantar oops MyError (!) Traceback (chamada mais recente passada): Arquivo "<stdin>", line 1, in? __main__.MyError: "opa!" Neste exemplo, o __init__ (padrão) de exceção foi substituído. O novo comportamento TUTORIAL PYTHON 3.1 Português simplesmente cria o atributo value. Isto substitui o comportamento padrão de criar o atributo args. classes de exceção pode ser definido o que fazer alguma coisa nenhuma outra classe pode fazer, mas geralmente são mantidos simples, muitas vezes, apenas oferecendo uma série de atributos que permitem que a informação sobre o erro para ser extraído por manipuladores de exceção. Ao criar um módulo que pode levantar vários erros distintos, uma prática comum é criar uma classe base para exceções definidas por aquele módulo, e subclasse que criar classes de exceção específica para as condições de erro diferentes: Erro de classe (exceção): "" "Classe base para exceções neste módulo." " passar InputError classe (erro): "Exceção" levantada por erros na entrada. Atributos: expressão - expressão de entrada em que ocorreu o erro mensagem - explicação do erro "" " def __init__ (self, expressão, mensagem): expressão self.expression = Mensagem self.message = TransitionError classe (erro): "" "Gerado quando uma operação tenta uma transição de estado que não é permitido. Atributos: estado anterior - no início da transição próximo estado - tentaram de novo explicação mensagem - por que a transição específica não é permitida "" " def __init__ (self, anterior, próximo, mensagem): self.previous = anterior self.next = próximo Mensagem self.message = A maioria das exceções são definidas com nomes que terminam em "erro", semelhante à nomeação de exceções padrão. Muitos módulos padrão definir suas próprias exceções para relatar erros que possam ocorrer TUTORIAL PYTHON 3.1 Português nas funções que definem. Mais informações sobre as classes são apresentadas nas classes capítulo. 8.6. Definindo Ações de Limpeza ¶ A instrução try possui outra cláusula opcional que se destina a definir as acções de limpeza que deve ser executado em todas as circunstâncias. Por exemplo: >>> Tente: ... levantar KeyboardInterrupt ... finalmente: ... print ('Adeus, mundo!') ... Adeus, mundo! KeyboardInterrupt A cláusula finally é sempre executado antes de deixar a instrução try, se uma exceção ocorreu ou não. Quando uma exceção ocorreu na tentativa cláusula e não tem sido tratado por uma cláusula de exceção (ou que tenha ocorrido em uma cláusula de excepção ou outra), é re-raise após a cláusula finally foi executado. A cláusula finally também é executado "na maneira para fora", quando qualquer outra cláusula do try é deixada por uma pausa, continuar ou voltar comunicado. Um exemplo mais complicado: >> Dividir def> (x, y): ... tente: ... resultado = x / y ... exceto ZeroDivisionError: ... print ("divisão por zero!") ... else: ... print ("resultado é", resultado) ... finalmente: ... print ("finalmente cláusula de execução") ... >> Divisão> (2, 1) resultado é de 2,0 execução finalmente cláusula >> Divisão> (2, 0) divisão por zero! execução finalmente cláusula >> Divisão> ("2", "1") execução finalmente cláusula Traceback (chamada mais recente passada): Arquivo "<stdin>", line 1, in? File "<stdin>", linha 3, em dividir TypeError: tipo operando sem suporte (s) para /: str 'e' str ' TUTORIAL PYTHON 3.1 Português devem prefixo com o nome do módulo. By the way, eu uso a palavra atributo para qualquer nome que se segue um ponto - por exemplo, no z.real expressão real, é um atributo do objeto z. Estritamente falando, referências para nomes em módulos são referências a atributos: na expressão modname.funcname, modname é um objeto módulo e funcname é um atributo do mesmo. Neste caso, não acontece de ser um simples mapeamento entre os atributos do módulo e os nomes globais definidos no módulo: eles compartilham o mesmo espaço para nome! [1] Atributos podem ser somente leitura ou escrita. Neste último caso, a atribuição de atributos é possível. Módulo atributos são graváveis: você pode escrever modname.the_answer = 42. gravável atributos também podem ser excluídos com o comando del. Por exemplo, del modname.the_answer irá remover o the_answer atributo do objeto nomeado por modname. Namespaces são criados em momentos diferentes e têm vidas diferentes. O namespace que contém os nomes de built-in é criado quando o interpretador Python é iniciado, e nunca é excluída. O espaço para nome global para um módulo é criado quando a definição de módulo for lido, normalmente, namespaces módulo também durar até o interpretador sai. Os comandos executados pela invocação de nível superior do intérprete, quer ler de um arquivo script ou interativamente, são considerados parte de um módulo chamado __main__, então eles têm o seu próprio namespace global. (O sistema de nomes realmente vivem também em um módulo, o que é chamado builtins). O espaço local para uma função é criada quando a função é chamada, e apagado quando a função retorna ou levanta uma exceção que não é tratado dentro da função. (Na verdade, o esquecimento seria a melhor maneira de descrever o que realmente acontece). Naturalmente, chamadas recursivas cada um tem seu próprio namespace local. Um escopo é uma região textual de um programa Python onde um espaço de nomes é diretamente acessível. "Directamente acessível" significa que uma referência não qualificada para um nome tentativas para encontrar o nome do namespace. Embora escopos sejam determinados estaticamente, eles são usados dinamicamente. A qualquer momento durante a execução, há pelo menos três escopos aninhados cujo namespaces são directamente acessíveis: * O âmbito mais íntimo, que é procurado em primeiro lugar, contém os nomes de locais * Os escopos das funções de inclusão, que procurou iniciar com o âmbito mais próximo, juntando, contém não-local, mas também nomes de não-global * O alcance próximo para a última contém nomes globais do módulo atual * O alcance ultraperiféricas (procurou passado) é o namespace que contém embutido em nomes Se um nome for declarado global, então todas as referências e atribuições de ir diretamente para o alcance global do meio contendo os nomes do módulo. Para religar variáveis TUTORIAL PYTHON 3.1 Português encontradas fora do âmbito mais íntimo, a declaração não-local pode ser usado, se não declarada não-locais, as variáveis são read-only (uma tentativa de escrever a tal variável vai simplesmente criar uma nova variável local, no âmbito mais íntimo, deixando a variável de nome idêntico exterior inalterado). Normalmente, o escopo local referencia os nomes locais da função (textualmente) atual. Fora as funções, as referências de âmbito local, o mesmo namespace como o escopo global: namespace do módulo. As definições de classe ainda espaço para um outro local no âmbito local. É importante perceber que escopos são determinados textualmente: o alcance global de uma função definida em um módulo que é namespace módulo, não importa de onde ou por que alias a função é chamada. Por outro lado, a busca para os nomes reais é feito dinamicamente, em tempo de execução - no entanto, a definição da linguagem está evoluindo para a resolução de nomes estáticos, em "compilar" o tempo, portanto, não dependem de resolução de nome dinâmico! (Na verdade, as variáveis locais já estão determinadas estaticamente). A peculiaridade especial de Python é que - se nenhuma instrução global está em vigor - as atribuições de nomes de sempre ir para o âmbito mais íntimo. Atribuições não copiam dados - apenas nomes vincular a objetos. O mesmo é verdadeiro para exclusões: a declaração del x remove a ligação de x do espaço de nomes referenciado pelo escopo local. Na verdade, todas as operações que introduzem novos nomes usam o âmbito local: em particular, as declarações de importação e vincular as definições da função módulo ou nome da função no âmbito local. A declaração global pode ser usado para indicar que as variáveis especial ao vivo no âmbito global e deve ser rebote lá, a declaração indica que as variáveis não-locais particular viver em um escopo delimitador e deve ser rebote lá. 9.2.1. Scopes e Namespaces ¶ Exemplo Este é um exemplo que demonstra como fazer referência a diferentes âmbitos e espaços para nome, e como global e não local afetar obrigatório variável: scope_test def (): do_local def (): = spam spam "local" do_nonlocal def (): nonlocal spam = spam spam "não-local" do_global def (): spam global = spam spam "global" teste de spam spam = "" do_local () print ("Depois de atribuição local:" spam) TUTORIAL PYTHON 3.1 Português do_nonlocal () print ("Depois de atribuição não-local", spam) do_global () print ("Depois de atribuição global", spam) scope_test () print ("Em âmbito global: spam"), A saída do código de exemplo é: Após a atribuição local: spam teste Após a atribuição nonlocal: spam nonlocal Após a atribuição global: spam nonlocal Em âmbito global spam: global Note como a atribuição de local (que é o padrão) não se alterou scope_test de ligação de spam. A atribuição nonlocal mudou scope_test de ligação de spam, ea atribuição global mudou o nível de módulo de ligação. Você também pode ver que não havia nenhuma ligação anterior de spam antes da atribuição global. 9.3. Um primeiro olhar em Classes ¶ Classes introduzir um pouco da nova sintaxe, três novos tipos de objetos e uma semântica nova. 9.3.1. Definição de classe ¶ Syntax A forma mais simples de definição de classe parecido com este: ClassName classe: <statement-1> . . . <statement-N> As definições de classe, como definições de função (declarações def) devem ser executados antes que tenham qualquer efeito. (Você pode conseguir colocar uma definição de classe em um galho de uma instrução if ou dentro de uma função.) Na prática, as declarações dentro de uma definição de classe serão geralmente as definições de função, mas outras declarações são permitidas, e às vezes útil - nós vamos voltar a isso mais tarde. As definições de função dentro de uma classe normalmente tem uma forma peculiar de lista de argumentos, ditada pelas convenções de chamada para os métodos - de novo, isso é explicado mais tarde. TUTORIAL PYTHON 3.1 Português instâncias. Assim, em nosso exemplo, xf é uma referência método válido, pois MyClass.f é uma função, mas não é xi, já MyClass.i não é. Mas xf não é a mesma coisa que MyClass.f - é um objeto de método, não um objeto função. 9.3.4. Objetos Método ¶ Normalmente, um método é chamado logo após ele está vinculado: x.f () No exemplo MinhaClasse, irá retornar a string 'Olá Mundo'. No entanto, não é necessário chamar um método imediatamente: XF é um objeto do método, e pode ser guardado e chamado em um momento posterior. Por exemplo: xf = x.f enquanto True: print (xf ()) continuará a imprimir Olá mundo até o fim dos tempos. O que exatamente acontece quando um método é chamado? Você pode ter notado que xf () foi chamado sem um argumento acima, embora a definição da função de f () Foi especificado um argumento. O que aconteceu com o argumento? Certamente Python levanta uma exceção quando uma função que requer um argumento é chamado sem nenhuma - nem mesmo se o argumento é usado realmente ... Na verdade, você pode ter adivinhado a resposta: o que há de especial sobre os métodos é que o objeto é passado como primeiro argumento da função. No nosso exemplo, a chamada xf () é exatamente equivalente a MyClass.f (x). Em geral, chamar um método com uma lista de n argumentos é equivalente a chamar a função correspondente com uma lista de argumentos que é criado através da inserção de objeto do método antes do primeiro argumento. Se você ainda não entendo como os métodos de trabalho, um olhar sobre a implementação talvez possa esclarecer a questão. Quando um atributo de instância é referenciado que os dados não é um atributo, sua classe é procurada. Se o nome indica um atributo de classe válido que seja um objeto função, um objeto método é criado por embalagem (ponteiros para) o objeto de instância e apenas a função de objeto encontradas juntas em um objeto abstrato: é o objeto do método. Quando o objeto método é chamado com uma lista de argumentos, uma lista de argumento novo é construído a partir do objeto de instância e a lista de argumentos, eo objeto função é chamada com a lista argumento novo. 9.4. Observações Random ¶ Dados atributos substituir atributos do método com o mesmo nome, para evitar conflitos de nomes acidentais, que possam causar difícil de encontrar falhas em programas grandes, é aconselhável usar algum tipo de convenção que minimize a possibilidade de conflitos. convenções possíveis incluem nomes de capitalização método, prefixando dados de nomes de TUTORIAL PYTHON 3.1 Português atributos com uma pequena seqüência única (talvez apenas um underscore), ou usando os verbos e substantivos para os métodos para os atributos dos dados. Atributos de dados podem ser referenciados por métodos, bem como por usuários comuns ("clientes") de um objeto. Em outras palavras, as classes não servem para implementar tipos puramente abstratos de dados. De fato, nada em Python torna possível executar ocultar dados - é tudo baseado em convenção. (Por outro lado, a implementação Python, escrita em C, pode esconder completamente detalhes de implementação e controle de acesso a um objeto, se necessário, o que pode ser utilizado por extensões a Python escritas em C.) Clientes devem utilizar atributos de dados com cuidado - os clientes podem bagunçar invariantes mantidos pelos métodos utilizados para carimbar sobre os atributos dos seus dados. Observe que os clientes podem adicionar dados atributos próprios de uma instância de objeto sem afetar a validade dos métodos, desde que sejam evitados conflitos de nome - de novo, uma convenção de nomeação pode poupar muitas dores de cabeça aqui. Não existe atalho para referenciar atributos de dados (ou outros métodos!) A partir de métodos. Acho que isso realmente aumenta a legibilidade dos métodos: não há chance de confundir as variáveis locais e variáveis de instância quando olhando através de um método. Muitas vezes, o primeiro argumento de um método é chamado self. Isto nada mais é do que uma convenção: a auto-nome não tem absolutamente nenhum significado especial em Python. Note, no entanto, que por não seguir a convenção de seu código pode ser menos legível para outros programadores de Python, e também é concebível que um programa navegador de classe pode ser escrito que depende de uma convenção desse tipo. Qualquer objeto função que é um atributo de classe define um método para instâncias da classe. Não é necessário que a definição da função é textualmente incluído na definição de classe: a atribuição de um objeto função a uma variável local da classe também está ok. Por exemplo: # Função definida fora da classe def f1 (self, x, y): min de retorno (x, x + y) Classe C: f = f1 g def (self): return 'Olá Mundo' h = g Agora f, g e h são todos os atributos da classe C que se referem à função de objetos e, conseqüentemente, são todos os métodos de instâncias de C - H ser exatamente equivalente a g. Note-se que esta prática geralmente só serve para confundir o leitor de um programa. TUTORIAL PYTHON 3.1 Português Os métodos podem chamar outros métodos utilizando atributos do método do argumento self: Saco de classe: def __init__ (self): self.data = [] def add (self, x): self.data.append (x) def addtwice (self, x): self.add (x) self.add (x) Métodos podem referenciar nomes globais da mesma forma que funções ordinárias. O escopo global associado a um método é o módulo que contém a definição de classe. (A classe em si nunca é usado como um âmbito global.) Apesar de raramente se encontra um bom motivo para utilizar dados globais em um método, existem muitos usos legítimos do escopo global: por um lado, as funções e módulos importados no escopo global podem ser usados por métodos, bem como funções e classes definidas no mesmo. Normalmente, a classe que contém o método é definido em si mesmo neste âmbito global, e na próxima seção, vamos encontrar algumas boas razões para que um método que deseja referenciar sua própria classe. Cada valor é um objeto e, portanto, tem uma classe (também chamado de seu tipo). É armazenado como object.__class__. 9.5. Herança ¶ Naturalmente, um recurso de linguagem não seria digna desse nome "classe" sem o apoio de herança. A sintaxe para uma definição de classe derivada se parece com isto: DerivedClassName classe (BaseClassName): <statement-1> . . . <statement-N> O BaseClassName nome deve ser definido em um escopo contendo a definição da classe derivada. No lugar de um nome de classe base, outras expressões arbitrárias também são permitidos. Isso pode ser útil, por exemplo, quando a classe base é definida em outro módulo: DerivedClassName classe (modname.BaseClassName): Execução de uma definição de classe derivada procede da mesma para uma classe base. Quando o objeto da classe é construído, a classe base é lembrada. Isto é usado para resolver referências de atributo: se um atributo requisitado não for encontrado na classe, o produto de busca para procurar na classe base. Essa regra é aplicada recursivamente se a classe base é TUTORIAL PYTHON 3.1 Português Às vezes é útil ter um tipo de dados semelhante ao Pascal "record" ou "C" struct ", bem como a agregação de alguns itens de dados nomeados. Uma definição de classe vazia vai fazer muito bem: Empregado de classe: passar john = Employee () # Cria um registro de funcionário vazio # Preencha os campos do registro john.name = "John Doe" john.dept = 'laboratório de informática " john.salary = 1000 Um pedaço de código Python que espera um determinado tipo abstrato de dados muitas vezes pode ser transmitida de uma classe que emula os métodos desse tipo de dados em vez disso. Por exemplo, se você tiver uma função que alguns formatos de dados de um objeto arquivo, você pode definir uma classe com os métodos read () e readline () que recebem os dados de um buffer string em vez disso, e passá-lo como um argumento. objetos método Instância atributos, também: m.__self__ é o objeto exemplo, com o método m (), e m.__func__ é o objeto função correspondente ao método. 9.8. Exceções são classes Too ¶ Exceções definidas pelo usuário são identificadas por classes. Usando este mecanismo, é possível criar hierarquias extensíveis de exceções. Há dois novos válido (semântica) formulários para a declaração levantar: aumentar a Classe levantar Instância Na primeira forma, a classe deve ser uma instância de tipo ou de uma classe derivada dela. A primeira forma é um atalho para: levantar (classe) Uma classe em uma cláusula except é compatível com uma exceção se for da mesma classe ou de uma classe base do mesmo (mas não o contrário - uma cláusula de anúncio, exceto uma classe derivada não é compatível com uma classe de base). Por exemplo, o código a seguir será impresso B, C, D, nesta ordem: Classe B (exceção): passar TUTORIAL PYTHON 3.1 Português C (classe B): passar Classe D (C): passar para c em B [, C, D]: tente: levantar c () exceto D: print ("D") C, exceto: print ("C") exceto B: print ("B") Note que, se as cláusulas de excepção foram invertidos (com exceção B em primeiro lugar), teria impresso B, B, B - a primeira correspondência, excepto cláusula é acionada. Quando uma mensagem de erro é impressa para uma exceção não tratada, nome da classe da exceção é impresso, então uma vírgula e um espaço e, finalmente, a exemplo convertido em uma string usando o built-in função str (). 9.9. Iterators ¶ Até agora você já deve ter notado que a maioria dos objetos recipiente pode ser enrolada sobre o uso de uma instrução for: para o elemento em [1, 2, 3]: elemento de impressão () para o elemento (1, 2, 3): elemento de impressão () para a chave ('one': 1, 'dois': 2): print (chave) para char em "123": print (char) para a linha em aberto (myfile.txt "): linha de impressão () Este estilo de acesso, é claro, conciso e prático. O uso de iteradores permeia e unifica Python. Nos bastidores, a declaração de chamadas iter () no objeto de recipiente. A função retorna um objeto iterador que define o __next__ (método) que acessa elementos no recipiente um de cada vez. Quando não houver mais elementos, __next__ () gera uma exceção StopIteration que diz o loop para terminar. Você pode chamar o __next__ () usando o método builtin next (), esse exemplo mostra como tudo funciona: >>> S = 'abc' TUTORIAL PYTHON 3.1 Português >>> Ele = iter (s) >>> Ele objeto <iterator em 0x00A1DB50> >>> Próximo (it) 'A' >>> Próximo (it) 'B' >>> Próximo (it) 'C' >>> Próximo (it) Traceback (chamada mais recente passada): Arquivo "<stdin>", line 1, in? próximo (it) StopIteration Tendo em vista os mecanismos por trás do protocolo iterador, é fácil adicionar um comportamento iterador para suas aulas. Definir um __iter__ () método que retorna um objeto com um __next__ () método. Se a classe define __next__ (), então __iter__ () pode apenas retornar self: classe Reverse: "Iterator para looping em uma seqüência para trás" def __init__ (self, dados): self.data dados = self.index = len (dados) def __iter__ (self): retorno auto def __next__ (self): se self.index == 0: levantar StopIteration self.index = self.index - 1 retorno self.data [self.index] >>> Para char in Reverse ("spam"): ... print (char) ... m um p s 9.10. Geradores ¶ Generators são uma ferramenta simples e poderosa para a criação de iteradores. Eles são TUTORIAL PYTHON 3.1 Português O módulo de glob fornece uma função para fazer listas de arquivo a partir de pesquisas curinga diretório: >> Glob importação> >> Glob.glob> ("*. py") ] Primes.py [',' random.py, quote.py ' 10.3. Argumentos de linha de comando ¶ scripts de utilidade comum, muitas vezes precisam processar os argumentos da linha de comando. Estes argumentos são armazenados no atributo do módulo sys é argv como uma lista. Por exemplo, os resultados de saída após a execução de python demo.py um, dois, três na linha de comando: >> Import sys> >>> Print (sys.argv) demo.py [',' um ',' dois ',' três '] O módulo getopt processos sys.argv usando as convenções do getopt Unix () função. linha de processamento mais poderosos e flexíveis de comando é fornecida pelo módulo optparse. 10.4. Erro de redirecionamento de saída e ¶ Rescisão Programa O módulo sys também tem atributos para stdin, stdout e stderr. O último é útil para emitir avisos e mensagens de erro para torná-los visíveis mesmo quando stdout foi redirecionado: >>> Sys.stderr.write ('Warning, log file not found a partir de uma nova \ n') Warning, log file not found iniciar um novo A maneira mais direta para encerrar um script é a utilização sys.exit (). 10.5. String Pattern Matching ¶ O módulo re fornece ferramentas de expressão regular para processamento de cadeia avançada. Para adequação complexo e manipulação, as expressões regulares oferecem sucinta, soluções otimizadas: >> Voltar a importar> >> Re.findall> (r '\ bf [az] *', 'que o pé ou a mão mais rápido caiu') pé [',' caiu ',' mais rápido '] re.sub>>> (r '(\ b [az] +) \ 1' r '\ 1' gato 'no o chapéu') 'Gato no chapéu' Quando apenas simples recursos são necessários, os métodos de string são preferidos porque são mais fáceis de ler e debug: chá>>> "para muito". replace ('muito', 'dois') TUTORIAL PYTHON 3.1 Português "Chá para dois" 10.6. Matemática ¶ O módulo math oferece acesso às funções subjacentes biblioteca C para matemática de ponto flutuante: >> Matemática> Importar >> Math.cos> (math.pi / 4) ,70710678118654757 >> Math.log> (1024, 2) 10,0 O módulo random fornece ferramentas para fazer a seleção aleatória: >>> Import random ]>> Random.choice> (maçã [',' pera, banana ") 'Maçã' >> Random.sample> (range (100), 10) # amostragem sem reposição [30, 83, 16, 4, 8, 81, 41, 50, 18, 33] >> Random.random> () # random float ,17970987693706186 >> Random.randrange> (6) # inteiro aleatório escolhido intervalo (6) 4 O projeto <http://scipy.org> SciPy tem muitos outros módulos para cálculos numéricos. 10.7. Acesso à Internet ¶ Há uma série de módulos de acesso à internet e protocolos de internet de processamento. Dois dos mais simples são urllib.request para recuperar dados de URLs e smtplib para enviar e- mail: >>> From urlopen importação urllib.request >>> Para a linha de urlopen ('http://tycho.usno.navy.mil/cgi-bin/timer.pl'): ... = linha line.decode ('utf-8') # descodificar os dados binários para texto. ... Se 'EST' em linha ou "EDT" na linha: # olhar para Eastern Time ... linha de impressão () <BR> Novembro 25, EST 21:43:32 >> Smtplib importação> >>> Servidor = smtplib.SMTP ('localhost') >> Server.sendmail> ('soothsayer@example.org', 'jcaesar@example.org, ... "" "Para: jcaesar@example.org ... De: soothsayer@example.org TUTORIAL PYTHON 3.1 Português ... ... Cuidado com os idos de março. ... "" ") >>> Server.quit () (Note que o segundo exemplo tem um servidor de mail funcionando em localhost). 10.8. Datas e horários ¶ O módulo datetime fornece classes para manipulação de datas e horários em simples e complexos caminhos. Embora a data ea hora aritmética é suportado, o foco da aplicação é eficiente na extração de membro para a formatação de produção e manipulação. O módulo também oferece suporte a objetos que estão cientes fuso horário. datas>>> # são facilmente construídos e formatados >>> A partir da data de importação datetime >>> Agora date.today = () >>> Agora datetime.date (2003, 12, 2) >> Now.strftime> ("% m-% d-% Y% d% b% Y% é um A no dia% d de% B") '12-02-03. 02 de dezembro de 2003 é uma terça-feira no dia 02 de Dezembro. >>> # Aritmética datas do calendário de apoio >> Aniversário> = date (1964, 7, 31) >> Idade> = agora - aniversário >> Age.days> 14368 10.9. Data Compression ¶ arquivamento de dados comum e formatos de compressão são suportados por módulos, incluindo: zlib, gzip, bz2, zipfile e tarfile. >> Zlib importação> >>> S = "bruxa que tem que bruxas relógio de pulso" >> Len> (s) 41 >>> T = zlib.compress (s) >> Len> (t) 37 >>> Zlib.decompress (t) "Bruxa que tem que bruxas relógio de pulso" >>> Zlib.crc32 (s) 226805979 10.10. ¶ Performance Measurement TUTORIAL PYTHON 3.1 Português é mais do que uma linha, a impressora "bonito", acrescenta quebras de linha e recuo a revela mais claramente a estrutura de dados: >> Pprint importação> >>> T = [[[[' preto, ciano '],' branco ', verde [', 'vermelho']], magenta [[', ... ']' Amarelo 'azul']]] ... >> Pprint.pprint> (t, largura = 30) ] [[[[' Preto, ciano ", "Branco", verde [',' vermelho ']] magenta [[','] 'amarelo, «Azul»]]] O módulo textwrap pontos formatos de texto para ajustar a largura determinada tela: >> Textwrap importação> >>> Doc = "" "O envoltório () é apenas como preenchimento () exceto que ela retorna ... uma lista de strings em vez de uma seqüência grande de novas linhas para separar ... as linhas envolvidas. " ... >>> Print (textwrap.fill (DOC, width = 40)) O envoltório () é apenas como preenchimento () exceto que ela retorna uma lista de strings em vez de uma seqüência grande de novas linhas para separar as linhas quebradas. O módulo locale acessa um banco de dados de formatos de dados específicos da cultura. O atributo de agrupamento da função localidade de formato fornece uma maneira direta de formatar números com separadores de grupo: >> Localidade de importação> >> Locale.setlocale> (locale.LC_ALL "English_United States.1252) "States.1252 English_United ' >> Conv => locale.localeconv () # obter um mapeamento das convenções >>> X = 1.234.567,8 >> Locale.format> ("% d", x, agrupando = True) '1, 234,567 ' >> Locale.format_string> ("% s% .* f", (] currency_symbol [conv ', ... frac_digits '[conv'], x), agrupando = True) '$ 1,234,567.80' 11.2. Templating ¶ O módulo string inclui uma classe de modelo versátil, com uma sintaxe simplificada adequado TUTORIAL PYTHON 3.1 Português para a edição por usuários finais. Isso permite aos usuários personalizar suas aplicações sem ter que alterar a aplicação. O formato utiliza nomes de espaço reservado formado por $ com identificadores válidos Python (caracteres alfanuméricos e sublinhados). Cercando o espaço com aparelhos permite que ele seja seguido por mais letras alfanumérico sem espaços intermediários. Escrevendo $ cria um único escapou $: >>> From string Template importação >>> T = Template ("$ () vila folk enviar $ 10 a US $ causar. ') >> T.substitute> (aldeia = 'Nottingham' causa, = 'o fundo de vala) "Nottinghamfolk enviar 10 dólares para o fundo de vala. O substituto () O método gera um KeyError quando um marcador não é fornecido em um dicionário ou um argumento de palavra-chave. Para aplicações de mala direta estilo, dados fornecidos pelo usuário pode ser incompleta e safe_substitute () método pode ser mais apropriado - ele vai deixar espaços reservados inalterada se os dados estão em falta: >>> T = Modelo de retorno ("o item de R $ para US $ proprietário. ') >>> D = dict (item = 'andorinha sem carga ") >> T.substitute> (d) Traceback (chamada mais recente passada): . . . KeyError: 'dono' >> T.safe_substitute> (d) «Voltar a andorinha, para US $ proprietário. subclasses modelo pode especificar um delimitador personalizado. Por exemplo, um lote renomeação de utilidade por um browser foto pode optar pelo uso de sinais por cento para os espaços reservados, como a data atual, o número de seqüência de imagens, ou formato de arquivo: >> Tempo> Importar, os.path >>> Img_1074.jpg photofiles = ['', 'img_1076.jpg', 'img_1077.jpg'] >>> Class BatchRename (Modelo): ... delimitador = '%' >> Fmt> = input ('Entre estilo rename (% d-% data% SEQNUM n-f-format):') Digite estilo rename (% d-% data% SEQNUM n-f-format): Ashley_% n% f >>> T = BatchRename (FMT) >> Data> = time.strftime% ('d% b% y') >>> For i, nome em enumerar (photofiles): ... base, ext = os.path.splitext (filename) ... t.substitute newname = (d = data, n = i, f = ext) ... print ('(0) -> (1)' formato. (filename, newname)) TUTORIAL PYTHON 3.1 Português img_1074.jpg -> Ashley_0.jpg img_1076.jpg -> Ashley_1.jpg img_1077.jpg -> Ashley_2.jpg Outra aplicação para templating é separar a lógica do programa a partir de detalhes de múltiplos formatos de saída. Isto torna possível substituir os modelos personalizados para arquivos XML, os relatórios de texto simples, HTML e relatórios web. 11.3. Trabalhando com dados binários Record Layouts ¶ A estrutura do módulo fornece pack () e unpack (), funções para trabalhar com formatos de registro de comprimento variável binária. O exemplo a seguir mostra como um loop através de informações de cabeçalho em um arquivo ZIP sem o uso do módulo zipfile. códigos Pack "H" e "I" representam dois e quatro números unsigned byte, respectivamente. Os "<" indica que eles são de tamanho padrão e em pouco endian byte order: importação struct = dados myfile.zip ('open', 'rb'). read () start = 0 for i in range (3): # show os cabeçalhos 3 primeiros arquivos + Start = 14 struct.unpack fields = ('<IIIHH, dados [iniciar: iniciar 16]) crc32, comp_size, uncomp_size, filenamesize, extra_size = Campos + Start = 16 [Dados filename = start: + start filenamesize] + Start = filenamesize [Dados extra = start: + start extra_size] print (nome, hex (CRC32), comp_size, uncomp_size) + + Start = extra_size comp_size # saltar para o próximo cabeçalho 11.4. Multi-threading ¶ Threading é uma técnica de separação de tarefas que não são seqüencialmente dependentes. Tópicos podem ser utilizados para melhorar a capacidade de resposta dos aplicativos que aceitam a entrada do usuário, enquanto outras tarefas executadas em segundo plano. Um caso de uso relacionado está sendo executado I / O em paralelo com os cálculos em outro segmento. O código a seguir mostra como o alto nível de segmentação módulo pode executar tarefas em background enquanto o programa principal continua a ser executado: segmento de importação, zipfile TUTORIAL PYTHON 3.1 Português KeyError: «primárias» 11.7. Ferramentas para trabalhar com listas ¶ Muitas das necessidades da estrutura de dados pode ser satisfeita com o built-in tipo de lista. No entanto, às vezes há a necessidade de implementações alternativas com diferentes trade- offs de desempenho. O módulo fornece uma matriz (matriz) objeto que é como uma lista que armazena apenas dados homogêneos e armazena-la mais compacta. O exemplo a seguir mostra uma matriz de números armazenados como dois bytes sem sinal de números binários (código de tipo "H") ao invés do usual 16 bytes por entrada para as listas regulares de objetos int Python: >>> Array de array de importação >>> A = array ('H', [4000, 10, 700, 22222)] >> Soma> (a) 26932 >>> A [1:3] array ('H', [10, 700]) O módulo de coleções fornece um deque () que o objeto é como uma lista com acrescentará mais rápido e aparece do lado esquerdo, mas pesquisas mais lento no meio. Estes objetos são adequados para a implementação de filas e largura pesquisas primeira árvore: >>> A partir de colecções deque de importação >>> D = deque (["task1", "task2", "Tarefa3"]) >>> D.append ("task4") >>> Print ("handling", d.popleft ()) Manipulação task1 unsearched deque = ([starting_node]) breadth_first_search def (unsearched): node = unsearched.popleft () de m em gen_moves (nó): se is_goal (m): m retorno unsearched.append m () Além de implementações lista alternativa, a biblioteca também oferece outras ferramentas, como o módulo bissetriz com funções para manipulação de listas ordenadas: >> Bissetriz de importação> >>> Ordenar = [(100, 'perl'), (200, 'tcl'), (400, 'lua'), (500, 'python')] >> Bisect.insort> (pontuação, (300, 'ruby')) >> Ordenar> TUTORIAL PYTHON 3.1 Português [(100, 'perl'), (200, 'tcl'), (300, 'ruby'), (400, 'lua'), (500, 'python')] O módulo heapq fornece funções para a execução pilhas com base em listas regular. O menor valor de entrada é sempre mantido na posição zero. Isso é útil para aplicativos que acessar repetidamente o menor elemento, mas não quero correr uma lista completa de classificação: >>> From heapq heapify importação, heappop, heappush >>> Dados = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0] >> Heapify> (dados) # reorganizar a lista em ordem heap >> Heappush> (dados, -5) # adiciona uma nova entrada >>> [Heappop (dados) for i in range (3)] # buscar os três menores entradas [-5, 0, 1] 11.8. Decimal Floating Point Arithmetic ¶ O módulo decimal oferece um tipo de dados Decimal para aritmética de ponto flutuante decimal. Comparado com o built-in float execução de ponto flutuante binário, a classe é especialmente útil para * Aplicações financeiras e de outras aplicações que exigem representação decimal exata, * O controle sobre a precisão, * O controle sobre o arredondamento para atender aos requisitos legais ou regulamentares, * Acompanhamento de importantes casas decimais, ou * aplicações onde o usuário espera dos resultados para coincidir com cálculos feitos à mão. Por exemplo, o cálculo de um imposto de 5% em uma carga de telefone 70 cêntimos dá resultados diferentes em ponto flutuante decimal e binário de ponto flutuante. A diferença se torna significativa quando os resultados são arredondados para o cêntimo mais próximo: >>> De importação decimal * >> Volta> (Decimal (0,70 '0 ') * Decimal ('1 .05'), 2) Decimal (0,74 '0 ') >> Volta> (0,70 * 1,05, 2) 0,73 O resultado decimal mantém um zero à direita, automaticamente inferir quatro importância lugar de multiplicands com dois significado local. Decimal reproduz a matemática como feito à mão e evita problemas que podem surgir quando em ponto flutuante binário não podem representar exatamente as quantidades decimais. permite a exata representação da classe Decimal para realizar cálculos modulo e testes de igualdade que são impróprios para ponto flutuante binário: >> Decimal> (0,00 '1 'Decimal)% ("0,10") Decimal (0,00 '0 ') TUTORIAL PYTHON 3.1 Português >>> 1,00% 0,10 ,09999999999999995 >> Soma> ([Decimal ('0 .1 ') * 10]) == decimal ('1 .0') Verdadeiro >> Soma> ([0.1] * 10) == 1,0 Falso O módulo fornece aritmética decimal com tanta precisão como necessário: >> GetContext> (). Prec = 36 >> Decimal> (1) / Decimal (7) Decimal (.142857142857142857142857142857142857 '0 ') 12. E agora? Lendo este tutorial provavelmente tem reforçado o seu interesse em utilizar Python - você deve estar ansioso para aplicar Python para resolver seus problemas do mundo real. Onde você deve ir para saber mais? Este tutorial é parte da documentação do Python set. Alguns outros documentos que constam no: * A biblioteca padrão Python: Você deve navegar por este manual, o que dá completo (embora resumido) material de referência sobre os tipos, funções e os módulos da biblioteca padrão. A distribuição padrão do Python inclui uma grande quantidade de código adicional. Existem módulos para ler correio Unix, recuperar documentos via HTTP, gerar números aleatórios, analisar as opções de linha de comando, escrever programas CGI, compactar os dados, e muitas outras tarefas. Skimming através da Biblioteca de Referência lhe dará uma idéia do que está disponível. * Instalando Python Módulos explica como instalar módulos externos escritas por outros usuários Python. * A linguagem Python Referência: Uma explicação detalhada da sintaxe e semântica do Python. É leitura pesada, mas é útil como um guia completo para a linguagem em si. Mais recursos Python: TUTORIAL PYTHON 3.1 Português pondo Tab: completo em seu ~ /. inputrc. (É claro, isso torna mais difícil a continuação linhas recuadas tipo se você está acostumado a usar Tab para essa finalidade). Complementação automática de variáveis e nomes de módulo está disponível opcionalmente. Para habilitá-lo no modo interativo do intérprete, adicione o seguinte ao seu arquivo de inicialização: [1] rlcompleter de importação, readline readline.parse_and_bind ('tab: complete') Esta liga-se a tecla Tab para a função de conclusão, de modo a apertar a tecla Tab duas vezes sugere complementos, que olha para nomes declaração Python, variáveis local atual, e os nomes disponíveis módulo. Para expressões pontilhada como string.a, ele irá avaliar a expressão até o "final". e então sugerir conclusões a partir dos atributos do objeto resultante. Observe que isso pode executar um código definido pelo aplicativo, se um objeto com um __getattr__ () é parte da expressão. Um arquivo de inicialização mais capaz pôde olhar como este exemplo. Observe que isso exclui os nomes que cria uma vez que eles não são mais necessários, o que é feito desde o arquivo de inicialização é executado no mesmo espaço de nomes como os comandos interativos, e remover os nomes evita criar efeitos colaterais no ambiente interativo. Você pode achar que é conveniente manter alguns dos módulos importados, como os, que acabam por ser necessário na maioria das sessões com o intérprete. # Adicione preenchimento automático e um arquivo histórico de comandos armazenados no seu Python # Interpretador interativo. Requer Python 2.0 + readline. Autocomplete é # Vinculado à tecla Esc por padrão (você pode alterá-lo - ver docs readline). # # Armazene o arquivo em ~ / pystartup. E definir uma variável de ambiente para apontar # Para isso: "export PYTHONSTARTUP = / home / user / .pystartup" em bash. # # Note que PYTHONSTARTUP * não * expandir "~", então você tem que colocar no # Caminho completo para o diretório home. atexit importação OS importação readline importação rlcompleter importação historyPath = os.path.expanduser ("~/. pyhistory ") TUTORIAL PYTHON 3.1 Português save_history def (historyPath = historyPath): readline importação historyPath (readline.write_history_file) se os.path.exists historyPath (): historyPath (readline.read_history_file) atexit.register (save_history) del OS, atexit, readline, rlcompleter, save_history, historyPath 13.4. Alternativas para o interpretador interativo Esta facilidade é um enorme passo em frente em comparação com as versões anteriores do intérprete, no entanto, alguns desejos são deixados: Seria bom se a indentação foram sugeridos em linhas de continuação (o parser sabe se um token travessão é necessário seguir). O mecanismo de completação pode usar a tabela do intérprete símbolo. Um comando para verificar (ou mesmo sugerir) parênteses correspondentes, citações, etc, também seria útil. Uma alternativa melhor intérprete interativo que tem sido em torno de algum tempo é IPython, que apresenta a conclusão de tabulação, objeto de exploração e gestão avançada da história. Também pode ser completamente personalizado e incorporado em outros aplicativos. Outro ambiente interativo é reforçada similar bpython. Notas de Rodapé [1] Python executará o conteúdo de um arquivo identificado pela variável de ambiente PYTHONSTARTUP quando você iniciar um interpretador interativo.
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved