Python paslėptos funkcijos

ответ 191 atsakymas

Grandinės palyginimo operatoriai:

 >>> x = 5 >>> 1 < x < 10 True >>> 10 < x < 20 False >>> x < 10 < x*10 < 100 True >>> 10 > x <= 9 True >>> 5 == x > 4 True 

Jei manote, kad jis atlieka 1 < x , kuris pasirodo kaip „ True , ir tada lygina „ True < 10 , kuri taip pat yra „ True , tada ne, tai tikrai ne taip, kas atsitinka (žr. Paskutinį pavyzdį) 1 < x and x < 10 ir x < 10 and 10 < x * 10 and x*10 < 100 , bet su mažiau įvesties ir kiekvienas terminas vertinamas tik vieną kartą.

741
19 сент. Atsakyti Thomas Wouters 19 rugsėjis 2008-09-19 16:47 '08 at 4:47 pm 2008-09-19 16:47

Suraskite python regex parsų medį, kad ištaisytumėte įprastą išraišką.

Reguliarios išraiškos yra puiki python funkcija, bet jų derinimas gali būti nesveikas, o pernelyg lengva gauti neteisingą išraišką.

Laimei, „python“ gali atspausdinti „regex“ re.DEBUG medį, perduodamas dokumentais re.DEBUG bandomąją paslėptą vėliavėlę „ re.DEBUG (iš tikrųjų 128), kad jis būtų re.compile .

 >>> re.compile("^\[font(?:=(?P<size>[-+][0-9]{1,2}))?\](.*?)[/font]", re.DEBUG) at at_beginning literal 91 literal 102 literal 111 literal 110 literal 116 max_repeat 0 1 subpattern None literal 61 subpattern 1 in literal 45 literal 43 max_repeat 1 2 in range (48, 57) literal 93 subpattern 2 min_repeat 0 65535 any None in literal 47 literal 102 literal 111 literal 110 literal 116 

Suprasdami sintaksę, galite aptikti savo klaidas. Čia mes matome, kad pamiršo išvengti [] [/font] .

Žinoma, galite sujungti jį su bet kuriomis norimomis vėliavomis, pvz., Reguliariai išreiškiant pastabas:

 >>> re.compile(""" ^ # start of a line \[font # the font tag (?:=(?P<size> # optional [font=+size] [-+][0-9]{1,2} # size specification ))? \] # end of tag (.*?) # text between the tags \[/font\] # end of the tag """, re.DEBUG|re.VERBOSE|re.DOTALL) 
512
27 сент. Atsakymas suteikiamas „ BatchyX 27“ sep . 2008-09-27 16:18 '08 at 16:18 2008-09-27 16:18

perdavimas

Apvyniokite pakartotinį skaičiavimą, ir jis duos elementą kartu su indeksu.

Pavyzdžiui:

 >>> a = ['a', 'b', 'c', 'd', 'e'] >>> for index, item in enumerate(a): print index, item ... 0 a 1 b 2 c 3 d 4 e >>> 

Literatūra:

460
22 сент. Atsakymas duotas Dave 22 Sep. 2008-09-22 22:51 '08, 10:51 val. 2008-09-22 22:51

Generatoriaus objektų kūrimas

Jei rašote

 x=(n for n in foo if bar(n)) 

Galite išeiti iš generatoriaus ir priskirti jį x. Dabar tai reiškia, kad galite tai padaryti

 for n in x: 

To privalumas yra tas, kad jums nereikia tarpinio saugojimo, kurio jums reikia, jei tai padarėte

 x = [n for n in foo if bar(n)] 

Kai kuriais atvejais tai gali sukelti didelį pagreitį.

Į generatoriaus galą galite pridėti kelis, jei teiginiai yra iš esmės, pakartojant įdėtus kilpas:

 >>> n = ((a,b) for a in range(0,2) for b in range(4,6)) >>> for i in n: ... print i (0, 4) (0, 5) (1, 4) (1, 5) 
419
19 сент. Atsakymas suteikiamas 19 erdvės sep . 2008-09-19 14:59 '08 14:59 val. 2008-09-19 14:59

iter () gali pareikšti argumentą

Pavyzdžiui:

 def seek_next_line(f): for c in iter(lambda: f.read(1),'\n'): pass 

iter(callable, until_value) funkcija iter(callable, until_value) Skambina callable ir grąžina rezultatą, kol grąžinama vertė.

353
19 сент. atsakymas pateikiamas mbac32768 19 sep . 2008-09-19 17:20 '08, 17:20, 2008-09-19 17:20

