Mis on valesti Perl

Originaali autor Lars Marius Garshol kohta http://www.garshol.priv.no/download/text/perl.html

Enne kui me alustame

Lihtsalt märkus, enne kui jätkab: see põhineb minu isiklik kogemus Perl. Ma tean, et teised inimesed on teised arvamused selles keeles ja nad on teretulnud neid. Ma lihtsalt tahan praegu minu, sest ma näen palju sõnumeid Usenet inimestelt, kes tunduvad olema õppida Perl ja ma hoida tahavad, et neile öelda, et võib-olla see ei ole hea mõte. Nii, ma kirjutasin selle artikli, et saada see mu rinnus üks kord ja kõik.

Kui te arvate, et midagi selles artiklis on objektiivselt vale, siis palun kirjuta mulle midagi. Ma tahaks see artikkel tuleb kui faktiliselt õige kui võimalik. Kui sa just ei ole nõus minuga saab öelda, et liiga.

Ma peaks ehk selgitama, miks ma arvan, et Perl “Camel”: Piibel kõik asjad Perl on Larry Walls “Programming Perl”, mis on avaldatud O’Reilly. O’Reilly tavaliselt paneb kena 19 sajandi graveerimine looma kaanel oma raamatuid. “Programming Perl” sai kaamel ja on tuntud kui “camel raamat” ajast. Larry Wall samuti viitab sageli Perl nagu kaamel.

Artikkel peaks olema kursis nii Python 1.5.2 ja Perl 5.005. Kui midagi on muutunud, sest need versioonid, julgelt ütle mulle midagi.

Saada teada Camel

Ma sain teada, Perl 5 varases ’97. Ma alla Patrick M. Ryans suurepärane sissejuhatus Perl ja leidis, et palju asju, mida ma teinud raske tee koos C, Pascal ja Java olid palju palju lihtsam Perl. Teksti töötlemise ja juurdepääsu süsteemi funktsioone, Perl nägi välja nagu tõeline Jumal saada. Tore, ma arvasin, ja ostis endale “Õppe Perl”, Randal Schwartz. (Tuntud ka kui “laama raamat”.)

Ma lugesin seda päris kiiresti ja imetakse üles kõiki neid suurepäraseid uusi funktsioone. Esimene programm tegin lugeda web serveri logi ja loendatakse, mitu korda iga lehekülg oli kasutatud. Ma kirjutasin selle poole tunni jooksul ja see töötas kohe! Mitte ainult ei ole see töö, vaid Perl ka tundus, et oleks võimalik unustada ebaolulised vead selle asemel, et krahh või aborting nagu C/Pascal/Java-programmid oleks.

(Selle programmi ilmus mitmeid versioone, ja oli üsna vähe kasutajad. Nii Perl ei ole mõttetu, lihtsalt ebamugav.)

Saada meeldi Camel

Mul oli tõesti nõiutud selles keeles ja alustada, kasutades seda rohkem ja rohkem. Aga, nagu ma hoida, kasutades seda hoidsin avastada uusi asju, mida ma ei meeldinud. Mõne aja pärast ta lisas, kuni päris suur nimekiri.

Loetamatu süntaks

Kuigi ma tunnistan, loetavust kannatab veidi…

–Larry Wall <2969@jato.Jpl.Nasa.Gov>

Üks esimesi asju, mida ma avastasin, mulle ei meeldinud oli süntaks. See on väga keeruline ja seal on palju ettevõtjaid ja eriline syntaxes. See tähendab, et sa saad lühike, kuid keeruline kood paljud süntaksi vigu, et võtta aega, et sortida välja.

See tähendab ka, et lugemine kellegi teise koodi on raske. Sa ei saa lihtsalt aru, keegi elses skriptid ja kohandada neid vastavalt oma vajadustele, samuti ei saa sa lihtsalt üle võtta hooldamiseks keegi elses programmi.

