forked from rsouza/Python_Course
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtexto_python.txt
executable file
·1608 lines (1393 loc) · 81 KB
/
texto_python.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/Python/
Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação <#mw-head>, pesquisa <#p-search>
Disambig grey.svg *Nota:* Para outros significados, veja Python
(desambiguação) </wiki/Python_(desambigua%C3%A7%C3%A3o)>.
Python
Python logo and wordmark.svg </wiki/Ficheiro:Python_logo_and_wordmark.svg>
Paradigma </wiki/Paradigma_de_programa%C3%A7%C3%A3o> Multiparadigma
</wiki/Multiparadigma>:
Orientação a objetos </wiki/Orienta%C3%A7%C3%A3o_a_objetos>
Programação imperativa </wiki/Programa%C3%A7%C3%A3o_imperativa>
Programação funcional </wiki/Programa%C3%A7%C3%A3o_funcional>
Surgido em 1991 </wiki/1991>^[1] <#cite_note-svn-hist.C3.B3ria-1>
Última versão </wiki/Vers%C3%A3o> 3.4.1 (18 de maio de 2014^[2]
<#cite_note-2> )
Criado por Guido van Rossum </wiki/Guido_van_Rossum>^[1]
<#cite_note-svn-hist.C3.B3ria-1>
Estilo de tipagem </wiki/Tipo_de_dado>: Dinâmica, forte
Dialetos: CPython </wiki/CPython>, IronPython </wiki/IronPython>,
Jython </wiki/Jython>, PyPy </w/index.php?title=PyPy&action=edit&redlink=1>
Influenciada por ABC
</wiki/ABC_(linguagem_de_programa%C3%A7%C3%A3o)>,^[3]
<#cite_note-influ.C3.AAncias-3> ALGOL 68 </wiki/ALGOL_68>, C
</wiki/C_(linguagem_de_programa%C3%A7%C3%A3o)>^[3]
<#cite_note-influ.C3.AAncias-3> , Haskell
</wiki/Haskell_(linguagem_de_programa%C3%A7%C3%A3o)>, Icon
</wiki/Icon_(linguagem_de_programa%C3%A7%C3%A3o)>, Java
</wiki/Java_(linguagem_de_programa%C3%A7%C3%A3o)>, Lisp </wiki/Lisp>,
Modula-3 </wiki/Modula-3>^[3] <#cite_note-influ.C3.AAncias-3> , Perl
</wiki/Perl>, Smalltalk </wiki/Smalltalk>
Influenciou Boo </wiki/Boo>, D
</wiki/D_(linguagem_de_programa%C3%A7%C3%A3o)>, Falcon
</w/index.php?title=Falcon_(linguagem_de_programa%C3%A7%C3%A3o)&action=edit&redlink=1>,
Fantom </wiki/Fantom>, Groovy </wiki/Groovy>, JavaScript
</wiki/JavaScript>, Nimrod
</wiki/Nimrod_(linguagem_de_programa%C3%A7%C3%A3o)>, Py
</wiki/Py_(linguagem_de_programa%C3%A7%C3%A3o)>, Ruby
</wiki/Ruby_(linguagem_de_programa%C3%A7%C3%A3o)>, Squirrel
</wiki/Squirrel>
Página oficial </wiki/Site> www.python.org <http://www.python.org/>
/*Python*/ é uma linguagem de programação de alto nível
</wiki/Linguagem_de_programa%C3%A7%C3%A3o_de_alto_n%C3%ADvel>^[4]
<#cite_note-entrevista-venners-pt-1-4> , interpretada
</wiki/Linguagem_interpretada>, imperativa
</wiki/Programa%C3%A7%C3%A3o_imperativa>, orientada a objetos
</wiki/Orienta%C3%A7%C3%A3o_a_objetos>, funcional
</wiki/Programa%C3%A7%C3%A3o_funcional>, de tipagem </wiki/Tipo_de_dado>
dinâmica e forte. Foi lançada por Guido van Rossum
</wiki/Guido_van_Rossum> em 1991 </wiki/1991>.^[1]
<#cite_note-svn-hist.C3.B3ria-1> Atualmente possui um modelo de
desenvolvimento comunitário, aberto e gerenciado pela organização sem
fins lucrativos </wiki/Organiza%C3%A7%C3%A3o_sem_fins_lucrativos> Python
Software Foundation </wiki/Python_Software_Foundation>. Apesar de várias
partes da linguagem possuírem padrões e especificações formais, a
linguagem como um todo não é formalmente especificada. O padrão /de
facto </wiki/De_facto>/ é a implementação CPython </wiki/CPython>.
A linguagem foi projetada com a filosofia de enfatizar a importância do
esforço do programador sobre o esforço computacional. Prioriza a
legibilidade do código sobre a velocidade ou expressividade. Combina uma
sintaxe </wiki/Sintaxe> concisa e clara com os recursos poderosos de sua
biblioteca </wiki/Biblioteca_de_rotinas> padrão e por módulos
</wiki/M%C3%B3dulo_de_um_programa> e /frameworks </wiki/Framework>/
desenvolvidos por terceiros.
O nome /*Python*/ teve a sua origem no grupo humorístico britânico
</wiki/Reino_Unido> Monty Python </wiki/Monty_Python>,^[5]
<#cite_note-Computerworld-5> criador do programa /Monty Python's Flying
Circus </wiki/Monty_Python>/, embora muitas pessoas façam associação com
o réptil </wiki/R%C3%A9ptil> do mesmo nome (em português
</wiki/L%C3%ADngua_portuguesa>, /píton </wiki/P%C3%ADton>/ ou /pitão/).
Índice
[esconder <#>]
* 1 História <#Hist.C3.B3ria>
* 2 Filosofia <#Filosofia>
* 3 Características <#Caracter.C3.ADsticas>
o 3.1 Construções <#Constru.C3.A7.C3.B5es>
o 3.2 Tipos de dado <#Tipos_de_dado>
o 3.3 Palavras reservadas <#Palavras_reservadas>
o 3.4 Operadores <#Operadores>
o 3.5 Interpretador interativo <#Interpretador_interativo>
o 3.6 Análise léxica <#An.C3.A1lise_l.C3.A9xica>
+ 3.6.1 Indentação <#Indenta.C3.A7.C3.A3o>
o 3.7 Compilador de bytecode <#Compilador_de_bytecode>
o 3.8 Polimorfismo <#Polimorfismo>
o 3.9 Orientação a objetos <#Orienta.C3.A7.C3.A3o_a_objetos>
o 3.10 Programação funcional <#Programa.C3.A7.C3.A3o_funcional>
o 3.11 Tratamento de exceções <#Tratamento_de_exce.C3.A7.C3.B5es>
o 3.12 Biblioteca padrão <#Biblioteca_padr.C3.A3o>
o 3.13 Comentários <#Coment.C3.A1rios>
* 4 Plataformas disponíveis <#Plataformas_dispon.C3.ADveis>
* 5 Implementações <#Implementa.C3.A7.C3.B5es>
* 6 Desenvolvimento <#Desenvolvimento>
* 7 Licença <#Licen.C3.A7a>
* 8 Módulos e /frameworks/ <#M.C3.B3dulos_e_frameworks>
o 8.1 Interfaces gráficas <#Interfaces_gr.C3.A1ficas>
* 9 Ambientes de desenvolvimento integrado
<#Ambientes_de_desenvolvimento_integrado>
* 10 Aplicações <#Aplica.C3.A7.C3.B5es>
* 11 Referências <#Refer.C3.AAncias>
* 12 Bibliografia <#Bibliografia>
* 13 Ligações externas <#Liga.C3.A7.C3.B5es_externas>
História[editar
</w/index.php?title=Python&veaction=edit&vesection=1>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=1>]
</wiki/Ficheiro:He_invented_Python.jpg>
</wiki/Ficheiro:He_invented_Python.jpg>
Guido van Rossum </wiki/Guido_van_Rossum>, São Francisco, Califórnia
Python foi concebido no final de 1989 </wiki/1989>^[4]
<#cite_note-entrevista-venners-pt-1-4> ^[5] <#cite_note-Computerworld-5>
por Guido van Rossum </wiki/Guido_van_Rossum> no Instituto de Pesquisa
Nacional para Matemática e Ciência da Computação (CWI), nos Países
Baixos </wiki/Pa%C3%ADses_Baixos>, como um sucessor da ABC
</wiki/ABC_(linguagem_de_programa%C3%A7%C3%A3o)> capaz de tratar
exceções </wiki/Tratamento_de_exce%C3%A7%C3%B5es> e prover interface com
o sistema operacional </wiki/Sistema_operacional> Amoeba
</wiki/Amoeba_(sistema_operacional)>^[6] <#cite_note-faq-criado-6>
através de scripts </wiki/Linguagem_de_script>. Também da CWI, a
linguagem ABC era mais produtiva que C
</wiki/C_(linguagem_de_programa%C3%A7%C3%A3o)>, ainda que com o custo do
desempenho em tempo de execução </wiki/Tempo_de_execu%C3%A7%C3%A3o>. Mas
ela não possuía funcionalidades importantes para a interação com o
sistema operacional, uma necessidade do grupo. Um dos focos primordiais
de Python era aumentar a produtividade do programador.^[5]
<#cite_note-Computerworld-5>
Em 1991 </wiki/1991>, Guido publicou o código (nomeado versão 0.9.0) no
grupo de discussão alt.sources.^[1] <#cite_note-svn-hist.C3.B3ria-1>
Nessa versão já estavam presentes classes
</wiki/Classe_(programa%C3%A7%C3%A3o)> com herança
</wiki/Heran%C3%A7a_(programa%C3%A7%C3%A3o)>, tratamento de exceções,
funções </w/index.php?title=Subrotina&action=edit&redlink=1> e os tipos
de dado </wiki/Tipo_de_dado> nativos |list </wiki/Lista>|, |dict
</wiki/Dicion%C3%A1rio>|, |str </wiki/Cadeia_de_caracteres>|, e assim
por diante. Também estava presente nessa versão um sistema de módulos
emprestado do Modula-3 </wiki/Modula-3>. O modelo de exceções também
lembrava muito o do Modula-3, com a adição da opção |else| clause.^[6]
<#cite_note-faq-criado-6> Em 1994 </wiki/1994> foi formado o principal
fórum de discussão do Python, comp.lang.python, um marco para o
crescimento da base de usuários da linguagem.
A versão 1.0 foi lançada em janeiro de 1994. Novas funcionalidades
incluíam ferramentas para programação funcional
</wiki/Programa%C3%A7%C3%A3o_funcional> como |lambda
</wiki/C%C3%A1lculo_lambda>|, |map|, |filter| e |reduce|. A última
versão enquanto Guido estava na CWI foi o Python 1.2. Em 1995
</wiki/1995>, ele continuou o trabalho no CNRI em Reston </wiki/Reston>,
Estados Unidos </wiki/Estados_Unidos>, de onde lançou diversas versões.
Na versão 1.4 a linguagem ganhou parâmetros nomeados (a capacidade de
passar parâmetro pelo nome e não pela posição na lista de parâmetros) e
suporte nativo a números complexos </wiki/N%C3%BAmero_complexo>, assim
como uma forma de encapsulamento </wiki/Encapsulamento>.^[7] <#cite_note-7>
Ainda na CNRI, Guido lançou a iniciativa /Computer Programming for
Everybody/ (CP4E; literalmente, "Programação de Computadores para
Todos"), que visava tornar a programação
</wiki/Programa%C3%A7%C3%A3o_de_computadores> mais acessível, um projeto
financiado pela DARPA </wiki/DARPA>.^[8] <#cite_note-8> Atualmente o
CP4E encontra-se inativo.
Em 2000 </wiki/2000>, o time de desenvolvimento da linguagem se mudou
para a BeOpen a fim de formar o time PythonLabs
</w/index.php?title=PythonLabs&action=edit&redlink=1>. A CNRI pediu que
a versão 1.6 fosse lançada, para marcar o fim de desenvolvimento da
linguagem naquele local. O único lançamento na BeOpen foi o Python 2.0,
e após o lançamento o grupo de desenvolvedores da PythonLabs agrupou-se
na Digital Creations
</w/index.php?title=Digital_Creations&action=edit&redlink=1>.
Python 2.0 implementou list comprehension </wiki/List_comprehension>,
uma relevante funcionalidade de linguagens funcionais como SETL
</wiki/SETL> e Haskell
</wiki/Haskell_(linguagem_de_programa%C3%A7%C3%A3o)>. A sintaxe da
linguagem para essa construção é bastante similar a de Haskell, exceto
pela preferência do Haskell por caracteres de pontuação e da preferência
do python por palavras reservadas </wiki/Palavra_reservada> alfabéticas.
Essa versão 2.0 também introduziu um sistema coletor de lixo
</wiki/Coletor_de_lixo> capaz de identificar e tratar ciclos de
referências.^[9] <#cite_note-newin-2.0-9>
Já o 1.6 incluiu uma licença CNRI substancialmente mais longa que a
licença CWI que estavam usando nas versões anteriores. Entre outras
mudanças, essa licença incluía uma cláusula atestando que a licença era
governada pelas leis da Virgínia </wiki/Virg%C3%ADnia>. A Free Software
Foundation </wiki/Free_Software_Foundation> alegou que isso era
incompatível com a GNU GPL </wiki/GNU_GPL>. Tanto BeOpen quanto CNRI e
FSF negociaram uma mudança na licença livre do Python que o tornaria
compatível com a GPL. Python 1.6.1 é idêntico ao 1.6.0, exceto por
pequenas correções de falhas e uma licença nova, compatível com a
GPL.^[10] <#cite_note-hist.C3.B3ria-lib-10>
Python 2.1 era parecido com as versões 1.6.1 e 2.0. Sua licença foi
renomeada para Python Software Foundation License. Todo código,
documentação e especificação desde o lançamento da versão alfa
</wiki/Vers%C3%A3o_alfa> da 2.1 é propriedade da Python Software
Foundation </wiki/Python_Software_Foundation> (PSF), uma organização sem
fins lucrativos </wiki/Organiza%C3%A7%C3%A3o_sem_fins_lucrativos>
fundada em 2001, um modelo tal qual da Apache Software Foundation
</wiki/Apache_Software_Foundation>.^[10]
<#cite_note-hist.C3.B3ria-lib-10> O lançamento incluiu a mudança na
especificação para suportar escopo aninhado, assim como outras
linguagens com escopo estático.^[11] <#cite_note-11> Esta funcionalidade
estava desativada por padrão, e somente foi requerida na versão 2.2.
Uma grande inovação da versão 2.2 foi a unificação dos tipos Python
(escritos em C </wiki/C_(linguagem_de_programa%C3%A7%C3%A3o)>) e classes
(escritas em Python) em somente uma hierarquia. Isto tornou o modelo de
objetos do Python consistentemente orientado a objeto.^[12]
<#cite_note-12> Também foi adicionado generator
</wiki/Generator_(ci%C3%AAncia_da_computa%C3%A7%C3%A3o)>, inspirado em
Icon </wiki/Icon>.^[13] <#cite_note-13>
O incremento da biblioteca padrão e as escolhas sintáticas foram
fortemente influenciadas por Java
</wiki/Java_(linguagem_de_programa%C3%A7%C3%A3o)> em alguns casos: o
pacote |logging|^[14] <#cite_note-14> introduzido na versão 2.3,^[15]
<#cite_note-15> o analisador sintático </wiki/Analisador_sint%C3%A1tico>
SAX </wiki/SAX>, introduzido na versão 2.0 e a sintaxe de decoradores
que usa |@|,^[16] <#cite_note-16> adicionadas na versão 2.4.^[17]
<#cite_note-17>
Em 1 de outubro </wiki/1_de_outubro> de 2008 </wiki/2008> foi lançada a
versão 2.6, já visando a transição para a versão 3.0 da linguagem. Entre
outras modificações, foram incluídas bibliotecas
</wiki/Biblioteca_(computa%C3%A7%C3%A3o)> para multiprocessamento
</wiki/Multiprocessamento>, JSON </wiki/JSON> e E/S </wiki/E/S>, além de
uma nova forma de formatação de cadeias de caracteres
</wiki/Cadeia_de_caracteres>.^[18] <#cite_note-18>
Atualmente a linguagem é usada em diversas áreas, como servidores de
aplicação </wiki/Servidor_de_aplica%C3%A7%C3%A3o> e computação gráfica
</wiki/Computa%C3%A7%C3%A3o_gr%C3%A1fica>. Está disponível como
linguagem de script </wiki/Linguagem_de_script> em aplicações como
OpenOffice </wiki/OpenOffice> (Python UNO Bridge), Blender
</wiki/Blender> e pode ser utilizada em procedimentos armazenados
</wiki/Procedimento_armazenado_(banco_de_dados)> no sistema gerenciador
de banco de dados </wiki/Sistema_gerenciador_de_banco_de_dados>
PostgreSQL </wiki/PostgreSQL> (PL/Python).
A terceira versão da linguagem foi lançada em dezembro de 2008,^[19]
<#cite_note-19> chamada Python 3.0 ou Python 3000. Com noticiado desde
antes de seu lançamento,^[20] <#cite_note-20> houve quebra de
compatibilidade com a família 2.x para corrigir falhas que foram
descobertas neste padrão, e para limpar os excessos das versões
anteriores.^[5] <#cite_note-Computerworld-5> A primeira versão alfa
</wiki/Vers%C3%A3o_alfa> foi lançada em 31 de agosto
</wiki/31_de_agosto> de 2007 </wiki/2007>, a segunda em 7 de dezembro
</wiki/7_de_dezembro> do mesmo ano.
Mudanças da versão incluem a alteração da palavra reservada
</wiki/Palavra_reservada> |print|, que passa a ser uma função, tornando
mais fácil a utilização de uma versão alternativa da rotina. Em Python
2.6, isso já está disponível ao adicionar o código |from __future__
import print_function|.^[21] <#cite_note-21> Também, a mudança para
Unicode </wiki/Unicode> de todas as cadeias de caracteres
</wiki/Cadeia_de_caracteres>.
Filosofia[editar
</w/index.php?title=Python&veaction=edit&vesection=2>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=2>]
Parte da cultura da linguagem gira ao redor de /The Zen of Python/, um
poema que faz parte do documento "PEP 20 (The Zen of Python)",^[22]
<#cite_note-Zen-22> escrito pelo programador </wiki/Programador> em
Python de longa data Tim Peters
</w/index.php?title=Tim_Peters&action=edit&redlink=1>, descrevendo
sumariamente a filosofia do Python. Pode-se vê-lo através de um /easter
egg </wiki/Easter_egg>/ do Python pelo comando:
>>> import this
Características[editar
</w/index.php?title=Python&veaction=edit&vesection=3>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=3>]
Ver página anexa: Lista de exemplos de código Python
</wiki/Anexo:Lista_de_exemplos_de_c%C3%B3digo_Python>
Construções[editar
</w/index.php?title=Python&veaction=edit&vesection=4>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=4>]
Construções de Python incluem: estrutura de seleção
</wiki/Estrutura_de_sele%C3%A7%C3%A3o> (|if|, |else|, |elif|); estrutura
de repetição </wiki/Estrutura_de_repeti%C3%A7%C3%A3o> (|for, while|),
que itera por um container, capturando cada elemento em uma variável
local dada; construção de classes </wiki/Classe_(programa%C3%A7%C3%A3o)>
(|class|); construção de subrotinas
</w/index.php?title=Subrotina&action=edit&redlink=1> (|def|); construção
de escopo (|with|), como por exemplo para adquirir um recurso
</wiki/Exclus%C3%A3o_m%C3%BAtua>.
Tipos de dado[editar
</w/index.php?title=Python&veaction=edit&vesection=5>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=5>]
A tipagem de Python é forte, pois os valores e objetos têm tipos bem
definidos e não sofrem coerções como em C
</wiki/C_(linguagem_de_programa%C3%A7%C3%A3o)> ou Perl </wiki/Perl>. São
disponibilizados diversos tipos de dados </wiki/Tipo_de_dado> nativos:
Tipo de dado Descrição Exemplo da sintaxe
|str|, |unicode| Uma cadeia de caracteres </wiki/Cadeia_de_caracteres>
imutável |'Wikipedia'|, |u'Wikipedia'|
|list| Lista </wiki/Lista> heterogênea mutável |[4.0, 'string', True]|
|tuple| Tupla </wiki/Tupla> imutável |(4.0, 'string', True)|
|set|, |frozenset| Conjunto </wiki/Conjunto> não ordenado
</wiki/Ordena%C3%A7%C3%A3o_(computa%C3%A7%C3%A3o)>, não contém elementos
duplicados |set([4.0, 'string', True])|
|frozenset([4.0, 'string', True])|
|dict| conjunto </wiki/Conjunto> associativo |{'key1': 1.0, 'key2':
False}|
|int| Número de precisão fixa, é transparentemente convertido para
|long| caso não caiba em um int. |42|
|2147483648L|
|float| Ponto flutuante </wiki/Ponto_flutuante> |3.1415927|
|complex| Número complexo </wiki/N%C3%BAmero_complexo> |3+2j|
|bool| Booleano </wiki/Booleano> |True| ou |False|
Python também permite a definição dos tipos de dados próprios, através
de classes </wiki/Classe_(programa%C3%A7%C3%A3o)>. Instâncias são
construídas invocando a classe (|FooClass()|), e as classes são
instância da classe |type|, o que permite metaprogramação
</wiki/Metaprograma%C3%A7%C3%A3o> e reflexão
</wiki/Reflex%C3%A3o_(programa%C3%A7%C3%A3o)>. Métodos
</wiki/M%C3%A9todo_(programa%C3%A7%C3%A3o)> são definidos como funções
anexadas à classe, e a sintaxe |instância.método(argumento)| é um atalho
para |Classe.método(instância, argumento)|. Os métodos devem referenciar
explicitamente a referência para o objeto incluindo o parâmetro |self|
como o primeiro argumento do método.^[23] <#cite_note-23>
Antes da versão 3.0, Python possuía dois tipos de classes: "old-style" e
"new-style". Classes old-style foram eliminadas no Python 3.0, e todas
são new-style. Em versões entre 2.2 e 3.0, ambos tipos de classes podiam
ser usadas. A sintaxe de ambos estilos é a mesma, a diferença acaba
sendo de onde objeto da classe é herdado, direta ou indiretamente (todas
classes new-style herdam de object e são instancias de type). As classes
new-styles nada mais são que tipos definidos pelo usuário.
Palavras reservadas[editar
</w/index.php?title=Python&veaction=edit&vesection=6>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=6>]
O Python 2.5.2 define as seguintes 31 palavras reservadas
</wiki/Palavra_reservada>:^[24] <#cite_note-24>
and del from not while
as elif global or with
assert else if pass yield
break except import print
class exec in raise
continue finally is return
def for lambda try
Operadores[editar
</w/index.php?title=Python&veaction=edit&vesection=7>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=7>]
Os operadores básicos de comparação como |==|, |<|, |>=|, entre outros
são usados em todos os tipos de dados, como números, cadeias de texto,
listas e mapeamentos. Comparações em cadeia como |a < b < c| possuem o
mesmo significado básico que na matemática: os termos são comparadas na
ordem. É garantido que o processamento da expressão lógica irá terminar
tão cedo o veredito é claro, o princípio da avaliação mínima. Usando a
expressão anterior, se |a < b| é falso, |c| não é avaliado.
Quanto aos operadores lógicos, até Python 2.2 não havia o tipo de dado
booleano. Em todas as versões da linguagem os operadores lógicos tratam
|""|, |0|, |None|, |0.0|, |[]| e |{}| como falso, enquanto o restante é
tratado como verdadeiro de modo geral. Na versão 2.2.1 as constantes
|True| e |False| foram adicionadas (subclasses de 1 e 0
respectivamente). A comparação binária retorna uma das duas constantes
acima.
Os operadores booleanos |and| e |or| também seguem a avaliação mínima.
Por exemplo, |y == 0 or x/y > 100| nunca lançará a exceção de divisão
por zero.
Interpretador interativo[editar
</w/index.php?title=Python&veaction=edit&vesection=8>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=8>]
O interpretador interativo é uma característica diferencial da
linguagem, porque há a possibilidade de testar o código de um programa e
receber o resultado em tempo real, antes de iniciar a compilação
</wiki/Compila%C3%A7%C3%A3o> ou incluí-las nos programas. Por exemplo:
>>> 1+1
2
>>>
>>> a = 1+1
>>> print a
2
>>> print(a)
2
>>>
*Nota:* A partir da versão 3.0, o comando |print| passou a ser uma
função, sendo obrigatório o uso de parênteses.^[25] <#cite_note-25>
Análise léxica[editar
</w/index.php?title=Python&veaction=edit&vesection=9>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=9>]
</wiki/Ficheiro:Python_script.svg>
</wiki/Ficheiro:Python_script.svg>
Exemplo de script
No segundo capítulo do /Manual de Referência da Linguagem Python/ é
citado que a análise léxica </wiki/An%C3%A1lise_l%C3%A9xica> é uma
análise do interpretador em si, os programas são lidos por um analisador
sintático </wiki/An%C3%A1lise_sint%C3%A1tica_(computa%C3%A7%C3%A3o)> que
divide o código em /tokens </wiki/Token>/.
Todo programa é dividido em linhas lógicas que são separadas pelo
/token/ /NEWLINE/ ou /NOVA LINHA/, as linhas físicas são trechos de
código divididos pelo caractere /ENTER/. Linhas lógicas não podem
ultrapassar linhas físicas com exceção de junção de linhas, por exemplo:
if resultado > 2 and \
1 <= 5 and \
2 < 5:
print ('Resultado: %f' % d)
ou
MESES_DO_ANO = ['janeiro', 'fevereiro', 'março',
'abril', 'maio', 'junho',
'julho', 'agosto', 'setembro',
'outubro', 'novembro', 'dezembro']
Para a delimitação de blocos de códigos os delimitadores são colocados
em uma pilha </wiki/LIFO> e diferenciados por sua indentação
</wiki/Indenta%C3%A7%C3%A3o>. Iniciando a pilha com valor 0 (zero) e
colocando valores maiores que os anteriores na pilha. Para cada começo
de linha, o nível de indentação é comparado com o valor do topo da
pilha. Se o número da linha for igual ao topo da pilha, a pilha não é
alterada. Se o valor for maior a pilha recebe o nível de indentação da
linha e o nome /INDENT/ (empilhamento) se o nível de indentação for
menor, então é desempilhado até chegar a um nível de indentação
recebendo o nome /DEDENT/ (desempilhamento) e se não encontrar nenhum
valor é gerado um erro de indentação.
Abaixo um exemplo de permutação, retirado do capítulo 2.1 sobre
Estrutura de linhas na Análise léxica do Manual de Referência da
linguagem (/Language Reference Manual/):
def perm(l): NOVA LINHA
INDENT if len(l) <= 1: NOVA LINHA
INDENT return[1] NOVA LINHA
DEDENT r = [ ] NOVA LINHA
for i in range(len(l)): NOVA LINHA
INDENT s = l[:i] + l[i+1:] NOVA LINHA
p = perm(s) NOVA LINHA
DEDENT for x in p: NOVA LINHA
INDENT r.append(l[i:i+1]+x) NOVA LINHA
DEDENT return r
Indentação[editar
</w/index.php?title=Python&veaction=edit&vesection=10>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=10>]
Python foi desenvolvido para ser uma linguagem de fácil leitura, com um
visual agradável, frequentemente usando palavras e não pontuações como
em outras linguagens. Para a separação de blocos de código, a linguagem
usa espaços em branco e indentação </wiki/Indenta%C3%A7%C3%A3o> ao invés
de delimitadores visuais como chaves (C, Java) ou palavras (BASIC
</wiki/BASIC>, Fortran </wiki/Fortran>, Pascal
</wiki/Pascal_(linguagem_de_programa%C3%A7%C3%A3o)>). Diferente de
linguagens com delimitadores visuais de blocos, em Python a indentação é
obrigatória. O aumento da indentação indica o início de um novo bloco,
que termina da diminuição da indentação.
Usando um editor de texto </wiki/Editor_de_texto> comum é muito fácil
existir erros de indentação, o recomendado é configurar o editor
conforme a análise léxica </wiki/An%C3%A1lise_l%C3%A9xica> do Python ou
utilizar uma IDE </wiki/Ambiente_de_Desenvolvimento_Integrado>. Todas as
IDE que suportam a linguagem fazem indentação automaticamente.
Exemplo:
Indentação correta
def valor1():
while True:
try:
c = int(raw_input('Primeiro Valor: '))
return c
except ValueError:
print 'Inválido!'
Indentação incorreta
def valor1():
while True:
try:
c = int(raw_input('Primeiro Valor: '))
return c
except ValueError:
print 'Inválido!'
O código está correto para os dois exemplos, mas o analisador léxico
verificará se a indentação está coerente. O analisador reconhecerá as
palavras reservadas </wiki/Palavra_reservada> |while|, |def|, |try|,
|except|, |return|, |print| e as cadeias de caracteres
</wiki/Cadeia_de_caracteres> entre aspas simples e a indentação, e se
não houver problemas o programa executará normalmente, senão apresentará
a exceção: "Seu programa está com erro no bloco de indentação".
Compilador de bytecode[editar
</w/index.php?title=Python&veaction=edit&vesection=11>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=11>]
A linguagem é de altíssimo nível, como já dito, mas ela também pode
compilar </wiki/Compilador> seus programas para que a próxima vez que o
executar não precise compilar novamente o programa, reduzindo o tempo de
carga na execução.
Utilizando o interpretador interativo não é necessário a criação do
arquivo de Python compilado, os comandos são executados interativamente.
Porém quando um programa ou um módulo é evocado, o interpretador realiza
a análise léxica e sintática, compila o código de alto nível se
necessário e o executa na máquina virtual </wiki/M%C3%A1quina_virtual>
da linguagem.
O /bytecode </wiki/Bytecode>/ é armazenado em arquivos com extensão
|.pyc| ou |.pyo|, este último no caso de /bytecode/ otimizado.
Interessante notar que o /bytecode/ da linguagem também é de alto nível,
ou seja, é mais legível aos seres humanos que o código de byte do C, por
exemplo. Para descompilar um código de byte é utilizado o módulo |dis|
da biblioteca padrão da linguagem e existem módulos de terceiros que
tornam o /bytecode/ mais confuso, tornando a descompilação ineficaz.
Normalmente, o Python trabalha com dois grupos de arquivos:
1. Os módulos do núcleo </wiki/N%C3%BAcleo_(inform%C3%A1tica)> da
linguagem, sua biblioteca padrão e os módulos independentes, criados
pelo usuário.
2. No núcleo do interpretador existe o analisador léxico, o analisador
sintático que utiliza /Estruturas de Objetos/ (tempo de execução
</wiki/Tempo_de_execu%C3%A7%C3%A3o>), o Compilador que /aloca
memória/ (tempo de execução) e depois do Avaliador de código que
modifica o /estado atual/ do programa (tempo de execução), mostrando
resultado para o usuário.
Polimorfismo[editar
</w/index.php?title=Python&veaction=edit&vesection=12>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=12>]
O conceito de polimorfismo </wiki/Polimorfismo> descreve como objetos
podem ser manipulados e acessados usando atributos e comportamentos em
comum sem considerar sua classe específica e indica a presença de /late
binding </w/index.php?title=Late_binding&action=edit&redlink=1>/,
permitindo sobrecarga e determinação de tipos em tempo de execução e
verificação.
Muitas linguagens orientadas a objeto utilizam assinaturas de função
para determinar qual versão de um método sobrecarregado chamar. No
entanto, as chamadas de função em Python são universais ou genéricas sem
determinação de tipo. Por isso, sobrecarga não é suportada na linguagem.
Orientação a objetos[editar
</w/index.php?title=Python&veaction=edit&vesection=13>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=13>]
Python suporta a maioria das técnicas da programação orientada a objeto
</wiki/Programa%C3%A7%C3%A3o_orientada_a_objeto>. Qualquer objeto pode
ser usado para qualquer tipo, e o código funcionará enquanto haja
métodos e atributos adequados. O conceito de objeto na linguagem é
bastante abrangente: classes, funções, números e módulos são todos
considerados objetos. Também há suporte para metaclasses
</wiki/Metaclasse>, polimorfismo </wiki/Polimorfismo>, e herança
</wiki/Heran%C3%A7a_(programa%C3%A7%C3%A3o)> (inclusive herança múltipla
</wiki/Heran%C3%A7a_m%C3%BAltipla>). Há um suporte limitado para
variáveis privadas.
Na versão 2.2 de Python foi introduzido um novo estilo de classes em que
objetos e tipos foram unificados, permitindo a especialização de tipos.
Já a partir da versão 2.3 foi introduzido um novo método de resolução de
ambiguidades para heranças múltiplas.^[26] <#cite_note-26>
Uma classe é definida com |class nome:|, e o código seguinte é a
composição dos atributos. Todos os métodos da classe recebem uma
referência a uma instância da própria classe como seu primeiro
argumento, e a convenção é que se chame este argumento |self|. Assim os
métodos são chamados |objeto.método(argumento1, argumento2, ...)| e são
definidos iguais a uma função, como |método(self, argumento1,
argumento2, ...)|. Veja que o parâmetro |self| conterá uma referência
para a instância da classe definida em |objeto| quando for efetuada esta
chamada. Os atributos da classe podem ser acessados em qualquer lugar da
classe, e os atributos de instância (ou variável de instância) devem ser
declarados dentro dos métodos utilizando a referência à instância atual
(/self/) /(ver código contextualizado em anexo
</wiki/Anexo:Lista_de_exemplos_de_c%C3%B3digo_Python#Orienta.C3.A7.C3.A3o_a_objeto>)/.
Em Python não existe proteção dos membros duma classe ou instância pelo
interpretador, o chamado encapsulamento </wiki/Encapsulamento>.
Convenciona-se que atributos com o nome começando com um _ são de uso
privado da classe, mas não há um policiamento do interpretador contra
acesso a estes atributos. Uma exceção são nomes começando com |__|, no
caso em que o interpretador modifica o nome do atributo /(ver código
contextualizado em anexo
</wiki/Anexo:Lista_de_exemplos_de_c%C3%B3digo_Python#Encapsulamento>)/.
Python permite polimorfismo, que condiz com a reutilização de código. É
fato que funções semelhantes em várias partes do software sejam
utilizadas várias vezes, então definimos esta função como uma biblioteca
e todas as outras funções que precisarem desta a chamam sem a
necessidade de reescrevê-la /(ver código contextualizado em anexo
</wiki/Anexo:Lista_de_exemplos_de_c%C3%B3digo_Python#Polimorfismo>)/.
Programação funcional[editar
</w/index.php?title=Python&veaction=edit&vesection=14>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=14>]
Uma das construções funcionais de Python é compreensão de listas
</wiki/List_comprehension>, uma forma de construir listas. Por exemplo,
pode-se usar a técnica para calcular as cinco primeiras potências de
dois. O algoritmo /quicksort </wiki/Quicksort>/ também pode ser
expressado usando a mesma técnica /(ver códigos contextualizados para
ambos os casos em anexo
</wiki/Anexo:Lista_de_exemplos_de_c%C3%B3digo_Python#Compreens.C3.A3o_de_listas>)/.
Em Python, funções são objetos de primeira classe que podem ser criados
e armazenados dinamicamente. O suporte à funções anônimas está na
construção |lambda| (cálculo Lambda </wiki/C%C3%A1lculo_Lambda>). Não há
disponibilidade de funções anônimas de fato, pois os lambdas contêm
somente expressões e não blocos de código.
Python também suporta clausuras léxicas
</wiki/Clausura_(ci%C3%AAncia_da_computa%C3%A7%C3%A3o)> desde a versão
2.2 /(ver códigos contextualizados para ambos os casos em anexo
</wiki/Anexo:Lista_de_exemplos_de_c%C3%B3digo_Python#Closures>)/. Já
geradores </wiki/Generator_(ci%C3%AAncia_da_computa%C3%A7%C3%A3o)> foram
introduzidos na versão 2.2 e finalizados na versão 2.3, e representam o
mecanismo de Python para a avaliação preguiçosa
</wiki/Avalia%C3%A7%C3%A3o_pregui%C3%A7osa> de funções /(ver códigos
contextualizados para ambos os casos em anexo
</wiki/Anexo:Lista_de_exemplos_de_c%C3%B3digo_Python#Geradores>)/.
Tratamento de exceções[editar
</w/index.php?title=Python&veaction=edit&vesection=15>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=15>]
Python suporta e faz uso constante de tratamento de exceções
</wiki/Tratamento_de_exce%C3%A7%C3%B5es> como uma forma de testar
condições de erro e outros eventos inesperados no programa. É inclusive
possível capturar uma exceção causada por um erro de sintaxe. O estilo
da linguagem apóia o uso de exceções sempre que uma condição de erro
pode aparecer. Por exemplo, ao invés de testar a disponibilidade de
acesso a um recurso, a convenção é simplesmente tentar usar o recurso e
capturar a exceção caso o acesso seja rejeitado (recurso inexistente,
permissão de acesso insuficiente, recurso já em uso, ...).
Exceções são usadas frequentemente como uma estrutura de seleção,
substituindo blocos |if-else|, especialmente em situações que envolvem
/threads </wiki/Thread_(ci%C3%AAncia_da_computa%C3%A7%C3%A3o)>/. Uma
convenção de codificação é o EAFP, do inglês, "é mais fácil pedir perdão
que permissão". Isso significa que em termos de desempenho é preferível
capturar exceções do que testar atributos antes de os usar. Segue abaixo
exemplos de código que testam atributos ("pedem permissão") e que
capturam exceções ("pedem perdão"):
Teste de atributo
if hasattr(spam, 'eggs'):
ham = spam.eggs
else:
handle_error()
Captura de exceção
try:
ham = spam.eggs
except AttributeError:
handle_error()
Ambos os códigos produzem o mesmo efeito, mas há diferenças de
desempenho. Quando |spam| possui o atributo |eggs|, o código que captura
exceções é mais rápido. Caso contrário, a captura da exceção representa
uma perda considerável de desempenho, e o código que testa o atributo é
mais rápido. Na maioria dos casos o paradigma da captura de exceções é
mais rápido, e também pode evitar problemas de concorrência
</wiki/Concorr%C3%AAncia_(inform%C3%A1tica)>.^[27] <#cite_note-27> Por
exemplo, num ambiente multitarefa, o espaço de tempo entre o teste do
atributo e seu uso de fato pode invalidar o atributo, problema que não
acontece no caso da captura de exceções.
Biblioteca padrão[editar
</w/index.php?title=Python&veaction=edit&vesection=16>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=16>]
Python possui uma grande biblioteca </wiki/Biblioteca_de_rotinas>
padrão, geralmente citada como um dos maiores triunfos da
linguagem,^[28] <#cite_note-28> fornecendo ferramentas para diversas
tarefas. Recentemente, a biblioteca Boost </wiki/Biblioteca_Boost> do
C++ </wiki/C%2B%2B> incluiu uma biblioteca para permitir a
interoperabilidade entre as duas linguagens. Por conta da grande
variedade de ferramentas fornecida pela biblioteca padrão, combinada com
a a habilidade de usar linguagens de nível mais baixo como C e C++,
Python pode ser poderosa para conectar componentes diversos de software.
A biblioteca padrão conta com facilidades para escrever aplicações para
a Internet </wiki/Internet>, contando com diversos formatos e protocolos
</wiki/Protocolo_(ci%C3%AAncia_da_computa%C3%A7%C3%A3o)> como MIME
</wiki/MIME> e HTTP </wiki/Hypertext_Transfer_Protocol>. Também há
módulos para criar interfaces gráficas
</wiki/Interface_gr%C3%A1fica_do_utilizador>, conectar em bancos de
dados relacionais </wiki/Banco_de_dados_relacional> e manipular
expressões regulares </wiki/Express%C3%A3o_regular>.
Algumas partes da biblioteca são cobertas por especificações (por
exemplo, a implementação WSGI </wiki/Web_Server_Gateway_Interface> da
|wsgiref| segue o PEP 333^[29] <#cite_note-29> ), mas a maioria dos
módulos não segue.
Comentários[editar
</w/index.php?title=Python&veaction=edit&vesection=17>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=17>]
Python fornece duas alternativas para documentar o código. A primeira é
o uso de comentários para indicar o que certo código faz. Comentários
começam com |#| e são terminados pela quebra da linha. Não há suporte
para comentários que se estendem por mais de uma linha; cada linha
consecutiva de comentário deve indicar |#|. A segunda alternativa é o
uso de cadeias de caractere, literais de texto inseridos no código sem
atribuição. Cadeias de caracteres em Python são delimitadas por |"| ou
|'| para única linha e por |"""| ou |'''| para múltiplas linhas.
Entretanto, é convenção usar o métodos de múltiplas linhas em ambos os
casos.
Diferente de comentários, a cadeias de caracteres usadas como
documentação são objetos Python e fazem parte do código interpretado.
Isso significa que um programa pode acessar sua própria documentação e
manipular a informação. Há ferramentas que extraem automaticamente essa
documentação para a geração da documentação de API </wiki/API> a partir
do código. Documentação através de cadeias de caracteres também pode ser
acessada a partir do interpretador através da função |help()|.
Plataformas disponíveis[editar
</w/index.php?title=Python&veaction=edit&vesection=18>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=18>]
A linguagem e seu interpretador estão disponíveis para as mais diversas
plataformas </wiki/Plataforma_(inform%C3%A1tica)>, desde Unix
</wiki/Unix> (Linux </wiki/Linux>, FreeBSD </wiki/FreeBSD>, Solaris
</wiki/Solaris>, MacOS X </wiki/MacOS_X>, etc.), Windows
</wiki/Windows>, .NET </wiki/.NET>, versões antigas de MacOS
</wiki/MacOS> até consoles de jogos eletrônicos ou mesmo alguns
celulares, como a série 60, N8xx(PyMaemo) da Nokia </wiki/Nokia> e
palmtops </wiki/PDA>.
Para algum sistema operacional </wiki/Sistema_operacional> não
suportado, basta que exista um compilador </wiki/Compilador> C
disponível e gerar o Python a partir do fonte. O código fonte é
traduzido pelo interpretador para o formato /bytecode </wiki/Bytecode>/,
que é multiplataforma </wiki/Multiplataforma> e pode ser executado e
distribuído sem fonte original.
Implementações[editar
</w/index.php?title=Python&veaction=edit&vesection=19>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=19>]
A implementação original e mais conhecida do Python é o /CPython
</wiki/CPython>/, escrita em C
</wiki/C_(linguagem_de_programa%C3%A7%C3%A3o)> e compatível com o padrão
C89 </wiki/C89>,^[30] <#cite_note-30> sendo distribuída com uma grande
biblioteca padrão escrita em um misto de Python e C. Esta implementação
é suportada em diversas plataformas, incluindo Microsoft Windows
</wiki/Microsoft_Windows> e sistemas Unix-like </wiki/Unix-like> modernos.
Stackless Python
</w/index.php?title=Stackless_Python&action=edit&redlink=1> é uma
variação do CPython que implementa microthreads
</w/index.php?title=Microthread&action=edit&redlink=1> (permitindo
multitarefa </wiki/Multitarefa> sem o uso de threads
</wiki/Thread_(ci%C3%AAncia_da_computa%C3%A7%C3%A3o)>), sendo suportada
em quase todas as plataformas que a implementação original.
Existem também implementações para plataformas já existentes: Jython
</wiki/Jython> para a Plataforma Java </wiki/Plataforma_Java> e
IronPython </wiki/IronPython> para .NET </wiki/.NET>.
Em 2005 </wiki/2005> a Nokia </wiki/Nokia> lançou um interpretador
Python para os telefones celulares </wiki/Telefone_celular> S60
</w/index.php?title=S60&action=edit&redlink=1>, chamado PyS60
</w/index.php?title=PyS60&action=edit&redlink=1>. Essa versão inclui
vários módulos das implementações tradicionais, mas também alguns
módulos adicionais para a integração com o sistema operacional Symbian
</wiki/Symbian>. Uma implementação para Palm </wiki/Palm> pode ser
encontrada no Pippy </w/index.php?title=Pippy&action=edit&redlink=1>. Já
o PyPy </w/index.php?title=PyPy&action=edit&redlink=1>, é a linguagem
Python totalmente escrita em Python.
Diversas implementações, como CPython, pode funcionar como um
interpretador de comandos </wiki/Interpretador_de_comandos> em que o
usuário executa as instruções sequencialmente, recebendo o resultado
automaticamente. A execução compilada do código oferece um ganho
substancial em velocidade, com o custo da perda da interatividade
</wiki/Interatividade>.
Desenvolvimento[editar
</w/index.php?title=Python&veaction=edit&vesection=20>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=20>]
O desenvolvimento de Python é conduzido amplamente através do processo
Python Enhancement Proposal ("PEP"), em português Proposta de Melhoria
do Python. Os PEPs são documentos de projeto padronizados que fornecem
informações gerais relacionadas ao Python, incluindo propostas,
descrições, justificativas de projeto
</w/index.php?title=Justificativas_de_projeto&action=edit&redlink=1>
(design rationales) e explicações para características da linguagem.
PEPs pendentes são revisados e comentados por Van Rossum, o Benevolent
Dictator for Life </wiki/Benevolent_Dictator_for_Life> (líder arquiteto
da linguagem) do projeto Python. Desenvolvedores do CPython também se
comunicam através de uma lista de discussão, python-dev, que é o fórum
principal para discussão sobre o desenvolvimento da linguagem. Questões
específicas são discutidas no gerenciador de erros
</w/index.php?title=Sistema_de_gerenciamento_de_erros&action=edit&redlink=1>
Roundup
</w/index.php?title=Roundup_(gerenciador_de_erros)&action=edit&redlink=1> mantido
em python.org. O desenvolvimento acontece no auto-hospedado svn
</wiki/Subversion>.python.org
Licença[editar
</w/index.php?title=Python&veaction=edit&vesection=21>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=21>]
Python possui uma licença livre </wiki/C%C3%B3digo_livre> aprovada pela
OSI </wiki/Open_Source_Initiative> e compatível com a GPL
</wiki/GNU_General_Public_License>, porém menos restritiva. Ela prevê
(entre outras coisas) que binários da linguagem sejam distribuídos sem a
necessidade de fornecer o código fonte </wiki/C%C3%B3digo_fonte>
junto.^[31] <#cite_note-31>
Módulos e /frameworks/[editar
</w/index.php?title=Python&veaction=edit&vesection=22>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=22>]
Ao longo do tempo têm sido desenvolvidos pela comunidade de
programadores muitas bibliotecas de funções especializadas
</wiki/Biblioteca_de_rotinas> (módulos) que permitem expandir as
capacidades base da linguagem. Entre estes módulos especializados
destacam-se:
Descrição Campos de atuação
Django </wiki/Django_(framework_web)> /Framework/ para desenvolvimento
ágil de aplicações web </wiki/WWW>; desenvolvimento web
</wiki/Desenvolvimento_web>
Pylons </wiki/Pylons_(framework_web)> /Framework/ para desenvolvimento
de aplicações web </wiki/WWW>; desenvolvimento web
TurboGears </wiki/TurboGears_(framework_web)> /Framework/ baseado em
várias outras tecnologias existentes no mundo que gira em torno da
linguagem Python; desenvolvimento web
Matplotlib </w/index.php?title=Matplotlib&action=edit&redlink=1> -
Matplotlib / Pylab biblioteca para manipulação de gráficos 2D;
processamento de imagem </wiki/Processamento_de_imagem>
Python Imaging Library </wiki/Python_Imaging_Library> biblioteca para
manipulação de imagens digitais </wiki/Imagem_digital>; processamento
de imagem
PyOpenGL </w/index.php?title=PyOpenGL&action=edit&redlink=1> - Python
OpenGL Binding suporte multiplataforma </wiki/Multiplataforma> ao
OpenGL </wiki/OpenGL>; computação gráfica
</wiki/Computa%C3%A7%C3%A3o_gr%C3%A1fica>
Pygame </wiki/Pygame> Conjunto de módulos para o desenvolvimento de
jogos eletrônicos </wiki/Desenvolvimento_de_jogos_eletr%C3%B4nicos>,
incluindo gráficos SDL </wiki/SDL_(biblioteca)>; desenvolvimento de
jogos eletrônicos </wiki/Desenvolvimento_de_jogos_eletr%C3%B4nicos>;
computação gráfica
Twisted </wiki/Twisted> /Framework/ para o desenvolvimento de
aplicações de rede. Inclui módulos para servidor web
</wiki/Servidor_web>, de aplicação
</wiki/Servidor_de_aplica%C3%A7%C3%A3o>, SSH </wiki/SSH> e diversos
outros protocolos
</wiki/Protocolo_(ci%C3%AAncia_da_computa%C3%A7%C3%A3o)>;
desenvolvimento de software </wiki/Desenvolvimento_de_software>;
desenvolvimento web
PYRO </w/index.php?title=PYRO&action=edit&redlink=1> - /Python Remote
Objects/ /Framework/ para o desenvolvimento de sistemas distribuídos
</wiki/Computa%C3%A7%C3%A3o_distribu%C3%ADda>; computação distribuída
</wiki/Computa%C3%A7%C3%A3o_distribu%C3%ADda>
ZODB </wiki/ZODB> Sistema de persistência
</wiki/Persist%C3%AAncia_de_dados> e banco de dados orientado a objetos
</wiki/Banco_de_dados_orientado_a_objetos>; banco de dados
</wiki/Banco_de_dados>
Plone </wiki/Plone> SGC - Sistema de gerenciamento de conteúdo
</wiki/Sistema_de_gerenciamento_de_conte%C3%BAdo>; desenvolvimento web
CherryPy </wiki/CherryPy> /Framework/ para aplicações web;
desenvolvimento web
Web2py </w/index.php?title=Web2py&action=edit&redlink=1> /Framework/
para aplicações web; desenvolvimento web
Visual Python </w/index.php?title=Visual_Python&action=edit&redlink=1>
/Framework/ 3D de alto nível; computação gráfica
SQLObject </wiki/SQLObject> Mapeador objeto-relacional
</wiki/Mapeamento_objeto-relacional>: traduz estruturas relacionais para
objetos Python e manipula o banco de dados </wiki/Banco_de_dados> de
forma transparente; banco de dados
Numarray </w/index.php?title=Numarray&action=edit&redlink=1> Módulo
para manipulação de vetores e computação científica
</wiki/Computa%C3%A7%C3%A3o_cient%C3%ADfica>. computação científica
</wiki/Computa%C3%A7%C3%A3o_cient%C3%ADfica>
Interfaces gráficas[editar
</w/index.php?title=Python&veaction=edit&vesection=23>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=23>]
Exemplos de bibliotecas </wiki/Biblioteca_de_rotinas> de GUI </wiki/GUI>
disponíveis para Python incluem:
Descrição
Etk </w/index.php?title=Etk&action=edit&redlink=1> interface para a
biblioteca EFL </wiki/Enlightenment_Foundation_Libraries>
PyGTK </wiki/PyGTK> interface para a biblioteca GTK </wiki/GTK>
PyQT </wiki/PyQT> interface para a biblioteca QT </wiki/QT>
Tkinter </wiki/Tkinter> Módulo padrão para GUI no Python
wxPython </wiki/WxPython> interface para a biblioteca wxWidgets
</wiki/WxWidgets>
Wax </w/index.php?title=Wax_(inform%C3%A1tica)&action=edit&redlink=1>
Construído para simplificar o uso do wxPython
Ambientes de desenvolvimento integrado[editar
</w/index.php?title=Python&veaction=edit&vesection=24>| editar
código-fonte </w/index.php?title=Python&action=edit§ion=24>]
Existem vários ambientes de desenvolvimento integrado
</wiki/Ambiente_de_desenvolvimento_integrado> (IDE) disponíveis para Python:
Desenvolvedor Última versão Platforma
</wiki/Plataforma_(inform%C3%A1tica)> /Toolkit </wiki/Toolkit>/
Licença </wiki/Licen%C3%A7a_de_Software>
Boa Constructor
</w/index.php?title=Boa_Constructor&action=edit&redlink=1> Team
0.6.1 Independente wxPython </wiki/WxPython> GPL
</wiki/GNU_General_Public_License>
Eric Python IDE </wiki/Eric_Python_IDE> Detlev Offenbach 4.1.2
Independente Qt </wiki/Qt> GPL </wiki/GNU_General_Public_License>
Geany </wiki/Geany> Team 1.23 Independente GTK2 </wiki/GTK%2B> GPL
</wiki/GNU_General_Public_License>
IDLE </wiki/IDLE> Guido van Rossum </wiki/Guido_van_Rossum> et al. 3.0
/ 2008 Independente Tkinter </wiki/Tkinter> PSFL
</w/index.php?title=Python_Software_Foundation_License&action=edit&redlink=1>
IronPython Studio
</w/index.php?title=IronPython_Studio&action=edit&redlink=1> Clarius
Labs 1.0 / 10 de dezembro de 2007 Windows </wiki/Windows> VS2008
</wiki/Visual_Studio> Shell Runtime Microsoft Public License
Komodo </w/index.php?title=ActiveState_Komodo&action=edit&redlink=1>
ActiveState </w/index.php?title=ActiveState&action=edit&redlink=1>
4.1.1 / junho de 2007 multiplataforma </wiki/Multiplataforma>
Plataforma Mozilla </wiki/Mozilla> Propretário
</wiki/Software_propriet%C3%A1rio>
PyDev </w/index.php?title=PyDev&action=edit&redlink=1> (Eclipse
</wiki/Eclipse_(IDE)>) Fabio Zadrozny 1.3.13 multiplataforma
</wiki/Multiplataforma> SWT </wiki/Standard_Widget_Toolkit> EPL
</w/index.php?title=Eclipse_Public_License&action=edit&redlink=1>
PythonCard </wiki/PythonCard> Alex Tweedly 0.8.2 multiplataforma
</wiki/Multiplataforma> wxPython </wiki/WxPython> Licença BSD
</wiki/Licen%C3%A7a_BSD>
PyScripter </w/index.php?title=PyScripter&action=edit&redlink=1>
mmm-experts 1.7.2 / outubro de 2006 Windows </wiki/Windows> MIT
</wiki/Licen%C3%A7a_MIT>
Stani's Python Editor