Būkite atsargūs su numatytais kintamaisiais argumentais.

 >>> def foo(x=[]): ... x.append(1) ... print x ... >>> foo() [1] >>> foo() [1, 1] >>> foo() [1, 1, 1] 

Vietoj to, turėtumėte naudoti „nenurodyta“ kontrolinio taško vertę ir pakeisti jį nepastoviu numatytuoju:

 >>> def foo(x=None): ... if x is None: ... x = [] ... x.append(1) ... print x >>> foo() [1] >>> foo() [1] 
339
22 сент. Atsakymas Jason Baker 22 rugsėjis 2008-09-22 07:34 '08, 07:34, 2008-09-22 07:34

Vertybių siuntimas į generatoriaus funkcijas . Pavyzdžiui, turint šią funkciją:

 def mygen(): """Yield 5 until something else is passed back via send()""" a = 5 while True: f = (yield a) #yield a and possibly get f in return if f is not None: a = f #store the new value 

Galite:

 >>> g = mygen() >>> g.next() 5 >>> g.next() 5 >>> g.send(7) #we send this back to the generator 7 >>> g.next() #now it will yield 7 until we send something else 7 
317
19 сент. Atsakymą pateikė Rafał Dowgird Sep 19 2008-09-19 16:18 '08 at 4:18 pm 2008-09-19 16:18

Jei nenorite naudoti tarpų nurodydami sritis, galite naudoti „C“ stilių {} išleidžiant:

 from __future__ import braces 
314
22 сент. Atsakymą duoda eduffy 22 sep . 2008-09-22 01:01 '08 ne 1:01 2008-09-22 01:01

Argumentų žingsnis išjungimo operatoriuose. Pavyzdžiui:

 a = [1,2,3,4,5] >>> a[::2] # iterate over the whole list in 2-increments [1,3,5] 

Specialus x[::-1] atvejis yra naudingas „x inversijos“ idiomas.

 >>> a[::-1] [5,4,3,2,1] 
305
19 сент. Atsakymą pateikė Rafał Dowgird Sep 19 2008-09-19 16:33 '08 at 4:33 pm 2008-09-19 16:33

Dekoratoriai

Dekoratoriai leidžia įvesti funkciją ar metodą į kitą funkciją, kuri gali pridėti funkcionalumą, pakeisti argumentus ar rezultatus ir pan. Jūs rašote vieną eilutės dekoratorių virš funkcijos apibrėžties, pradedant ženklu „at“ (@).

Pavyzdys rodo print_args dekoderį, kuris prieš skambindamas spausdina dekoruotus funkcijų argumentus:

 >>> def print_args(function): >>> def wrapper(*args, **kwargs): >>> print 'Arguments:', args, kwargs >>> return function(*args, **kwargs) >>> return wrapper >>> @print_args >>> def write(text): >>> print text >>> write('foo') Arguments: ('foo',) {} foo 
290
19 сент. Atsakymas pateikiamas DzinX rugsėjo 19 d 2008-09-19 15:32 '08 at 15:32 2008-09-19 15:32