Ma kirjutan päris puhas Perli koodi, sest ma eemale enamik obfuscating funktsioone, kuid isegi nii, et see saab päris raske lugeda. See on üks tavaline näide:

foreach $Key (@SearchEngines) {
    if ($fields[11] =~ /$Key/i) {
	  $HitFrom[4]++;           #Yes, search engine
	  $SEReferrals{$SENames{$Key}}++;
	  $PageRefs{$fields[6]}{$SENames{$Key}}++;
	  $found=1;
	  last;
    }
}

See ei ole isegi eriti halb näide. Siin on funktsiooni Perl jaotus, mis toodab Soundex väärtust nimi või sõna:

sub soundex
{
  local (@s, $f, $fc, $_) = @_;

  push @s, '' unless @s;	# handle no args as a single empty string

  foreach (@s)
  {
    tr/a-z/A-Z/;
    tr/A-Z//cd;

    if ($_ eq '')
    {
      $_ = $soundex_nocode;
    }
    else
    {
      ($f) = /^(.)/;
      tr/AEHIOUWYBFPVCGJKQSXZDTLMNR/00000000111122222222334556/;
      ($fc) = /^(.)/;
      s/^$fc+//;
      tr///cs;
      tr/0//d;
      $_ = $f . $_ . '000';
      s/^(.{4}).*/$1/;
    }
  }

  wantarray ? @s : shift @s;
}

Kuid isegi see pole tõesti halb. Kui Perl Teataja on läbi Obfuscated Perl võistlus. Võitjad on siin . Tuleb hoiatada, kuigi. Need programmid annab sõna loetamatu täiesti uut ja varem ennenägematus tähendusi. (Ja ei, see ei ole argument, et Perl on loetamatu, kuid peamiselt lisada nii naljakas ja imelik punkt.)

Programmeerijad ja loetavus

Mõned inimesed loevad seda on kurtnud, et “Kuid igaüks võib kirjutada loetamatu-koodi mis tahes keeles!” ja see on kindlasti tõsi. Siiski, mõned keeled tundub, et julgustada hard-to-loe-kood, samas kui teised tundub, et pärssida seda.

Selle põhjal, mida olen näinud ning minu enda ja ka teiste inimeste kood Perl tõesti julgustab raske lugeda programmid. Kui Soundex näiteks eespool pärineb Perl jaotus ja leiti vaid juhuslikult vaadates läbi 2 või 3 failid. Otsides seda uuesti, nüüd näen ma paljusid teisi näiteid (näiteks lib/pod/text.pm ja lib/file/copy.pm), kuigi kõige skriptid on liiga lühike, et olla raske lugeda.

Mõned on väitnud, et Perl on rohkem nagu loomulik keel kui enamik programmeerimine keeles, ja see kindlasti tundub õige mulle. Ja mulle, et on kahju: loomulik keel on väga keerukas, ebaselge ja täis nüansse ja tähendus. Ma kindlasti ei taha oma programmid nii olema, kuid tundub, et mõned ei. Ma arvan, et lugeja on leida teda/ennast, millisesse kategooriasse ta kuulub.

Liiga palju eri konstrueerib

Paljud Perl funktsioonid on sisse ehitatud keele tuum ise, selle asemel, et panna eraldi raamatukogud. Üks näide on see, käitlemise regulaaravaldisi, mille jaoks on olemas spetsiaalne süntaks. See on eelis, et seal on mõned mugav, kuidas teha asju, mis on tehtud kõige sagedamini, kuid see tähendab ka, et sa ei saa eelised objektid.

Ühe näitena võib tuua, Perl on eriline ehitada nn vormid, mis on omamoodi malle, mida saate kasutada, et luua kena tekstiline aruanded. Üsna mugav, kuid ehitatud keelde. Nii, te ei saa luua loetelu, vormid, tagasi neid funktsioone ja nii edasi, mis on paljudel juhtudel olla tõsine ebamugavuste pärast.

Ma arvan, et sa ei või teha neid asju faili käepidemed, aga kuna nad on ka käsitleda, nagu erijuhtudel, ma ei ole kunagi olnud võimalik aru saada, kuidas. Üritasin kasutades viiteid, aga ei ole kunagi teinud seda tööd.

Raske ehitada andmestruktuurid

Selles Perl dokumentatsioon on eraldi juhend leht, kuidas luua massiivid jooksul massiivid ja hashes jooksul hashes. Ja see on tõesti vajalik. Mul oli palju valu, püüdes aru saada, kuidas seda teha, isegi pärast seda, lugedes seda mitu korda. See on midagi, mis tõesti raputas mind, sest teistes keeltes see on midagi, mida sa lihtsalt teha, ilma et mõelda seda.

Selles Lisp see määrab muutuja nimekiri:

(setq a '(1 2 3 4))

Siin me loome b nimekirjas, kus esimene element on teine nimekiri:

(setq b '((0.8 0.9 1) 2 3 4))

Siin on esimene nimekirja Perl:

@a=(1,2,3,4);

ja siin on teine:

@b=((0.8,0.9,1),2,3,4);

( Enne @s muutuja nimi ütleb, Perl, et need on massiivi muutujatega.) See ei olnud nii halb oli? Hästi, proovime seda kasutada.

Valida välja esimese osa esimene nimekirja Lisp, sa lihtsalt kirjutada

(first a)

ja Lisp annab teile

1

Selleks et saada esimene element teine listi kirjutamine

(first b)

ja Lisp annab teile

(0.8 0.9 1)

Proovime seda Perl.

$a[0]

annab meile

1

Enne $  muutuja nimi ütleb, Perl, et me tahame ühe väärtuse (skalaar aastal Perl žargoon), mitte massiiv. [0] ütleb Perl, et me tahame esimest väärtust massiivi. Perl, nagu paljud teised keeled ja rakendusliideseid API sid loeb alates 0.

Siis me ei

$b[0]

ja Perl õnnelikult annab meile

0.8

See on õige, Perl on jagatud nimekirja sees b nimekirja ja otsitakse esimene väärtus. Või pigem, see lapik b ühte loendit, kui me selle loonud, nii et see on nüüd tõesti üks järjestikuse loetelu 6 elemente.

Selleks õigus, me peaks olema kirjutatud

@b=([(0.8,0.9,1)],2,3,4);

kui me loodud loend. Sisestage []s viite sisemine nimekirja esimene element välimine loendi asemel lamedamad sisemine nimekirja arvesse välimine üks.

OK. Nii proovime uuesti:

$b[0]

annab meile

ARRAY(0xb75eb0)

Nii et ilmselt me suutnud leida massiivi, kuid midagi ikka valesti läheb mööda teed. Probleem on selles, et me kasutame $b, mis teeb Perl arvan, et me tahame skalaar ja nii see annab meile viide array asemel massiiv ise (mis ei ole ühemõõtmeline).

Aha! Muidugi! Me peame kasutama

@b[0]

sest @ ütleb Perli me soovime array väärtus. Ei ole nii. Me saame

ARRAY(0xb75eb0)

taas. Ma pole kunagi suutnud mõista, miks see on nii ja sel hetkel ma loobusin kogu asi.

Mõned nädalad hiljem nägin kasulik postitad no.perl: üks peaks taotluse viide array, nagu see

@{$b[0]}

mis tegelikult annab meile

(0.8 0.9 1)

Nii, nüüd ma võin kirjutada koodi massiivid sees massiivid ja hashes sees hashes.

Nüüd küsi endalt: kas sa tõesti arvad, et sa peaksid olema, et läbida kõik see selleks, et panna ühte nimekirja sees veel?

Määratledes liidesed

Teine suur puudus, et Perl on see, et funktsioon (või alamprogrammi, Perl žargoon) allkirjad, või pigem selle puudumine allkirjad. Enamikus programmeerimiskeeltes kui sa ei märgi funktsioon sa ka kinnitan oma allkirjaga, milles nimed parameetrid ja mõnes keeles ka nende tüübid. Perl ei tee seda.

Nii et mida Java on

public String substring(String str, int from, int to) {

muutub

sub substring {
  local($str, $from, $to) = @_;

selles Perl. Teisisõnu, sa pead käsitsi dekodeerida parameeter nimekirja. Perl on viimasel ajal laiendatud märksõnaga prototüübid mis tähendab, et saate kirjutada

sub substring($, $, $) {
  local($str, $from, $to) = @_;

ja on Perl kontrollige, et mitmed argumendid on õiged. Ei ole see vajalik, kuigi, ja seal on palju Perli koodi, et ei kasuta seda süntaksit.

Puudused, mis ei lõpe, küll. Paljud programmeerijad ei destructure parameeter massiivi nagu ülaltoodud näites, mis muudab koodi palju raskem lugeda lühidalt, ja see muudab ka võimalik automaatselt genereerida hea dokumentatsioon.

Ja, mis veelgi tähtsam, sa ei saa eeliseid rohkem arenenud keeltel on alates funktsioone, nagu märksõna argumendid (ilma uuesti rakendada neid ennast hash). Näiteks, kui soovite luua hash tabelis Common Lisp sa helistasid tee hash laud, funktsioon, mis võtab järgmine märksõna argumendid:

  • test (mis funktsiooni kasutada test klahvi võrdõiguslikkus),
  • suurus (a soovitus kirjete arv oodata),
  • kordamine-suurus (vihjeid ümbertöötlemine tabel),
  • kordamine-läve (kuidas täielik tabel saad enne rehashed)

See tähendab, et kõik järgmised invocations loob hash tabelid õigesti:

  (make-hash-table)
  (make-hash-table :test #'eq)
  (make-hash-table :size 1000)
  (make-hash-table :rehash-size 2.0 :rehash-threshold 0.7)

See tähendab ka, et teil on funktsioon, mis võtab suur hulk parameetreid (mark massiiv, võtab 7) ja ikka hoida nii loetavust ja kasutusmugavus. Sa saad teha sama Perl, aga sa ei ole kindlasti julgustada, dokumentatsioon ja vahendid ei mõista seda, lugejad võivad mitte kas, ja see kindlasti ei ole mugav võrreldes nii see on Common Lisp:

(defun make-hash-table(&key test size rehash-size rehash-threshold)

Ei ole tõesti objekt orienteeritud

Kuigi objekt-orienteeritus ei ole nii fantastiline, nagu paljud tahaksid meid mõtlema, Perl ei toeta seda. Kuid see on nii ainult pool südamest, sest objektid olid lisatud üsna hilja elus keel.

Tulemus on see, et normaalne faile, pistikupesad, hashes ja nimekirjad ei ole objektid, mis tähendab, et liideste neid ei ole nii mugav, nagu nad oleks võinud olla. Uuemad versioonid Perl tulla objekt-orienteeritud moodulite kiletajad selliseid objekte, mis tähendab, et Perl on protokolli selliste objektide puhul ja võite kirjutada oma rakenduste protokollid. Aga see tähendab ka, et teil on vaja eristada tavalist faili käepidemed ja faili objektid, mis on natuke ebamugav.

Teine asi on see, et kui luua objekte, mis teil on vaja selgesõnaliselt hallata siseosad oma objektid. Selles Perl, objekti loomise käsiraamat. Klass on deklareeritud paketi ja funktsioonide pakett siis muutuvad meetodid klassi. Luua objekti, sa tee hash tabel ja seejärel õnnistas seda (kasutades sisseehitatud funktsiooni ‘õnnistada’), et teha seda objekti. Man ‘perlobj’ lehekülg, mis selgitab Perl objekti omadused, soovitab see vorm objekti initializer:

package MyClass;
sub new {
    my $class = shift;
    my $self = {};
    bless $self, $class
    $self->initialize();  # do initialization here
    return $self;
}

On ka teisi viise objekti käivitamine, millest mõned tekitavad probleeme pärandist. Isiklikult, minu arvates on hämmastav, et selline asi peaks olema üldse vajalik. Eespool on samaväärsed käesoleva Python kood:

class MyClass:
    pass

Tulemus on see, et üks võib kergesti saada objekti ehitus valesti (näiteks ei toitlustamine pärilikkus), mis määratleb klassid on ebamugav ja seda on raske öelda, töö kood, kui a klass on määratletud (nii inim kui lugejad ja tarkvara, dokumentatsiooni, tööriistad).

Liidetakse see üles

Üldiselt, mida see tähendab, on see, et Perl on suur ja keerukas keel, mis võtab kaua aega, et õppida korralikult. Minu arvates, see keerukus on tarbetu ja lihtsam keel oleks olnud palju parem. Ma arvan, et see tähendab ka seda, et paljud mitte ekspert Perl arendajad saavad kirjutada optimaalne kood.

Teine asi on see, et ma arvan, et mõned Perl arendajad protsenti kirjutage üld ja korduvkasutatavad moodulid, sest teil on vaja keelt õppida hästi, enne kui seda teha, midagi, mida on suhteliselt raske ja võtab aega. Teine asi on see, et keel ise ei soovita seda.

Avastame Python

Programmeerimine keeles õpetavad, ei taha, mida nad ei saa. Sa pead mõtlema keeles kirjutada programme, ja see on raske, et tahad midagi, mida ei saa kirjeldada. Kui ma alustasin programmeerimine in BASIC ma ei jäta rekursioon, sest ma ei tea, seal oli selline asi. Ma arvasin, et BASIC. Ma võin ainult ette kujutada, korduv algoritme, nii et miks peaks ma igatsen rekursioon?

–Paul Graham, ANSI Common Lisp.

Nii, pärast avastanud, et kõik need halvad asjad, Perl, mida ma tegin? Ma hoidsin seda kasutada. Pärast kõik, nii halb, nagu see oli, see oli veel parem kui teed teksti töötlemiseks ja veebi programmeerimine C, Pascal või Java, ja seal ei olnud paremaid alternatiive.

Või nii ma arvasin. Ülikooli raamatupood, seal oli see raamat nimega “Internet Programmeerimine koos Python”. On nii keel friigi ja interneti friik, ma arvasin, et see oli huvitav ja valisin ta üles. Kusagil alguses raamat oli anekdoot umbes Python programmeerija, kes kirjutas kõik oma Python programmid nii, et kui tekkis viga (kui erand oli visatud) error handler kutsus oma piipar.

Wow, ma arvasin. See kõlab huvitavalt. Nii et läksin koju, leidsin Python juhendaja, prinditakse see välja ja hakkas mängima koos Python. Sel ööl ma kirjutasin POP3 klient raamatukogu Python. Lihtsalt meeldib see. Pärast läheb magama, mul oli idee: kas ei oleks palju kenam, kui ma vahemällu salvestatud sõnumite ja tehakse selle kasutajale nähtamatu? Hommikul ma lisada, et poole tunni jooksul.

Ma olen kuna kasutasin seda raamatukogu kustutada e-posti ilma allalaadimist, liigub 150 kirju ühe POP kontolt teisele ja palju muid asju. (Jah, ma tegin väikese SMTP raamatukogu ka.) Ma saan ka kasutada seda e-posti klient kasutab Python interpretaator kui käsureal.

Hoidsin kasutades Python rohkem ja rohkem pärast seda. Ma kirjutasin link checker, et läks üle minu veebilehti kontrollida neid vigu ja hoida lisades rohkem protokollid ja funktsioonid. Mõne aja pärast ma mõtlesin: see programm veedab palju aega oodanud serveri vastust. Võib olla ma saan kiirendada, kasutades multi threading nii, et see võib oodata mitu serverid samal ajal?

Ma ei ole kunagi tegelikult kasutada multithreading enne, kuid teadsin, et teooria taga. Ma lisada selle link-checker tunni jooksul ja mis sisaldab kaevamine raamatukogu dokumentatsiooni ja kõrvaldada mõned vead, ma tegin kehtestada. (Multithreading on palju keerulisem kui see kõlab alguses, sest asjad juhtuvad üheaegselt. See ei ole Python süü, kuigi.)

Võttes lugeda seda, et nüüd võite olla veendunud, et ma olen meister programmeerija, selle asemel, et Python on suurepärane programmeerimiskeel selline asi. Isiklikult ma ei usu, et see on tõsi. (Pidage meeles, ma olen mees, kes ei saa isegi teha Perl alamprogrammi tagasi faili hakkama.) Samuti, mida ma kuulen, paljud teised inimesed, kes on olnud sarnaseid kogemusi Python. Siin on üks näide:

Minu esimesed 15 minutit programmeerimine Python ma kirjutasin programmi, mis oleks alla kõik artiklid uudiserühmas sisse mh kausta minu jaoks – ja comp.lang.python oli minu esimene iseendale!

–Thomas Corbin, era e-posti autorile

Armuda Python

Standard raamatukogud

Ei see lõpe? See kindlasti ei ole. Sest siis ma olen avastanud, et need asjad Python teekide:

  • Toetust serializing objektid
  • Toetust ladustamiseks serialized objektid lihtne andmebaasid
  • Python parser
  • Toetus lihtne tekst, andmebaasid (Perl on seda liiga)
  • Raamatukogud on ZIP faili pakkimise ja lahtipakkimise
  • A profileerija (ja tõesti mõnus liiga!)
  • CGI raamatukogu
  • URL parser raamatukogu
  • Üldine URL ühendus raamatukogu
  • Lihtsustatud HTML, SGML ja XML jäsentimiä
  • Lihtne web server CGI tugi
  • POP, IMAP ja SMTP-raamatukogud (Python 1.5.1; ma hakkasin 1.4)

Ja need on asjad, mis tulevad koos standard Python jaotamise! Perl on ka kõige selle kraami, aga ta ei tulnud tõlk ja kvaliteedi dokumendid ja liidesed on erinevad.

Selles Python te mitte ainult saada neid asju, mida tarnitakse koos tõlk, täielik dokumentatsiooni, samuti on nad äärmiselt lihtne kasutada ja pakkuda täpselt seda sorti asju üks tavaliselt tahab. Öelda, et sa oled kirjalikult web robot ja robot on URL-praegune lehekülg string (cur_url) ja suhtelise URL siit järgmine leht mõne teise (next_url) ja te soovite arvutada absoluutne URL järgmine lehekülg. See on kood:

next_url=urlparse.urljoin(cur_url,next_url)

Python toetab ka GUI programmeerimine kaudu Tk kohta Win32, Mac ja Unix. See on tõesti lihtne paigaldada, aga mitte liiga hästi dokumenteeritud. Seal on ka palju muid viise, kuidas teha GUI programmeerimine koos Python. (Jah, seal on Perl ka.)

Kui SIG

Python võib muutuda nii suur, nagu Perl või Tcl. See on rohkem “armastusväärne” kui need, — kuigi võib-olla ka rohkem vastuoluline. See on väga toetav kasutajate kogukond, ja mis on see, mis teeb on suur.

–Guido van Rossum, looja Python

Kui nad soovivad luua ka uusi teeke või “standardid”, Pythoners vormi Erilist Huvi Rühma vabatahtlikud, kes saab liituda igaüks. Mõned tulemused on seni olnud levinud API andmebaasi moodulid (mis tähendab, et saate kasutada Sybase moodul ja seejärel vahetatakse see koos Oracle üks ja muuta ainult 2 rida koodi), on IDL-Python kaardistamise jaoks CORBA, ühise teksti formaadis dokumente, stringid ja ühiste vahendite ja API for XML parsing on väljatöötamisel.

Python software

Kuid, kui see keel on tõesti nii suur, ei tohiks inimesed on kirjutanud päris vahva tarkvara see on? Noh, nad on. Siin on mõned näited:

  • kwParsing, parser generator
  • Gadfly, relatsioonilise andmebaasi (jah, puhas Python!)
  • Grail, veebibrauser
  • Fnorb, CORBA ORB
  • Paos, lihtne objektorienteeritud andmebaas
  • Bobo, süsteem, mis avaldab Python objektide kaudu web server
  • Medusa, suure jõudlusega, laiendatav Internet server raames. (Web server, FTP server ja chat server ehitatud samal kernel.)

Isiklikult, minu praegune projekt Python on täielikult kinnitamisel XML-parser .

On see tõesti parem kui Perl?

Olen lisanud käesoleva paragrahvi juhul, kui te soovite teada, kuidas Python käepidemed asju kurtnud, umbes Perl.

Loetavus

Python on kõige loetav keel, ma olen kunagi programmeeritud. Mul kulus pool tundi, et aru saada, Medusa (kuigi see on päris imelik mõiste) ja veel pool tundi, et seda muuta nii, et ma saaks kaart URL teed web server Python funktsioone. Tund pärast, et ma võiks lugeda minu Gnus postile läbi veebi server. Teine tund, ja ma ei loe uudis läbi.

Siin on minu enda rakendamise soundex funktsioon, kirjutatud Novembri 97, kui ma olin veel uus selles:

# no_tbl is an array I've constructed that maps characters to numbers
# is_letter is written by me, but I've since discovered that Python
# has it

def soundex(string):
    """Returns the Soundex code of the string. Characters not A-Z skipped."""
    string=lower(string)   

    if not is_letter(string[0]): string=string[1:]
    last=no_tbl[ord(string[0])-97]
    res =upper(string[0]) # This is where the result will end up

    for char in string[1:]:
	if is_letter(char):
	    new=no_tbl[ord(char)-97]
	    if (new!="0" and new!=last):
		res=res+new
	    last=new

    if len(res)<4:
	return res+"0"*(4-len(res))
    else:
	return res[:4]

Dokumendid

Seal on Python programm, mis genereerib javadoc-nagu dokumendid või dokumendid, jõhvi Python programmid. Seda saab toota väljund on HTML, rtf ja FrameMaker vormingus.

Nagu standard raamatukogu dokumentatsiooni näete ise.

Väljalülitamine väljundi puhverdamine ei ole blindingly ilmne, kuid mitte liiga raske, kas. Sa päris kiiresti selgeks, et sys.stdout, sys.stdin ja sys.stderr on faili objektid, mis moodustavad standardi välja, standard ja standard viga. Nii, kuna stdout on tavaline fail objekt, see peaks käituma nii, nagu üks seoses väljundi puhverdamine samuti. Ja nii see on. Need objektid on mingeid meetodeid, et välja lülitada, puhverdamine, kuid sa saad masti andmed koos masti meetod:

sys.stdout.flush()

Kui te leiate, et ebamugav on command-line lüliti tõlk, mis võimaldab teil lülitada puhverdamine. Siiski, teil on joosta tõlk ” python -?’, et leida see läbi, nii et ma ei saa tõesti väita, et see on liiga hästi dokumenteeritud.

Ehitatud pluginate

Python on väga vähe sisseehitatud funktsioone võrreldes Perl. Regulaaravaldisi tulevad eraldi moodul ja on rakendatud objektidele. Siin on nimekiri koostatud regulaaravaldisi:

reg_list=[re.compile("foo"),re.compile("[Bb][Aa][Rr]"),re.compile("ba[z]")]

Failid on ka objekte, mis on Python moodulid ja enamik muid asju. See tähendab, et saate läbida neid parameetreid, mis asjad need nimekirjad, alamklass neid ja isegi luua klassid koos samu meetodeid ja kasutada neid kui kood loodab, et faili eseme või moodul.

Andmestruktuuride

See on kaks nimekirja näited, Python, (=> näitab, millised on tulemused):

a=[1,2,3,4]
a[0]                  => 1
b=[[0.8,0.9,1],2,3,4]
b[0]                  => [0.8,0.9,1]

Python on ka hash tabelid, eraldatult (fikseeritud pikkusega nimekirjad) ja täielik objekt-orienteeritus.

Jumalagajätt kaader

Mida teised inimesed arvavad

Võib-olla soovite kuulda, mida teised inimesed arvavad samuti, nii et siin on mõned lingid teiste arvamusi Perl ja Python:

  • Põhjus miks ma armastan Python, mõned Python propaganda Paul Prescod.
  • Keith Waclena kirjutab tema kohta otsida hea programmeerimise keelte Minu Programmeerimiskeel Kriis,
  • Lugu Viis Keelt räägib James Logajan on hindamise viis scripting keeled, sisseehitatud projekti,
  • Eric S. Raymond selgitab, miks tema eelistab Python a Miks Python?,
  • Sam Holden on kirjutanud kommenteeritud versioon käesoleva artikli kommentaare asju, mida ta ei nõustu. (Märkus: olen muutnud, et artikkel, sest Sam kirjutas oma versiooni.)

Viimane hoiatus

Camel on kuulekas, kui õigesti koolitatud ja käideldud aga, eriti rutting hooaeg, on kohustatud sobib raev. Nad sülitasid, kui pahane ja võib hammustada ja lüüa ohtlikult.

–Encyclopedia Britannica.

Kui pärast kõike seda, mis sa ikka tahad kasutada Perl, siis be my guest ja õigust minna. Ma ei hakka teid peatada. Teid on hoiatatud, kuigi.

Samas, sa võib ehk olla uudishimulik, mida Encyclopedia Britannica on öelda, Python? Siin see on:

…Monty Python Lendava Tsirkuse trupp, mis seatud standard 1970. aastatel oma pentsik paroodiad ja hull huumori televisiooni ja hiljem filmides.

–Encyclopedia Britannica

See on õige. Python oli nime saanud komöödia trupp, mitte pärast vastik roomaja. See on põhjus, miks seal on nii palju imelikke nimesid ja näited Python õpetused ja allika kood. 🙂

Lisad

Tänuavaldus

Tänud:

  • Trond Eivind Glomsrød osutades kirjaviga (ja mitte põlevad mulle kirjalikult käesoleva artikli).
  • Kjell Arne Rekaa osutades hard-to-spot kirjaviga ja olles peaaegu veendunud.
  • Robin Friedrich osutades kahe kirjavigu ja sidumiseks käesoleva artikli Python kohas.
  • Greg Phillips osutades hard-to-spot Lisp kirjaviga.
  • Steinar Knutsen jaoks ütleb mulle, et Python interpretaator on käsurea variant väljalülitamine puhverdamine.
  • James Lee osutades kirjaviga minu proovi Perl koodi.
  • Thomas Corbin osutades veel kirjaviga ja tahtmatult andes mulle kena hinnapakkumise.
  • Ronald J. Kimball mõned läbimõeldud kriitika.
  • Andrew Ho jaoks väga avatud mõtlemisega ja kasulik kriitika, ning anda Python proovida.
  • Georg Bisseling, osutades mitu katkised lingid.

 

 

Tagasi esilehele