Sintaksė ... kitai (žr. Http://docs.python.org/ref/for.html )

 for i in foo: if i == 0: break else: print("i was never 0") 

„Kitas“ blokas paprastai bus įvykdytas „už“ kilpos pabaigoje, nebent „break“ yra vadinamas.

Minėtas kodas gali būti imituojamas taip:

 found = False for i in foo: if i == 0: found = True break if not found: print("i was never 0") 
288
22 сент. atsakymas pateikiamas rlerallut rugsėjo 22 d 2008-09-22 14:55 '08 at 14:55 pm 2008-09-22 14:55

Nuo 2,5, dicts turi specialų __missing__ metodą, kuris vadinamas trūkstamais elementais:

 >>> class MyDict(dict): ... def __missing__(self, key): ... self[key] = rv = [] ... return rv ... >>> m = MyDict() >>> m["foo"].append(1) >>> m["foo"].append(2) >>> dict(m) {'foo': [1, 2]} 

collections taip pat yra subklasė, priskiriama defaultdict poklasiui, kuris atlieka beveik tą patį dalyką, tačiau skambina funkcijai, neturinčiai argumentų ne esamiems elementams:

 >>> from collections import defaultdict >>> m = defaultdict(list) >>> m["foo"].append(1) >>> m["foo"].append(2) >>> dict(m) {'foo': [1, 2]} 

Prieš perduodant jas tokioms funkcijoms, kurios nesitiki tokiems poklasiams, rekomenduoju konvertuoti tokius punktus į reguliarius. Daug kodo naudoja d[a_key] ir gaudo KeyErrors, kad patikrintų, ar yra elementas, kuris prideda naują elementą.

258
22 сент. atsakymą pateikė Armin Ronacher 22 sep . 2008-09-22 00:54 '08 at 0:54 2008-09-22 00:54

Pakeiskite vietas vietoje

 >>> a = 10 >>> b = 5 >>> a, b (10, 5) >>> a, b = b, a >>> a, b (5, 10) 

Dešinė užduoties pusė yra išraiška, kuria sukuriama nauja eilutė. Kairė užduoties dalis nedelsdama atleidžia šią (nesusietą) eilutę į vardus a ir b .

Po priskyrimo naujoji eilutė nerodoma ir žymima šiukšlių surinkimui, o su a ir b susijusios vertės pakeistos.

Kaip pažymėta skyriuje „ Python“ apie duomenų struktūras ,

Atkreipkite dėmesį, kad daugkartinis priskyrimas iš tikrųjų yra paketo paketo ir sekos dekompresijos derinys.

247
19 сент. atsakymą pateikė Lucas S. 19 sep. 2008-09-19 17:00 '08 17:00 val. 2008-09-19 17:00

Skaityti reguliarias išraiškas

„Python“ sistemoje galite reguliariai išrinkti kelias eilutes, pavadinti savo rungtynes ​​ir įterpti komentarus.

Išsamios sintaksės pavyzdys (nuo panardinimo į Python ):

 >>> pattern = """ ... ^ # beginning of string ... M{0,4} # thousands - 0 to 4 M's ... (CM|CD|D?C{0,3}) # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's), ... # or 500-800 (D, followed by 0 to 3 C's) ... (XC|XL|L?X{0,3}) # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's), ... # or 50-80 (L, followed by 0 to 3 X's) ... (IX|IV|V?I{0,3}) # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's), ... # or 5-8 (V, followed by 0 to 3 I's) ... $ # end of string ... """ >>> re.search(pattern, 'M', re.VERBOSE) 

Vardų atitikimo pavyzdžiai (iš HOWTO reguliarios išraiškos )

 >>> p = re.compile(r'(?P<word>\b\w+\b)') >>> m = p.search( '(((( Lots of punctuation )))' ) >>> m.group('word') 'Lots' 

Taip pat galite pakartotinai parašyti reguliarią išraišką nenaudodami re.VERBOSE dėl styginių literatūros susiejimo.

 >>> pattern = ( ... "^" # beginning of string ... "M{0,4}" # thousands - 0 to 4 M's ... "(CM|CD|D?C{0,3})" # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's), ... # or 500-800 (D, followed by 0 to 3 C's) ... "(XC|XL|L?X{0,3})" # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's), ... # or 50-80 (L, followed by 0 to 3 X's) ... "(IX|IV|V?I{0,3})" # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's), ... # or 5-8 (V, followed by 0 to 3 I's) ... "$" # end of string ... ) >>> print pattern "^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$" 
235
19 сент. atsakymas pateikiamas MvdD 19 sep . 2008-09-19 15:44 '08 at 15:44 2008-09-19 15:44

Išskleisti funkcijų argumentus

Sąrašą ar žodyną galite išpakuoti kaip funkcijų argumentus naudodami * ir ** .

Pavyzdžiui:

 def draw_point(x, y): # do some magic point_foo = (3, 4) point_bar = {'y': 3, 'x': 2} draw_point(*point_foo) draw_point(**point_bar) 

Labai naudinga etiketė, nes sąrašai, paketai ir diktatai yra plačiai naudojami kaip konteineriai.

222
21 сент. Atsakymą pateikė e-satis 21 sep. 2008-09-21 18:00 '08 18:00 val. 2008-09-21 18:00

ROT13 yra tinkamas kodo kodavimas, kai kodo failo viršuje naudojate teisingą kodavimo deklaraciją:

 #!/usr/bin/env python # -*- coding: rot13 -*- cevag "Uryyb fgnpxbiresybj!".rapbqr("rot13") 
205
21 июня '09 в 23:32 2009-06-21 23:32 atsakymas pateikiamas André birželio 21 d., 09:32, 23:32

Naujų tipų kūrimas visiškai dinaminiu režimu

 >>> NewType = type("NewType", (object,), {"x": "hello"}) >>> n = NewType() >>> nx "hello" 

kuri yra lygiai tokia pati kaip

 >>> class NewType(object): >>> x = "hello" >>> n = NewType() >>> nx "hello" 

Galbūt tai nėra naudingiausias dalykas, bet malonu žinoti.

Keisti . Naujo tipo pavadinimas buvo NewType , jis turi būti „ NewType - tas pats kaip ir class operatoriui.

Keisti . Pataisytas pavadinimas, skirtas tiksliau apibūdinti šią funkciją.

183
20 сент. Torsten Mareko atsakymas apie 20 sep. 2008-09-20 17:25 '08 at 17:25 pm 2008-09-20 17:25

Kontekstų valdytojai ir operatorius <<20>

Pateiktas PEP 343 konteksto valdytojas yra objektas, kuris veikia kaip ataskaitų rinkinio vykdymo kontekstas.

Kadangi ši funkcija naudoja naujus raktinius žodžius, ji pateikiama palaipsniui: ji yra prieinama „Python 2.5“ naudojant __future__ direktyvą. „Python 2.6“ ir naujesnės versijos (įskaitant „Python 3“) yra numatytos.

„Su“ pareiškimą naudoju daug, nes manau, kad tai labai naudingas statinys, čia yra nedidelė demonstracija:

 from __future__ import with_statement with open('foo.txt', 'w') as f: f.write('hello!') 

Tai, kas atsitinka užkulisiuose, yra tai, kad "su" pareiškimas iškviečia specialius metodus __enter__ ir __exit__ į failo objektą. Išimties informacija taip pat perduodama __exit__ jei iš pareiškimo kūno buvo __exit__ išimtis, leidžianti jai tvarkyti išimtis.

Tai, ką tai reiškia jums šiuo konkrečiu atveju, yra tai, kad ji garantuoja, kad failas bus uždarytas, kai vykdymas palieka rinkinį, nepriklausomai nuo to, ar tai yra normalu, ar išimtis. Iš esmės tai yra bendrasis išimties tvarkymo kodas.

Kiti dažniausiai naudojami atvejai yra sriegių blokavimas ir duomenų bazių operacijų blokavimas.

179
20 сент. atsakymas pateikiamas „ Ycros 20“ sep . 2008-09-20 23:06 '08 at 23:06 pm 2008-09-20 23:06

Žodynai turi metodą „gauti“.

Žodynai turi metodą „gauti“. Jei d ['key'] ir raktas trūksta, galite gauti išimtį. Jei vykdysite d.get („raktas“), grįšite į Nieko, jei „raktas“ neegzistuoja. Galite pridėti antrą argumentą, kad grąžintumėte šį elementą vietoj Nėra, pvz .: d.get („raktas“, 0).

Tai puikiai tinka tokiems dalykams kaip skaičių pridėjimas:

sum[value] = sum.get(value, 0) + 1

168
21 сент. Atsakymas pateikiamas Rory rugsėjo 21 d. 2008-09-21 23:18 '08 at 11:18 pm 2008-09-21 23:18

rankenos

Jie yra daugelio pagrindinių Python funkcijų magija.

Kai naudosite taškų prieigą, kad rastumėte narį (pvz., Xy), Python pirmiausia ieško nario iš egzemplioriaus žodyno. Jei jis nerastas, jis jį ieško klasės žodynuose. Jei jis jį suranda klasės žodynuose, o objektas įgyvendina deskriptoriaus protokolą, vietoj tiesioginio grąžinimo Python jį vykdo. Aprašymas yra bet kuri klasė, įgyvendinanti __get__ , __set__ arba __delete__ .

Čia galite įgyvendinti savo (tik skaitomą) turinio versiją, naudodami deskriptorius:

 class Property(object): def __init__(self, fget): self.fget = fget def __get__(self, obj, type): if obj is None: return self return self.fget(obj) 

ir jūs jį naudosite kaip ir integruotą turtą ():

 class MyClass(object): @Property def foo(self): return "Foo!" 

„Python“ rankenos naudojamos, be kita ko, įgyvendinti su savybėmis susijusius metodus, statinius metodus, klasės metodus ir laiko tarpsnius. Jų supratimas leidžia lengvai suprasti, kodėl daugelis dalykų, kurie buvo panašūs į Python „fad“, yra tokie, kokie jie yra.

Raymond Hettinger yra puikus vadovėlis, kuris juos apibūdina daug geriau nei aš.

152
19 сент. Atsakymą davė Nickas Johnsonas apie 19 sep. 2008-09-19 17:04 '08, 17:04 val. 2008-09-19 17:04

Sąlyginis priskyrimas

 x = 3 if (y == 1) else 2 

Jis daro tai, ką jis skamba: "priskirti 3 x, jei y yra 1, kitaip priskirkite 2 x". Atkreipkite dėmesį, kad parenoms nereikia, bet man tai patinka skaityti. Taip pat galite susieti, jei turite kažką sudėtingesnio:

 x = 3 if (y == 1) else 2 if (y == -1) else 1 

Nors tam tikru momentu jis eina per toli.

Atkreipkite dėmesį, kad jūs galite naudoti, jei ... dar yra bet kokia išraiška. Pavyzdžiui:

 (func1 if y == 1 else func2)(arg1, arg2) 

Čia funkcion1 bus vadinamas, jei y yra 1 ir func2, kitaip. Abiem atvejais atitinkama funkcija bus vadinama argumentais arg1 ir arg2.

Panašiai taip pat yra:

 x = (class1 if y == 1 else class2)(arg1, arg2) 

kur 1 ir 2 klasės yra dvi klasės.

142
22 сент. atsakymas pateikiamas tghw Sep 22 2008-09-22 21:08 '08 at 9:08 pm 2008-09-22 21:08

Doctest : dokumentacija ir vieneto testavimas tuo pačiu metu.

Pavyzdys ištrauktas iš „Python“ dokumentacijos:

 def factorial(n): """Return the factorial of n, an exact integer >= 0. If the result is small enough to fit in an int, return an int. Else return a long. >>> [factorial(n) for n in range(6)] [1, 1, 2, 6, 24, 120] >>> factorial(-1) Traceback (most recent call last): ... ValueError: n must be >= 0 Factorials of floats are OK, but the float must be an exact integer: """ import math if not n >= 0: raise ValueError("n must be >= 0") if math.floor(n) != n: raise ValueError("n must be exact integer") if n+1 == n: # catch a value like 1e300 raise OverflowError("n too large") result = 1 factor = 2 while factor <= n: result *= factor factor += 1 return result def _test(): import doctest doctest.testmod() if __name__ == "__main__": _test() 
141
19 сент. atsakymas į Pierre-Jean Coudert rugsėjo 19 d 2008-09-19 17:04 '08, 17:04 val. 2008-09-19 17:04

Pavadintas formatavimas

% -formatting priima žodyną (taip pat taikomas% i /% s patvirtinimas ir tt).

 >>> print "The %(foo)s is %(bar)i." % {'foo': 'answer', 'bar':42} The answer is 42. >>> foo, bar = 'question', 123 >>> print "The %(foo)s is %(bar)i." % locals() The question is 123. 

Ir kadangi vietiniai gyventojai () taip pat yra žodynas, galite tiesiog perduoti ją kaip diktuoklę ir turėti% prenumeratų iš vietinių kintamųjų. Manau, kad tai nepritaria, bet supaprastina dalykus.

Naujo stiliaus formatavimas

 >>> print("The {foo} is {bar}".format(foo='answer', bar=42)) 
138
22 сент. atsakymą pateikė Pasi Savolainen 22 sep. 2008-09-22 07:23 '08, 07:23, 2008-09-22 07:23

Jei norite pridėti daugiau „python“ modulių (ypač trečiųjų šalių), dauguma žmonių naudoja „PYTHONPATH“ aplinkos kintamuosius arba prideda simbolines nuorodas ar katalogus į savo svetainių paketų katalogus. Kitas būdas yra naudoti * .pth failus. Čia yra oficialus „Python“ dokumento aprašymas:

„Patogiausias būdas [pakeisti python paieškos kelią] yra pridėti kelią į konfigūracijos failą į katalogą, kuris jau yra„ Python “kelyje, dažniausiai į ... / svetainės paketus / katalogą. Kelio konfigūracijos failų plėtinys yra .pth ir kiekvienoje eilutėje turi būti vienas kelias (sys.path pridedami nauji keliai, papildomų katalogų moduliai nepaisys standartinių modulių. Tai reiškia, kad negalite naudoti šio mechanizmo, norėdami įdiegti fiksuotą standartinių modulių versiją.)

132
22 сент. atsakymas yra dgrant Sep 22 2008-09-22 11:43 '08 at 11:43 2008-09-22 11:43

Išimtis:

 try: put_4000000000_volts_through_it(parrot) except Voom: print "'E pining!" else: print "This parrot is no more!" finally: end_sketch() 

Naudojant kitokią sąlygą, geriau nei pridėti papildomą kodą bandymo sąlygai, nes vengiama atsitiktinės išimties aptikimo, nesusijusios su bandymu, išskyrus apsaugotą kodą.

Žr. Http://docs.python.org/tut/node10.html

122
22 сент. atsakymas duotas Constantin rugsėjo 22 d 2008-09-22 13:31 '08 13:31 pm 2008-09-22 13:31

Išimtys iš naujo sukurti :

 # Python 2 syntax try: some_operation() except SomeError, e: if is_fatal(e): raise handle_nonfatal(e) # Python 3 syntax try: some_operation() except SomeError as e: if is_fatal(e): raise handle_nonfatal(e) 

„Pakelti“ pareiškimas, kuriame nėra klaidų tvarkytojo argumentų, nurodo „Python“ iš naujo sukurti išimtį su originaliu pėdsaku, leidžiant jums pasakyti „oh, atsiprašau, aš nenorėjau jį sugauti, atsiprašau, atsiprašau“.

Jei norite spausdinti, išsaugoti ar žaisti su originaliu pėdsaku, galite jį gauti naudodami sys.exc_info () ir išspausdinti, kaip Python padarė su „traceback“ moduliu.

114
19 сент. Atsakyti Thomas Wouters 19 rugsėjis 2008-09-19 16:56 '08 at 16:56 2008-09-19 16:56

Pagrindiniai pranešimai :)

 import this # btw look at this module source :) 

Atšifruota :

Zen Python, Tim Peters

Gražus yra geriau nei bjaurus.
Aiškus yra geriau nei numanomas.
Paprasta yra geriau nei sudėtinga.
Kompleksas yra geresnis nei sudėtingas.
Butas yra geriau nei įdėtas.
Reti yra geriau nei tankus. Skaitymo metrika.
Specialūs atvejai nėra pakankamai sudėtingi, kad būtų pažeistos taisyklės.
Nors praktiškumas viršija grynumą.
Klaidos niekada neturėtų tylėti.
Jei nėra aiškiai išjungta.
Nesuprantant susidurti su pagunda atspėti. Turi būti vienas, o galbūt tik vienas, paprastas būdas tai padaryti.
Nors šis kelias gali būti neaiškus, jei nesate Nyderlandai. Dabar geriau nei niekada. Nors niekada geriau nei dabar. Jei įvadą sunku paaiškinti, tai yra bloga idėja.
Jei įvadą lengva paaiškinti, tai gali būti gera idėja.
Vardų vietos yra viena gera idėja - netgi daugiau!

106
19 сент. Atsakymas pateikiamas cleg 19 Sep. 2008-09-19 14:53 '08 at 14:53 2008-09-19 14:53

Užbaigti vertėjo internetinį pokalbį

 try: import readline except ImportError: print "Unable to load readline module." else: import rlcompleter readline.parse_and_bind("tab: complete") >>> class myclass: ... def function(self): ... print "my function" ... >>> class_instance = myclass() >>> class_instance.<TAB> class_instance.__class__ class_instance.__module__ class_instance.__doc__ class_instance.function >>> class_instance.f<TAB>unction() 

Taip pat reikia nustatyti PYTHONSTARTUP aplinkos kintamąjį.

105
03 окт. atsakymas pateiktas mjardas 03 okt. 2008-10-03 21:38 '08 at 9:38 pm 2008-10-03 21:38

Operatoriaus perkrova eiliniam set :

 >>> a = set([1,2,3,4]) >>> b = set([3,4,5,6]) >>> a | b # Union {1, 2, 3, 4, 5, 6} >>> a  b # Intersection {3, 4} >>> a < b # Subset False >>> a - b # Difference {1, 2} >>> a ^ b # Symmetric Difference {1, 2, 5, 6} 

Sužinokite daugiau iš standartinės bibliotekos nuorodos: Nustatyti tipus

91
01 янв. Atsakymą pateikia Kiv Jan 01 2009-01-01 19:05 '09, 19:05, 2009-01-01 19:05

Įdėtiniai sąrašai ir generatoriaus išraiškos:

 [(i,j) for i in range(3) for j in range(i) ] ((i,j) for i in range(4) for j in range(i) ) 

Jie gali pakeisti didžiulius įdėtos kilpos kodo gabalus.

91
19 сент. Atsakymą pateikė Rafał Dowgird Sep 19 2008-09-19 15:45 '08 at 15:45 2008-09-19 15:45

Peržiūrėkite kitus klausimus apie žymes arba užduoti klausimą