kienthucpython

Upload: hong-trang

Post on 07-Apr-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/6/2019 kienthucpython

    1/56

    Chng I: Nhp Mn Python

    [sa]Python trn FreeBSD 7.0

    -Trn FreeBSD c h tr Python-2.4 v Python-2.5. Bn c th ci t t ports

    Ci t Python 2.4# cd /usr/ports/lang/python24# make install clean# python2.4Python 2.4.4 (#2, Dec 7 2007, 13:41:55)[GCC 3.4.6 [FreeBSD] 20060305] on freebsd6Type "help", "copyright", "credits" or "license" for more information.>>>

    Ci t Python 2.5# cd /usr/ports/lang/python25# make install clean# python2.5Python 2.5.1 (r251:54863, Dec 2 2007, 06:39:44)[GCC 3.4.6 [FreeBSD] 20060305] on freebsd6Type "help", "copyright", "credits" or "license" for more information.>>>

    Thot khi python ta dng CTRL+D

    -Ci t python t source Nu bn thch ci t source, bn c th download python

    source code t y [2]. Chn version cao nht trong danh sch v download file c ui

    .tgz, sau dng cc lnh configure, make, make install.

    -V d install t source

    # wget http://www.python.org/ftp/python/2.5/Python 2.5.tgz

    Resolving www.python.org... done.Connecting to www.python.org[194.109.137.226]:80... connected.HTTP request sent, awaiting response... 200 OKLength: 8,436,880 [application/x tar]...# tar xfz Python 2.5.tgz# cd Python 2.5

  • 8/6/2019 kienthucpython

    2/56

    # ./configurechecking MACHDEP... linux2checking EXTRAPLATDIR...checking for without gcc... no

    ...# makegcc pthread c fno strict aliasing DNDEBUG g O3 Wall Wstrict prototypes

    I. I./Include DPy_BUILD_CORE o Modules/python.o Modules/python.cgcc pthread c fno strict aliasing DNDEBUG g O3 Wall Wstrict prototypes

    I. I./Include DPy_BUILD_CORE o Parser/acceler.o Parser/acceler.cgcc pthread c fno strict aliasing DNDEBUG g O3 Wall Wstrict prototypes

    I. I./Include DPy_BUILD_CORE o Parser/grammar1.o Parser/grammar1.c...# make install

    /usr/bin/install c python /usr/local/bin/python2.5...# pythonPython 2.5.1 (#2, Sep 24 2003, 11:39:14)[GCC 3.3.2 20030908 (Debian prerelease)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> [press Ctrl+D to get back to the command prompt]#

    [sa]Lm vic trn ca s Shell

    By gi bn ci xong python, c nhng tc ng g ca s dng lnh shell khi bnchy n?

    Python nm hai vai tr. N bin dch cho script bn c th chy t command line hocchy nh cc ng dng, bng cch double clicking scripts. Nhng n cng lm vic

    c ca s dng lnh shell bn c th nh gi tuy cc thnh phn v nhng s

    din t. y l ci v cng hu dng cho vic debug, quick hacking, v kim tra. Ticn bit vi ngi dng python thay cho my t nh b ti

    V d:>>> 1 + 1 (1)2>>> print 'hello world'hello world (2)>>> x = 1>>> y = 2

  • 8/6/2019 kienthucpython

    3/56

    >>> x + y3 (3)

    (1)Python c th tnh ton cc bi ton dn gin,

    (2)python c th in ra mn hnh,

    (3)Bn cng c th gn v khai bo cc bin.

    [sa]Vit Python Bng Eclipse

    Eclipse c trong ports ca FreeBSD ci Eclipse bn lm nh sau:

    # cd /usr/ports/java/eclipse# make install clean

    Sau khi ci xong bn khi ng Eclipse bng dng lnh # eclipse s xut hin nh hnh

    di y:

    Sau khi eclipse khi ng xong bn bt u install Pydev theo hng dn sau:

  • 8/6/2019 kienthucpython

    4/56

    Bn vo link sau download gi pydev phin bn mi nht, v gii nnfile(Download [3]):

    # unzip org.python.pydev.feature-1_3_11.zipSau khi gii nn s cho ra th mc eclipse trong c 2 th mc features v plugins, bnchp tt c cc file v th mc c trong 2 th mc trn vo ni m bn ci eclipse.Cch lm nh sau:# cp -r eclipse/features/org.python.pydev.feature_1.3.11 /usr/local/eclipse/features# cd eclipse/plugins/# cp -rf * /usr/local/eclipse/plugins

    Bn khi ng eclipse v tin hnh ci pydev nh sau:Bn chn menu Window --> Preferences...

    Tip theo bn chn Pydev-->Interpreter-Python. Chn New v chn file chy Python2.5,

    chn ok

  • 8/6/2019 kienthucpython

    5/56

    ToProject

  • 8/6/2019 kienthucpython

    6/56

  • 8/6/2019 kienthucpython

    7/56

  • 8/6/2019 kienthucpython

    8/56

  • 8/6/2019 kienthucpython

    9/56

    Sau khi to Project xong bn click phi vo project bn va to to file, cch lm nh

    sau:

  • 8/6/2019 kienthucpython

    10/56

    Sau khi in tn file xong bn chon Finish. n y bn to xong file vit chngtrnh. Sau y la v d v cch vit trn mt chng trnh gii phng trnh bc 2 trn

    eclipse bng ngn ng Python:

  • 8/6/2019 kienthucpython

    11/56

    chy chng trnh bn click phi vo vng vit code v chon Run as --> Python run

  • 8/6/2019 kienthucpython

    12/56

    Kt qu s c hin th nh sau :

  • 8/6/2019 kienthucpython

    13/56

    [sa]Chui

    Ngoi s, Python cn lm vic c vi chui, c th c biu hin theo nhiu cch.Chng c th c kp trong du nhy n, i:

    >>> 'welcome''welcome'

    >>> 'doesn\'t'"doesn't">>> "doesn't""doesn't">>> '"Chao," cac ban.''"Chao," cac ban.'>>> "\"Chao,\" cac ban."'"Chao," cac ban.'>>> '"Isn\'t," she said.''"Isn\'t," she said.'

    Cc chui c th ph nhiu dng theo nhiu cch. Cc dng tip tc (continuation line)

    c th c dng, vi mt du sut huyn l k t cui cng trn mt dng cho bit rngdng k l s ni tip ca dng ny:

    hello = "This is a rather long string containing\n\

  • 8/6/2019 kienthucpython

    14/56

    several lines of text just as you would do in C.\n\Note that whitespace at the beginning of the line is\

    significant."print hello

    Lu rng cc dng mi vn cn c chn trong chui vi \n; k t dng mi theo sau

    du sut huyn s b b qua. V d ny s in ra:

    This is a rather long string containingseveral lines of text just as you would do in C.

    Note that whitespace at the beginning of the line is significant.

    Tuy nhin, nu ta lm cho chui trc tip thnh chui ``th , cc dy \n s khng c

    chuyn thnh cc dng mi, nhng du sut huyn cui dng, v k t dng mi trongngun, s u c thm vo trong chui nh d liu. Cho nn, v d:

    hello = r"This is a rather long string containing\n\several lines of text much as you would do in C."

    print hello

    s in:

    This is a rather long string containing\n\several lines of text much as you would do in C.

    Hoc, cc chui c th c vy quanh trong mt cp nhy ba: """ hoc . Cui mi dng

    khng cn thm du sut huyn khi dng nhy ba, v chng s c mt trong chui.

    print """Usage: thingy [OPTIONS]

    -h Display this usage message

    -H hostname Hostname to connect to"""xut ra:Usage: thingy [OPTIONS]

    -h Display this usage message-H hostname Hostname to connect to

  • 8/6/2019 kienthucpython

    15/56

    Trnh thng dch in ra kt qu ca cc tc v chui theo cng cch nh khi chng cnhp vo: trong du nhy, v vi cc k t du nhy hay c bit khc c thot ngha

    (escape) bng du sut huyn, hin gi tr thc. Chui c km trong du nhy i

    nu chui cha mt du nhy n v khng cha du nhy i, ngoi ra n s c cha

    trong cc du nhy n. (Cu lnh print , c gii thch sau, c th dng vit ccchui khng c du nhy hoc thot ngha.)

    Cc chui c th c ni vi nhau vi ton t + , v c lp li vi *:

    >>> word = 'Help' + 'A'>>> word'HelpA'>>> ''''

    Hai chui trc tip k nhau c t ng ni vi nhau; dng u tin bn trn c th

    c bit "word = 'Help' 'A'"; vic ny ch c tc dng vi hai chui trc tip (string

    literal), khng c tc dng vi cc biu thc chui bt k khc:

    >>> 'str' 'ing' # >> 'str'.strip() + 'ing' # >> 'str'.strip() 'ing' # >> word[4]'A'>>> word[0:2]'He'>>> word[2:4]

  • 8/6/2019 kienthucpython

    16/56

    'lp'

    Cc ch mc ct lt c gi tr mc nh hu dng; ch mc u tin c gi tr mc nh l

    khng, ch mc th hai mc nh l kch thc ca chui ang b ct.

    >>> word[:2] # The first two characters

    'He'

    >>> word[2:] # Everything except the first two characters

    'lpA'

    Khng nh C, cc chui Python khng th b thay i. Php gn vo mt v tr ch mctrong mt chui s gy ra li:

    >>> word[0] = 'x'Traceback (most recent call last):File "", line 1, in ?

    TypeError: object doesn't support item assignment>>> word[:1] = 'Splat'Traceback (most recent call last):File "", line 1, in ?

    TypeError: object doesn't support slice assignment

    Tuy nhin, vic to mt chui vi ni dung gp chung cng d v hiu qu:

    >>> 'x' + word[1:]'xelpA'>>> 'Splat' + word[4]'SplatA'

    y l mt tnh cht bt bin hu dng khc ca tc v ct lt: s[:i] + s[i:] bng s.

    >>> word[:2] + word[2:]'HelpA'>>> word[:3] + word[3:]'HelpA'

  • 8/6/2019 kienthucpython

    17/56

    Cc ch mc ct lt gim sinh (degenerate) c x l rt kho: mt ch mc qu ln sc thay bng kch thc chui, mt gii hn trn nh hn gii hn di tr v mt

    chui rng.

    >>> word[1:100]'elpA'>>> word[10:]

    >>> word[2:1]

    Cc ch mc c th l s m, bt u m t bn phi. V d:

    >>> word[-1] # The last character'A'>>> word[-2] # The last-but-one character'p'>>> word[-2:] # The last two characters'pA'>>> word[:-2] # Everything except the last two characters'Hel'

    Nhng lu rng -0 tht ra cng l 0, cho nn n khng bt u m t bn phi!

    >>> word[-0] # (since -0 equals 0)'H'

    Cc ch mc ct lt m ngoi phm vi th b thu ngn, nhng ng th kiu ny vi cc

    ch mc mt phn t (khng phi ct lt):

    >>> word[-100:]'HelpA'>>> word[-10] # errorTraceback (most recent call last):File "", line 1, in ?

    IndexError: string index out of range

  • 8/6/2019 kienthucpython

    18/56

    Cch tt nht nh hot ng ca ct lt l ngh v cc ch mc nh ang tr vo giacc k t, vi cnh tri ca k t u tin l 0. Sau cnh phi ca k t cui cng ca

    mt chui ca n k t c ch mc n, v d:

    +---+---+---+---+---+| H | e | l | p | A |+---+---+---+---+---+0 1 2 3 4 5

    -5 -4 -3 -2 -1

    Cc s hng u cho bit v tr ca cc ch mc 0...5 trong chui; dng th hai cho bit

    cc ch mc m tng ng. Mt lt t i ti j cha ton b cc k t gia cc cnh nh s

    i v jtng ng.

    Vi cc ch mc khng m, chiu di ca lt l hiu ca cc ch mc, nu c hai utrong gii hn. V d, di ca word[1:3] l 2.

    Hm c sn len() tr v di ca mt chui:

    >>> s = 'supercalifragilisticexpialidocious'>>> len(s)34

    [sa]Danh Sch

    Python bit mt s kiu d liu gp (compound) , dng nhm cc gi tr vi nhau.

    Kiu linh hot nht l danh sch (list), c th c vit nh l mt danh sch cc gi trphn cch bi du phy gia ngoc vung.

    >>> a = ['hallo', 'good', 100, 1234]>>> a

    ['hallo', 'good', 100, 1234]

    Cng nh cc ch mc chui, ch mc danh sch bt u t 0, v danh sch c th cct lt, gm v vn vn:

    >>> a[0]'hallo'>>> a[3]1234

  • 8/6/2019 kienthucpython

    19/56

    >>> a[-2]100>>> a[1:-1]['good', 100]

    >>> a[:2] + ['bacon', 2*2]['hallo', 'good', 'bacon', 4]>>> 3*a[:3] + ['Boo!']['hallo', 'good', 100, 'hallo', 'good', 100, 'hallo', 'good', 100, 'Boo!']

    Khng nh chui, l nhng i tng immutable (bt bin, khng th thay i), ta c th

    thay i cc phn t ca mt danh sch:

    >>> a

    ['hallo', 'good', 100, 1234]>>> a[2] = a[2] + 23>>> a['hallo', 'good', 123, 1234]

    Gn vo cc ct lt cng c th lm c, v n c th thay i kch thc ca danh sch

    hoc xa sch n.

    >>> # Replace some items:... a[0:2] = [1, 12]

    >>> a[1, 12, 123, 1234]>>> # Remove some:... a[0:2] = []>>> a[123, 1234]>>> # Insert some:... a[1:1] = ['bletch', 'xyzzy']>>> a[123, 'bletch', 'xyzzy', 1234]

    >>> # Insert (a copy of) itself at the beginning>>> a[:0] = a>>> a[123, 'bletch', 'xyzzy', 1234, 123, 'bletch', 'xyzzy', 1234]>>> # Clear the list: replace all items with an empty list>>> a[:] = []>>> a

  • 8/6/2019 kienthucpython

    20/56

    []

    Hm c sn len() cng p dng vo danh sch:

    >>> len(a)8

    C th lng cc danh sch (to danh sch cha cc danh sch khc), v d:

    >>> q = [2, 3]>>> p = [1, q, 4]>>> len(p)3

    >>> p[1][2, 3]>>> p[1][0]2>>> p[1].append('xtra') # See section 5.1>>> p[1, [2, 3, 'xtra'], 4]>>> q[2, 3, 'xtra']

    Lu trong v d, p[1] v q tht ra ch ti cng i tng! Chng ta s ni v ngha cai tng (object semantics) trong cc chng sau.

    [sa]

    Bi tp:bi tp tin A2

    Chng II: Chng trnh Python u tin ca bn

    [sa]i vo Python

    Python hu nh chc chn khng to ra s cm hng nht nh n bn. ng lo lng v

    iu , bi v bn s phi phn tch n, nghin cu thng qua n trc v thy g, bn cth hiu c n.

    V d:odbchelper.pyNu bn cha sn sng lm, bn c th tham kho v d di y:

  • 8/6/2019 kienthucpython

    21/56

    def buildConnectionString(params):"""Build a connection string from a dictionary of parameters.Returns string."""return ";".join(["%s=%s" % (k, v) for k, v in params.items()])

    if __name__ == "__main__":myParams = {"server":"mpilgrim", \"database":"master", \"uid":"sa", \"pwd":"secret" \}

    print buildConnectionString(myParams)

    By gi chy chng trnh bn s thy iu g.

    Trong UNIX(bao gm Mac OS X), bn c th chy chng trnh python t commandline:

    #python odbchelper.py

    odbchelper.py s in ra mn hnh nh sau:

    server=mpilgrim;uid=sa;database=master;pwd=secret

    [sa]Khai bo hm

    Python c cc hm nh nhng ngn ng khc, nhng n khng c cc gi file ring bitnh C++ hoc cc on interface/implementation nh Pascal. Khi bn cn mt hm, ch

    vic khai bo n, nh th ny:

    def buildConnectionString(params):

    Ch rng khi nh def bt u khai bo mt hm, c theo tn hm, theo nhng g

    c gn trong du ngoc n.

    Cng ch rng hm khng nh ngha mt kiu d liu tr v. Hm ca Python khngnh r kiu d liu ca nhng gi tr tr v, chng cng khng nh r mt gi tr c

    tr v hay khng. Trong thc t, nhng hm python tr v mt gi tr, nu hm c ch rathc hin nhng ch dn mt thng bo tr v, n s tr v gi tr , nu khng th n s

    tr v mt gi tr rng.

  • 8/6/2019 kienthucpython

    22/56

    [sa]Lm th no so snh kiu d liu ca python v cc ngn ng lp trnh khc

    Kiu ngn ng tnhN khng t hnh thnh cho mnh mt x l chuyn pha di, n phi da vo nhng

    nn tng ca nhng ngn ng khc nh java v C to cho mnh lp bc pha trn

    Kiu ngn ng nng ngMt ngn ng m cc kiu c tm ra nh thi gian thi hnh, tri vi ngn ng tnh.VBScript v Python l kiu nng ng, v chng mang mt dng v bn ngoi c th thay

    i c khi bn u tin gn cho n mt gi tr.

    Kiu ngn ng mnh mMt ngn ng m trong cc kiu lun c tun theo. Java v Python l 2 kiu mnh

    m. Nu bn c mt kiu integer, bn khng th coi n nh mt kiu string m khng cs chuyn i r rng.

    Kiu ngn ng thpMt ngn ng m trong cc kiu ny c th b loi b, tri ngc vi kiu mnh m.

    VBScript l kiu thp. Trong VBScript, bn c th ni string '12' vi integer 3 c

    string '123', sau coi nh integer 123, tt c u khng cn n s chuyn i r rng.

    V vy Python va l kiu ngn ng nng ng va l kiu ngn ng mnh m.

    [sa]Chng minh cc hm

    Bn c th chng minh mt hm trong python bng cch cho n mt kiu d liu chui.

    V d:def buildConnectionString(params):

    """Build a connection string from a dictionary of parameters.Returns string."""

    Ba du ngoc kp c ngha l mt chui a dng. Mi th bt u v kt thc cc dungoc kp l ng dn ca mt chui n, bao gm thi hnh vic tr v v nhng k t

    nm gia du ngoc kp khc. Bn c th dng chng bt c u, nhng bn s thy

    chng hu nh thng c dng dnh ngha mt kiu d liu chui.

  • 8/6/2019 kienthucpython

    23/56

    Ba du ngoc kp cng l cch nh ngha mt chui vi mt v 2 du ngo kp.Nhng g gia 3 du ngo kp l kiu d liu chui ca hm, nhng d liu no dng

    hm g. Mt d liu chui, nu n tn ti, iu trc tin phi c nh ngha trong

    mt hm. Bn khng cn ng ngha cho mt hm ca bn, nhng bn lun cn n. y

    la vi kh khn, nhng python s cho bn mt s khch l: d liu chui c th dngc ch lm vic nh mt thuc tnh ca hm.

    [sa]Mi th l mt i tng

    Hm trong Python c cc thuc tnh, v cc thuc tnh c th dng c ch lmvic.

    Mt hm, nh nhng th khc trong Python, l mt i tng.

    V d:>>> import odbchelper (1)>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}>>> print odbchelper.buildConnectionString(params) (2)server=mpilgrim;uid=sa;database=master;pwd=secret>>> print odbchelper.buildConnectionString.__doc__ (3)Build a connection string from a dictionaryReturns string.

    (1) Dng u tin import odbchelper nh mt module--mt on ca code m bn c th

    dng cch tng tc. hoc t mt ngn ng Python ln. Mt ln bn import mt module,bn c th tham chiu bt c cc hm, cc lp, hoc cc thuc tnh. Cc Module c th

    lm iu ny nhp thuc tnh v hm trong cc module khc. y l mt khi nimquan trng bn s ni nhiu v n sau ny.

    (2) Khi bn mun dng hm c nh ngha trong import module, bn cn bao gm c

    tn module. V vy bn khng th ch gi buildConnectionString, n phi l

    odbchelper.buildConnectionString. Nu bn tng dng cc lp trong java, iu ny sc cm gic hi quen thuc.

    (3)Thay v gi mt hm nh bn mong i, bn c hi cc thuc tnh ca hm

    __doc__. Import python nh ngn ng perl. Mt ln bn import module python. Bn xcnhn hm ca n vi module.function. Mt ln bn dng hm Perl, bn xc nhn hm ca

    n vi module::function.

  • 8/6/2019 kienthucpython

    24/56

    [sa]Nhp tm ng dn

    Trc khi tip tc, ti mun cp ngn gn v th vin tm ng dn. Python tm

    kim trong nhng ni bn import mt moduleMt cch c th, n tm kim trong tt c

    cc th mc c nh ngha trong sys.path. y l mt danh sch, v bn c th d dng

    xem hoc thay i n theo theo th t.

    V d:>>> import sys (1)>>> sys.path (2)[, '/usr/local/lib/python2.2', '/usr/local/lib/python2.2/plat linux2','/usr/local/lib/python2.2/lib dynload', '/usr/local/lib/python2.2/site packages','/usr/local/lib/python2.2/site packages/PIL','/usr/local/lib/python2.2/site packages/piddle']

    >>> sys (3)>>> sys.path.append('/my/new/path') (4)

    (1)Nhp sys module to cho tt c cc hm v cc thuc tnh ca n c th dng c.

    (2) sys.path l mt danh sch cc tn m to ra mt lung tm kim ng dn. Python s

    tm kim cc th mc bn trong c cc file .py kt hp vi tn module bn import.

    (3) Trn thc t n cn rc ri hn th nhiu, bi v khng c tt c module c d

    tr nh cc file .py . Nh sys module c thit lp trong cc module.(4) Bn c th thm mt th mc mi tm kim ng dn trong python c th lm

    vic c bng cch gn thm vo tn th mc n sys.path, sau python s tm kim

    trong th mc .

    [sa]i tng l g?

    Mi th trong python l mt i tng, v hu nh mi th c thuc tnh v phng

    php. Tt c cc hm thit lp trong thuc tnh __doc__, tr v d liu chui c nhngha trong m ngun ca hm. Sys module l mt i tng m c mt thuc tnh c

    gi l path. V tng t nh th.

    Cc ngn ng lp trnh khc nh ngha i tng theo nhng cch khc nhau. ngha

    ca n l tt c cc i tng buc phi c cc thuc tnh v cc phng thc, mc khc,n c ngha l tt c cc i tng phn lp c. Trong Python, nh ngh l sai, mt

    s cc i tng hoc l cc thuc tnh hoc l cc phng thc, v khng c i tng

  • 8/6/2019 kienthucpython

    25/56

    no phn lp c. Nhng tt c l mt hng i tng m n c th c gn mt sbin thin hoc c thng qua nh mt i s n mt hm.

    iu ny c bit quan trng , mi th trong python u l i tng. Chui l cc i

    tng, Danh sch l cc i tng, Hm l cc i tng, mudule cng l cc i tng.

    Chng III: Lp trnh Hng i tng

    Khi nim hng i tng c xy dng trn nn tng ca khi nim lp trnh c cu

    trc v s tru tng ha d liu. S thay i cn bn ch, mt chng trnh hng i

    tng c thit k xoay quanh d liu m chng ta c th lm vic trn , hn l theochnh chc nng ca chng trnh. iu ny hon ton t nhin mt khi chng ta hiu

    rng mc tiu ca chng trnh l x l d liu. Suy cho cng, cng vic m my tnh

    thc hin vn thng c gi l x l d liu. D liu v thao tc lin kt vi nhau mt mc c bn (cn c th gi l mc thp), mi th u i hi th kia c mc tiu

    c th, cc chng trnh hng i tng lm tng minh mi quan h ny.

    Lp trnh hng i tng (Object Oriented Programming-OOP) hay chi tit hn l Lptrnh nh hng i tng, chnh l phng php lp trnh ly i tng lm nn tng

    xy dng thut gii, xy dng chng trnh. Thc cht y khng phi l mt phng

    php mi m l mt cch nhn mi trong vic lp trnh. phn bit, vi phng phplp trnh theo kiu cu trc m chng ta quen thuc trc y, hay cn gi l phng

    php lp trnh hng th tc, ngi lp trnh phn tch mt nhim v ln thnh nhiucng vic nh hn, sau dn dn chi tit, c th ho c cc vn n gin, tm ra cch gii quyt vn di dng nhng thut gii c th r rng qua d dng

    minh ho bng ngn ng gii thut. Cch thc phn tch v thit k nh vy chng ta gi

    l nguyn l lp trnh t trn xung, th hin qu trnh suy din t ci chung cho nci c th.

    Cc chng trnh con l nhng chc nng c lp, s ghp ni chng li vi nhau cho

    chng ta mt h thng chng trnh gii quyt vn t ra. Chnh v vy, cch thc

    phn tch mt h thng ly chng trnh con lm nn tng, chng trnh con ng vai trtrung tm ca vic lp trnh, c hiu nh phng php lp trnh hng v th tc. Tuy

    nhin, khi phn tch thit k mt h thng khng nht thit phi lun lun suy nghtheo hng lm th no gii quyt cng vic, chng ta c th nh hng t duy

    theo phong cch vi mt s i tng c, phi lm g gii quyt c cng vic

    t ra hoc phong ph hn, lm ci g vi mt s i tng c , t cng c

  • 8/6/2019 kienthucpython

    26/56

    th gii quyt c nhng cng vic c th. Vi phng php phn tch trong itng ng vai tr trung tm ca vic lp trnh nh vy.

    Lp trnh hng i tng lin kt cu trc d liu vi cc thao tc, theo cch m tt c

    thng ngh v th gii quanh mnh. Chng ta thng gn mt s cc hot ng c thvi mt loi hot ng no v t cc gi thit ca mnh trn cc quan h .

    Lp trnh hng i tng cho php chng ta s dng cc qu trnh suy ngh nh vy vi

    cc khi nim tru tng c s dng trong cc chng trnh my tnh. Mt mu tin

    nhn s c th c c ra, thay i v lu tr li; cn s phc th c th c dngtrong cc tnh ton. Tuy vy khng th no li vit mt s phc vo tp tin lm mu tin

    nhn s v ngc li hai mu tin nhn s li khng th cng vi nhau c. Mt chng

    trnh hng i tng s xc nh c im v hnh vi c th ca cc kiu d liu, iu cho php chng ta bit mt cch chnh xc rng chng ta c th c c nhng g

    cc kiu d liu khc nhau.

    Chng ta cn c th to ra cc quan h gia cc kiu d liu tng t nhng khc nhautrong mt chng trnh hng i tng. Ngi ta thng t nhin phn loi ra mi th,

    thng t mi lin h gia cc khi nim mi vi cc khi nim c, v thng c th

    thc hin suy din gia chng trn cc quan h . Hy quan nim th gii theo kiu cutrc cy, vi cc mc xy dng chi tit hn k tip nhau cho cc th h sau so vi cc th

    h trc. y l phng php hiu qu t chc th gii quanh chng ta. Cc chng

    trnh hng i tng cng lm vic theo mt phng thc tng t, trong chng cho

    php xy dng cc cc c cu d liu v thao tc mi da trn cc c cu c sn, mangtheo cc tnh nng ca cc c cu nn m chng da trn , trong khi vn thm vo cc

    tnh nng mi. Lp trnh hng i tng cho php chng ta t chc d liu trongchng trnh theo mt cch tng t nh cc nh sinh hc t chc cc loi thc vt khc

    nhau. Theo cch ni lp trnh i tng, xe hi, cy ci, cc s phc, cc quyn sch uc gi l cc lp (Class).

    Mt lp l mt bn mu m t cc thng tin cu trc d liu, ln cc thao tc hp l ca

    cc phn t d liu. Khi mt phn t d liu c khai bo l phn t ca mt lp th n

    c gi l mt i tng (Object). Cc hm c nh ngha hp l trong mt lp cgi l cc phng thc (Method) v chng l cc hm duy nht c th x l d liu ca

    cc i tng ca lp . Mt thc th (Instance) l mt vt th c thc bn trong b

    nh, thc cht l mt i tng (ngha l mt i tng c cp pht vng nh).

    Mi mt i tng c ring cho mnh mt bn sao cc phn t d liu ca lp cn gi l

    cc bin thc th (Instance variable). Cc phng thc nh ngha trong mt lp c th

  • 8/6/2019 kienthucpython

    27/56

    c gi bi cc i tng ca lp . iu ny c gi l gi mt thng ip(Message) cho i tng. Cc thng ip ny ph thuc vo i tng, ch i tng no

    nhn thng ip mi lm vic theo thng ip . Cc i tng u c lp vi nhau v

    vy cc thay i trn cc bin th hin ca i tng ny khng nh hng g trn cc

    bin th hin ca cc i tng khc v vic gi thng ip cho mt i tng ny khngnh hng g n cc i tng khc.

    Nh vy, i tng c hiu theo ngha l mt thc th m trong cc d liu v thtc tc ng ln d liu c ng gi li vi nhau. Hay i tng c c trng

    bi mt s thao tc (operation) v cc thng tin (information) ghi nh s tc ng ca cc

    thao tc ny.

    Cc thao tc trong i tng c gi l cc phng thc hay hnh vi ca i tng .Phng thc v d liu ca i tng lun tc ng ln nhau v c vai tr ngang nhau

    trong i tng, Phng thc ca i tng c qui nh bi d liu v ngc li, dliu ca i tng c t trng bi cc phng thc ca i tng. Chnh nh s gn

    b , chng ta c th gi cng mt thng ip n nhng i tng khc nhau. iu ny

    gip ngi lp trnh khng phi x l trong chng trnh ca mnh mt dy cc cu trciu khin tu theo thng ip nhn vo, m chng trnh c x l vo thi im thc

    hin.

    Tm li, so snh lp trnh cu trc vi chng trnh con lm nn tng:Chng trnh =

    Cu trc d liu + Thut gii

    Trong lp trnh hng i tng chng ta c: i tng = Phng thc + D liu

    y chnh l 2 quan im lp trnh ang tn ti v pht trin trong th gii ngy nay.

    [sa]Class

    Ch cn mt t c php v t kha mi, Python c th h tr class. N l s trn ln

    gia C++ v Modula-3. Cng nh module, cc lp trong Python khng t ro cn tuyti gia nh ngha lp v ngi s dng, m thay vo n da vo s lch thip trong

    cch dng m ``khng ph nh ngha. Tuy nhin, cc tnh nng quan trng nht ca

    class vn c gi li trn vn: cch k tha class h tr nhiu class c s, class con cth nh ngha li bt k phng thc no ca cc class c s ca n, v mt phng

    thc c th gi mt phng thc cng tn ca mt class c s. Cc i tng c th cha

    mt lng d liu ring bt k.

    Theo thut ng C++, mi thnh vin class (k c thnh vin d liu) l public(cng

    cng), v mi thnh vin hm l virtual(o). Khng c b khi to (constructor) hoc b

  • 8/6/2019 kienthucpython

    28/56

    hy (destructor) c bit. Cng nh Modula-3, khng c cch vit tt no tham chiuti cc thnh vin ca mt i tng t cc phng thc ca n: hm phng thc c

    khai bo vi thng s th nht th hin chnh i tng , v c t ng truyn vo

    qua lnh gi. Nh trong Smalltalk, cc class cng l cc i tng theo mt ngha rng:

    trong Python, mi kiu d liu u l cc i tng. iu ny cho php nhp (import) vi tn. Khng nh C++ v Modula-3, cc kiu c sn c th c dng nh cc class c

    s m rng bi ngi dng. V nh trong C++ nhng khng ging Modula-3, a scc ton t c sn vi c php c bit (cc ton t s hc, truy cp mng, v.v...) c th

    c nh ngha li trong cc trng hp c th ca class.

    [sa]v thut ng

    Nhng t chuyn ngnh dng y theo t vng ca Smalltalk v C++.

    Cc i tng c tnh c th (individuality), v nhiu tn (trong nhiu phm vi, scope) c

    th c gn vo cng mt i tng. Trong cc ngn ng khc c gi l tn lng(alias). N thng khng c nhn ra khi dng Python ln u, v c th c b qua

    khi lm vic vi cc kiu bt bin c bn (s, chui, b). Tuy nhin, tn lng c mt nhhng i vi ngha ca m Python c s dng cc i tng kh bin nh danh sch,

    t in, v a s cc kiu th hin cc vt ngoi chng trnh (tp tin, ca s, v.v...). Nthng c dng v tn lng c tc dng nh l con tr theo mt vi kha cnh no .

    V d, truyn mt i tng vo mt hm r v ch c con tr l c truyn, v nu mt

    hm thay i mt i tng c truyn vo, th ni gi s thy cc thay i -- thay v

    cn hai kiu truyn thng s nh trong Pascal.[sa]Phm vi trong Python v vng tn

    Trc khi gii thiu lp, chng ta s cn hiu phm vi (scope) v vng tn (namespace)

    hot ng nh th no v cc nh ngha lp s s dng chng. Kin thc v vn nycng rt hu dng vi nhng nh lp trnh Python chuyn nghip.

    Bt u vi mt vi nh ngha.

    A namespace (vng tn)l nh x t tn vo i tng. a s cc vng tn cci t bng t in Python, nhng iu thng l khng quan trng (tr tc ),v c th s thay i trong tng lai. Cc v d vng tn nh: tp hp cc tn c sn(cc hm nh abs(), v cc tn bit l c sn); cc tn ton cc trong mt module; cc

    tn ni b trong mt php gi hm. Theo ngha tp hp cc thuc tnh ca mt i

    tng cng l mt vng tn. iu quan trng cn bit v vng tn l tuyt i khngc quan h g gia cc vng tn khc nhau; v d hai module khc nhau c th cng

  • 8/6/2019 kienthucpython

    29/56

    nh ngha hm ``maximize m khng s ln ln -- ngi dng module phi thm tint tn module trc khi gi hm.

    Cng xin ni thm l t thuc tnh c dng ch mi tn theo sau du chm -- v d,

    trong biu thc z.real, real l mt thuc tnh ca i tng z. Ni ng ra, tham chiu ti

    tn trong mt module l cc tham chiu ti thuc tnh: trong biu thcmodname.funcname, modname l mt i tng module v funcname l mt thuc tnh

    ca n. Trong trng hp ny, vic nh x gia cc thuc tnh ca m-un v cc tn

    ton cc c nh ngha trong m-un tht ra rt n gin: chng dng chung mt vngtn!

    Ghi ch:vng tn!Tr mt chuyn. Cc i tng m-un c mt thuc tnh ch c gi l __dict__ tr vmt t in dng ci t vng tn ca m-un; tn __dict__ l mt thuc tnh nhngkhng phi l mt tn ton cc. R rng, s dng n vi phm tnh tru tng ca ci tvng tn, v nn c gii hn vo nhng chuyn nh g ri.

    Thuc tnh c th l ch c, hoc c ghi. Trong trng hp sau, php gn vo thuctnh c th c thc hin. Cc thuc tnh module l c ghi: bn c th vit

    "modname.the_answer = 42". Cc thuc tnh c ghi cng c th c xa i vi cu

    lnh del . V d, "del modname.the_answer" s xa thuc tnh the_answer t i tngtn modname.

    Cc vng tn c to ra vo nhng lc khc nhau v c thi gian sng khc nhau. Vngtn cha cc tn c sn c to ra khi trnh thng dch Python bt u, v khng bao gi

    b xa i. Vng tn ton cc ca mt module c to ra khi nh ngha module c

    c; bnh thng, vng tn module cng tn ti cho ti khi trnh thng dch thot ra. Cc

    cu lnh c thc thi bi li gi lp cao nht ca trnh thng dch, v c t mt kchbn hoc qua tng tc, c coi nh mt phn ca mdunle gi l __main__, cho nn

    chng cng c vng tn ring. (Cc tn c sn tht ra cng tn ti trong mt module;

    c gi l __builtin__.)

    Vng tn ni b ca mt hm c to ra khi hm c gi, v c xa i khi hm trv, hoc nng mt bit l khng c x l trong hm. D nhin, cc li gi hm quy

    c vng tn ring ca chng.

    Phm vi l mt vng vn bn ca mt chng trnh Python m mt vng tn cth c truy cp trc tip. ``C th truy cp trc tip c ngha l mt tham chiukhng y (unqualifed reference) ti mt tn s th tm tn trong vng tn.

  • 8/6/2019 kienthucpython

    30/56

    Mc d phm vi c xc nh tnh, chng c dng mt cch ng. Vo bt k mtlc no, c t nht ba phm vi lng nhau m vng tn ca chng c th c truy cp trc

    tip: phm vi bn trong cng, c tm trc, cha cc tn ni b; cc vng tn ca cc

    hm cha n, c tm bt u t phm vi cha n gn nht (nearest enclosing scope);

    phm vi gia (middle scope), c tm k, cha cc tn ton cc ca module; v phm vingoi cng (c tm sau cng) l vng tn cha cc tn c sn.

    Nu mt tn c khai bo l ton cc, th mi tham chiu hoc php gn s i thng vo phm vi gia cha cc tn ton cc ca module. Nu khng, mi bin c tm thy

    ngoi phm vi trong cng ch c th c c (nu th khi vo cc bin s to mt

    bin cc b mi trong phm vi trong vng, v khng nh hng ti bin cng tn phmvi ngoi).

    Thng thng, phm vi ni b tham chiu cc tn ni b ca hm hin ti (da vo vn

    bn). Bn ngoi hm, phm vi ni b tham chiu cng mt vng tn nh phm vi toncc: vng tn ca module. Cc nh ngha lp t thm mt vng tn khc trong phm vi

    ni b.

    im quan trng cn ghi nh l phm vi c xc nh theo vn bn: phm vi ton cc

    ca mt hm c nh ngha trong mt module l vng tn ca module , cho dmodule c gi t u, hoc c t tn lng no. Mt khc, vic tm tn c thc

    hin lc chy -- tuy nhin, nh ngha ngn ng ang pht trin theo hng xc nh tn

    vo lc ``dch, cho nn ng da vo vic tm tn ng! (Thc ra th cc bin ni b

    c xc nh tnh.)

    Mt im ng ca Python l cc php gn lun gn vo phm vi trong cng. Php gn

    khng chp d liu, ch buc cc tn v cc i tng. Xa cng vy: cu lnh "del x" brng buc x khi vng tn c tham chiu ti bi phm vi ni b. Thc t l mi tc v

    c thm cc tn mi u dng phm vi ni b: in hnh l cc cu lnh nhp v cc nh

    ngha hm buc tn module hoc tn hm vo phm vi ni b. (Lnh global c th cdng cho bit mt bin c th l phm vi ton cc.)

    [sa]Ci nhn u tin v class

    class thm mt t c php mi, ba kiu i tng mi, v mt t ng ngha mi.

    [sa]C php nh ngha class

    Kiu n gin nht ca vic nh ngha class nhn ging nh:

    class ClassName:

  • 8/6/2019 kienthucpython

    31/56

    .

    .

    .

    nh ngha class, cng nh nh ngha hm (cu lnh def ) phi c thc thi trc khi

    chng c hiu lc. (Bn c th t mt nh ngha hm trong mt nhnh ca lnh if , hoctrong mt hm.)

    Trong thc t, cc cu lnh trong mt nh ngha class thng l nh ngha hm, nhng

    cc cu lnh khc cng c cho php, v i khi rt hu dng. Cc nh ngha hmtrong mt class thng c mt dng danh sch thng s l, v phi tun theo cch gi

    phng thc.

    Khi gp phi mt nh ngha class, mt vng tn mi c to ra, v c dng nh lphm vi ni b. Do , mi php gn vo cc bin ni b i vo vng tn ny. c bit,

    cc nh ngha hm buc tn ca hm mi y.

    Khi ri khi mt nh ngha class mt cch bnh thng, mt i tng class c to ra.

    y c bn l mt b gi (wrapper) ca ni dung ca vng tn to ra bi nh nghaclass. Phm vi ni b ban u (trc khi vo nh ngha class) c thit lp li, v i

    tng class c buc vo y qua tn class ch nh nh ngha class, (ClassName

    trong v d trn).

    [sa]i tng class

    Cc i tng class h tr hai loi tc v: tham chiu thuc tnh v to trng hp

    (instantiation).

    Tham chiu thuc tnh dng c php chun c dng cho mi tham chiu thuc tnhtrong Python: obj.name. Cc tn thuc tnh hp l gm mi tn trong vng tn ca class

    khi i tng class c to ra. Do , nu nh ngha class c dng nh sau:

    class MyClass:

    "A simple example class"i = 12345def f(self):

    return 'hello'

    th MyClass.i v MyClass.f l nhng tham chiu thuc tnh hp l, tr v mt s nguynv mt i tng hm, theo th t . Cc thuc tnh class cng c th gn vo, cho nn

  • 8/6/2019 kienthucpython

    32/56

    bn c th thay i gi tr ca MyClass.i bng php gn. __doc__ cng l mt thuc tnhhp l, tr v chui ti liu ca class: "A simple example class".

    Class instantiation (to trng hp lp) dng cng cch vit nh gi hm. Hytng tng mt i tng class l mt hm khng thng s tr v mt trng hpca class. V d (vi class trn):

    x = MyClass()

    to mt trng hp mi ca class v gn i tng ny vo bin ni b x.

    Tc v to trng hp (``gi mt i tng class) to mt i tng rng. Nhiuclass thch to i tng vi cc trng hp c khi to mt trng thi u no

    . Do mt class c th nh ngha mt phng thc c bit tn __init__(), nhsau:

    def __init__(self):self.data = []

    Khi mt class nh ngha mt phng thc __init__() , vic to trng hp class s t

    ng gi __init__() trng hp class mi va c to. Trong v d ny, mt trnghp khi to mi c th c to ra t:

    x = MyClass()

    D nhin, __init__() (phng thc) c th nhn thm thng s. Trong trng hp , ccthng s a vo php to trng hp lp s c truyn vo __init__(). V d,

    >>> class Complex:... def __init__(self, realpart, imagpart):... self.r = realpart... self.i = imagpart

    ...>>> x = Complex(3.0, -4.5)>>> x.r, x.i(3.0, -4.5)

  • 8/6/2019 kienthucpython

    33/56

    [sa]i tng trng hp

    Chng ta c th lm c g vi nhng i tng trng hp? Tc v duy nht m cc

    i tng trng hp hiu c l tham chiu thuc tnh. C hai loi tn thuc tnh hp

    l, thuc tnh d liu v phng thc.

    data attributes (thuc tnh d liu lp) tng ng vi ``bin trng hp trongSmalltalk, v thnh vin d liu trong C++. Thuc tnh d liu khng cn c khaibo; nh cc bin ni b, chng t ng tn ti khi c gn vo. V d, nu x l mt

    trng hp ca MyClass c to ra trn, on m sau in ra gi tr 16, m khngcha li du vt:

    x.counter = 1while x.counter < 10:

    x.counter = x.counter * 2print x.counterdel x.counter

    Loi tham chiu thuc tnh trng hp khc l mt method (phng thc). Mt phng

    thc l mt hm ca mt i tng. (Trong Python, t phng thc khng ch ring chotrng hp lp: cc kiu i tng khc cng c th c phng thc. V d, i tng

    danh sch c phng thc tn append, insert, remove, sort, v.v... Tuy nhin, trong phn

    sau chng ta s ch dng t phng thc d ch cc phng thc ca i tng trng

    hp lp, tr khi c ch nh khc i.)Cc tn phng thc hp l ca mt i tng trng hp ph thuc vo class ca n.

    Theo nh ngha, mi thuc tnh ca mt class m l nhng i tng hm nh ngha ccphng thc tng ng ca cc trng hp ca class . Trong v d ca chng ta, x.f l

    mt tham chiu phng thc hp l, v MyClass.f l mt hm, nhng x.i khng phi, bi

    v MyClass.i khng phi. Nhng x.f khng phi l mt th nh MyClass.f n l mtmethod object (i tng phng thc), khng phi l mt i tng hm.

    [sa]i tng phng thc

    Thng thng, mt phng thc c gi ngay sau khi n b buc:

    x.f()

  • 8/6/2019 kienthucpython

    34/56

    Trong MyClass , n s tr v chui 'hello'. Tuy nhin, cng khng nht thit phi gi mtphng thc ngay lp tc: x.f l mt i tng phng thc, v c th c ct i v gi

    vo mt thi im khc. V d:

    xf = x.fwhile True:print xf()

    s tip tc in "hello" mi mi.

    Chuyn g tht s xy ra khi mt phng thc c gi? Bn c th nhn ra rng x.f()

    c gi vi khng thng s, mc d nh ngha hm ca f ch nh mt thng s.

    Chuyn g xy ra vi thng s ? Python chc chn nng mt bit l khi mt hm cnmt thng s c gi sung cho d thng s c c dng hay khng i na...

    Tht ra, bn cng c th on ra c cu tr li: im c bit ca phng thc l

    i tng c truyn vo thng s u tin ca hm. Trong v d ca chng ta, ligi x.f() hon ton tng ng vi MyClass.f(x). Ni chung, gi mt hm vi mt danh

    sch n thng s th tng ng vi vic gi hm tng ng vi mt danh sch thng s

    c to ra bng cch chn i tng ca phng thc vo trc thng s th nht.

    (Hiu n gin l obj.name(arg1, arg2) tng ng vi Class.name(obj, arg1, arg2)

    trong obj l i tng trng hp ca lp Class, name l mt thuc tnh hp l khng

    phi d liu, tc l i tng hm ca lp .)[sa]Vd v lp trnh hng i tng: Qun L Thnh Vin [4]

    [sa]Mt vd khc v bi Qun L Thnh Vin. Cc bn c th tham kho ti[5]

    [sa]Mt vi li bnh

    Thuc tnh d liu s che thuc tnh phng thc cng tn; trnh v tnh trng lp tn,

    m c th dn n cc li rt kh tm ra trong cc chng trnh ln, bn nn c mt quy

    nh t tn no gim thiu t l trng lp. Cc quy nh kh thi c th gm vit hoa

    tn phng thc, t tin t vo cc tn thuc tnh d liu (v d nh du gch di _),

    hoc dng ng t cho phng thc v danh t cho cc thuc tnh d liu.Cc thuc tnh d liu c th c tham chiu ti bi c phng thc ln ngi dng i

    tng . Ni mt cch khc, lp khng th c dng ci t cc kiu d liu tru

    tng tuyt i. Trong thc t, khng c g trong Python c th p vic che du d liu,tt c u da trn nguyn tc. (Mt khc, ci t Python, c vit bng C, c th du

  • 8/6/2019 kienthucpython

    35/56

    cc chi tit ci t v iu khin truy cp vo mt i tng nu cn; iu ny c thc dng trong cc b m rng Python vit bng C.)

    Ngi dng nn dng cc thuc tnh d liu mt cch cn thn, ngi dng c th ph

    hng nhng bt bin (invariant) c gi bi cc phng thc nu c sa cc thuctnh d liu. Lu rng ngi dng c th thm cc thuc tnh d liu ring ca h vo

    i tng trng hp m khng lm nh hng tnh hp l ca cc phng thc, min l

    khng c trng lp tn, xin nhc li, mt quy tc t tn c th gim bt s au u y.

    Khng c cch ngn gn tham chiu ti thuc tnh d liu (hoc cc phng thc

    khc!) t trong phng thc. iu ny tht ra gip chng ta d c m v khng c s ln

    ln gia bin ni b v bin trng hp.

    Thng s u tin ca phng thc thng c gi l self. y cng ch l mt quy

    c: tn self hon ton khng c ngha c bit trong Python. (Tuy nhin xin nh nu

    bn khng theo quy c th m ca bn s c th tr nn kh c i vi ngi khc, vc th l trnh duyt class c vit da trn nhng quy c nh vy.)

    Bt k i tng hm no m l thuc tnh ca mt class s nh ngha mt phng thc

    cho cc trng hp ca class . Khng nht thit nh ngha hm phi nm trong nhngha class trn vn bn: gn mt i tng hm vo mt bin ni b trong class cng

    c. V d:

    # Function defined outside the classdef f1(self, x, y):

    return min(x, x+y)class C:

    f = f1def g(self):

    return 'hello'h = g

    By gi f, g v h u l thuc tnh ca lp C m tham chiu ti cc i tng hm, v do chng u l phng thc ca cc trng hp ca C -- h hon ton tng ng vi g.

    Ch rng kiu vit ny thng ch lm ngi c cng thm kh hiu m thi.

    Phng thc c th gi phng thc khc thng qua thuc tnh phng thc ca thng sself :

  • 8/6/2019 kienthucpython

    36/56

    class Bag:def __init__(self):

    self.data = []def add(self, x):

    self.data.append(x)def addtwice(self, x):self.add(x)self.add(x)

    Phng thc c th tham chiu ti cc tn ton cc theo cng mt cch nh cc hm

    thng thng. Phm vi ton cc ca mt phng thc l module cha nh ngha class.(Phm vi ton cc khng bao gi l class) Trong khi bn t gp vic s dng d liu ton

    cc trong mt phng thc, c nhng cch dng hon ton chnh ng: v d nh hm v

    module c nhp vo phm vi ton cc c th c s dng bi phng thc, cng nhhm v class c nh ngha trong . Thng thng, class cha cc phng thc ny

    c nh ngha ngay trong phm vi ton cc, v trong phn k y chng ta s thy ti

    sao mt phng thc mun tham chiu ti chnh class ca n.

    [sa]K tha

    D nhin, mt tnh nng ngn ng s khng ng c gi l class nu n khng h tr

    k tha. C php ca mt nh ngha lp con nh sau:

    class DerivedClassName(BaseClassName):...

    Tn BaseClassName phi c nh ngha trong mt phm vi cha nh ngha lp

    con. Thay v tn lp c s, cc biu thc khc cng c cho php. iu ny rt hu ch,

    v d, khi m lp c s c nh ngha trong mt module khc:

    class DerivedClassName(modname.BaseClassName):

    Vic thc thi nh ngha class con tin hnh nh l class c s. Khi mt i tng class

    c to ra, class c s s c nh. N c dng trong vic gii cc tham chiu thuc

  • 8/6/2019 kienthucpython

    37/56

    tnh: nu mt thuc tnh khng c tm thy trong class, vic tm kim s tip tc class c s. Lut ny s c lp li nu class c s k tha t mt class khc.

    Khng c g c bit trong vic to trng hp ca cc class con: DerivedClassName()

    to mt trng hp ca class. Cc tham chiu hm c gii nh sau: thuc tnh lptng ng s c tm, i xung chui cc class c s nu cn, v tham chiu phng

    thc l hp l nu tm thy mt i tng hm.

    class con c th nh ngha li cc phng thc ca class c s. Bi v phng thc

    khng c quyn g c bit khi gi mt phng thc ca cng mt i tng, mtphng thc ca class c s gi mt phng thc khc c nh ngha trong cng class

    c s c th l ang gi mt phng thc do class con nh ngha li. (Ngi dng

    C++ c th hiu l mi phng thc ca Python l virtual.)

    Mt phng thc c nh ngha li trong class con c th mun m rng thay v thay

    th phng thc cng tn ca class c s. C mt cch n gin gi phng thc ca

    class s s: ch vic gi "BaseClassName.methodname(self, arguments)". i khi iuny cng c ch cho ngi dng. (Lu rng on m ch hot ng nu class c s

    c nh ngha hoc nhp trc tip vo phm vi ton cc.)

    [sa]a k tha

    Python cng h tr mt dng a k tha hn ch. Mt nh ngha class vi nhiu lp c

    s c dng sau:

    class DerivedClassName(Base1, Base2, Base3):...

    Lut duy nht cn gii thch ngha l lut gii cc tham chiu thuc tnh ca class.N tun theo lut tm theo chiu su, v tm tri qua phi. Do , nu mt thuc tnh

    khng c tm ra trong DerivedClassName, n s c tm trong Base1, ri ( quy)trong cc lp c s ca Base1, ri ch khi n khng c tm thy, n s c tm trongBase2, v c nh vy.

    (i vi mt s ngi tm theo chiu rng -- tm Base2 v Base3 trc cc lp c s ca

    Base1 -- c v t nhin hn. Nhng, iu ny yu cu bn bit mt thuc tnh no caBase1 c tht s nh ngha trong Base1 hay trong mt trong cc lp c s ca n

  • 8/6/2019 kienthucpython

    38/56

    trc khi bn c th bit c hu qu ca s trng lp tn vi mt thuc tnh ca Base2.Lut tm theo chiu su khng phn bit gia thuc tnh trc tip hay k tha ca Base1.)

    Ai cng bit rng vic dng a k tha ba bi l mt cn c mng cho bo tr, c bit

    l Python da vo quy c trnh trng lp tn. Mt vn c bn vi a k tha lmt lp con ca hai lp m c cng mt lp c s. Mc d d hiu chuyn g xy ra

    trong vn ny (trng hp s c mt bn chp duy nht ca ``cc bin trng hp ca

    cc thuc tnh d liu dng bi lp c s chung), n khng r cho lm nu cc nghany tht s hu ch.

    [sa]Bin ring

    C mt dng h tr nho nh nho cc t nh danh ring ca lp (class-private identifier).

    Cc t nh danh c dng __spam (t nht hai du gch di u, nhiu nht mt du

    dch di cui) c thay th vn bn (textually replace) bng _classname__spam,

    trong classname l tn lp hin ti vi cc gch di u ct b. Vic xo trn tn(mangling) c thc hin m khng quan tm ti v tr c php ca nh danh, cho nn

    n c th c dng nh ngha cc trng hp, bin, phng thc, ring ca lp,hoc cc bin ton cc, v ngay c cc bin ca trng hp, ring vi lp ny trn nhng

    trng hp ca lp khc . Nu tn b xo trn di hn 255 k t th n s b ct i. Bnngoi lp, hoc khi tn lp ch c k t gch di, vic xo trn tn s khng xy ra.

    Xo trn tn nhm cung cp cho cc lp mt cch nh ngha d dng cc bin v phng

    thc ``ring, m khng phi lo v cc bin trng hp c nh ngha bi lp con, hoc

    vic s dng bin trng hp bi m bn ngoi lp. Lu rng vic xo trn tn cthit k ch yu trnh trng lp; ngi quyt tm vn c th truy cp hoc thay i

    bin ring. V iu ny cng c th c ch trong cc trng hp c bit, nh trong trnh

    g ri, v l mt l do ti sao l hng ny vn cha c v.

    Lu rng m truyn vo exec, eval() hoc execfile() khng nhn tn lp ca lp gi l

    tn lp hin ti; iu ny cng ging nh tc dng ca cu lnh global , tc dng ca n

    cng b gii hn m c bin dch cng. Cng gii hn ny cng c p dng vogetattr(), setattr() v delattr(), khi tham chiu __dict__ trc tip.

    [sa]Nhng iu khc

    i khi n tht l hu ch khi c mt kiu d liu ging nh Pascal ``record hoc C

    ``struct, gi gn vi mu d liu vo chung vi nhau. Mt nh ngha lp rng thc hinc vic ny:

    class Employee:

  • 8/6/2019 kienthucpython

    39/56

    passjohn= Employee() # Create an empty employee record# Fill the fields of the record

    john.name = 'John Doe'

    john.dept = 'computer lab'john.salary = 1000

    Vi m Python cn mt kiu d liu tru tng, ta c th thay vo mt lp gi lp cc

    phng thc ca kiu d liu . V d, nu bn c mt hm nh dng mt vi d liutrong mt i tng tp tin, bn c th nh ngha mt lp vi cc phng thc read() v

    readline() ly d liu t mt chui, v truyn vo n mt thng s.

    Cc i tng phng trc trng hp cng c thuc tnh: m.im_self l mt i tngtrng hp vi phng thc m, v m.im_func l i tng hm tng ng vi phng

    thc.

    [sa]Bit l cng l lp

    Cc bit l c nh ngha bi ngi dng cng c nh danh theo lp. Bng cch

    ny, mt h thng phn cp bit l c th c to ra. C hai dng lnh raise mi: raiseClass, instance

    raise instance Trong dng u, instance phi l mt trng hp ca kiu Class hoc l lp

    con ca n. Dng th hai l rt gn ca: raise instance.__class__, instance Lp trong v

    except tng thch vi mt bit l nu n cng lp, hoc l mt lp c s (nhng chiungc li th khng ng -- mt v except dng lp con s khng tng thch vi mt

    bit l lp c s). V d, on m sau s in B, C, D theo th t :

    class B:pass

    class C(B):pass

    class D(C):pass

    for c in [B, C, D]:try:

    raise c()except D:

    print "D"except C:

    print "C"

  • 8/6/2019 kienthucpython

    40/56

    except B:print "B"

    Nu cc v except c t ngc (vi "except B" u), n s in B, B, B -- v exceptph hp u tin c thc thi. Khi mt thng ip li c in, tn lp ca bit l c

    in, theo sau bi du hai chm v mt khong trng, v cui cng l trng hp c

    chuyn thnh chui bng hm c sn str().

    [sa]B lp

    By gi c l bn lu rng hu ht cc i tng cha (container object) c th c

    lp qua bng cu lnh for :

    for element in [1, 2, 3]:

    print elementfor element in (1, 2, 3):

    print elementfor key in {'one':1, 'two':2}:

    print keyfor char in "123":

    print charfor line in open("myfile.txt"):

    print line

    Kiu truy xut ny r rng, xc tch, v tin li. B lp (iterator) c dng khp ni vhp nht Python. ng sau mn nhung, cu lnh for gi iter() trn i tng cha. Hm

    ny tr v mt i tng b lp c nh ngha phng thc next() truy xut v cc

    phn t trong b cha (container). Khi khng cn phn t no, next() nng bit lStopIteration yu cu vng lp for kt thc. V d sau cho thy cch hot ng:

    >>> s = 'abc'>>> it = iter(s)>>> it

    >>> it.next()'a'>>> it.next()'b'>>> it.next()'c'

  • 8/6/2019 kienthucpython

    41/56

    >>> it.next()Traceback (most recent call last):File "", line 1, in ?

    it.next()

    StopIteration

    Chng ta hiu giao thc b lp, nn chng ta c th thm cch thc b lp (iterator

    behavior) vo lp ca chng ta mt cch d dng. nh ngha mt phng thc

    __iter__() tr v mt i tng vi mt phng thc next() . Nu lp c nh nghanext(), th __iter__() ch cn tr v self:

    class Reverse:"Iterator for looping over a sequence backwards"

    def __init__(self, data):self.data = dataself.index = len(data)

    def __iter__(self):return self

    def next(self):if self.index == 0:

    raise StopIterationself.index = self.index - 1return self.data[self.index]

    >>> for char in Reverse('spam'):... print char...ma

    ps

    [sa]B to

    B sinh (generator) l mt cng c n gin v mnh m to cc b lp. Chng c

    vit nh nhng hm thng thng nhng dng cu lnh yield khi no chng mun tr vd liu. Mi ln next() c gi, b sinh tr li ni n thot ra (n nh mi d liu v

    cu lnh c thc thi ln cui). Mt v d cho thy b sinh c th c to ra rt ddng:

    def reverse(data):

  • 8/6/2019 kienthucpython

    42/56

    for index in range(len(data)-1, -1, -1):yield data[index]

    >>> for char in reverse('golf'):... print char

    ...flog

    Bt k vic g c th c thc hin vi b sinh cng c th c thc hin vi cc blp da trn lp nh bn n phn trc. iu khin b sinh nh gn l cc phng

    thc __iter__() v next() c t ng to ra. Mt tnh nng chnh khc l cc bin ni

    b v trng thi thc thi c t ng lu gia cc ln gi. iu ny lm cho hm d vithn v r rng hn l cch s dng bin trng hp nh self.index v self.data. Thm

    vo vic t ng to v lu trng thi chng trnh, khi cc b to kt thc, chng t

    ng nng StopIteration. Cng li, cc tnh nng ny lm cho vic to cc b lp khngc g kh hn l vit mt hm bnh thng.

    [sa]Biu thc b to

    Mt vi b sinh n gin c th c vit mt cch xc tch nh cc biu thc bng cch

    dng mt c php ging nh gp danh sch (list comprehension) nhng vi ngoc trn

    thay v ngoc vung. Cc biu thc ny c thit k cho nhng khi b sinh c sdng ngay lp tc bi hm cha n. Biu thc b sinh gn hn nhng t kh chuyn hn

    l cc nh ngha b sinh y v thng chim t b nh hn l gp danh sch tngng. V d:

    >>> sum(i*i for i in range(10)) # sum of squares285>>> xvec = [10, 20, 30]>>> yvec = [7, 5, 3]>>> sum(x*y for x,y in zip(xvec, yvec)) # dot product

    260>>> from math import pi, sin>>> sine_table = dict((x, sin(x*pi/180)) for x in range(0, 91))>>> unique_words = set(word for line in page for word in line.split())>>> valedictorian = max((student.gpa, student.name) for student in graduates)>>> data = 'golf'>>> list(data[i] for i in range(len(data)-1,-1,-1))

  • 8/6/2019 kienthucpython

    43/56

    ['f', 'l', 'o', 'g']

    Chapter IV: The power of introspection

    Chng ny s ni v sc mnh ca Python . Nh bn bit , mi th trong python lmt i tng , code c tra ca trong cc modules v phng thc trong b nh nh

    mt i tng , ly thng tin v chng, v thao tc trn chng .

    [sa]Diving In

    V d : apihelper.py ((http://diveintopython.org/download/diveintopython examples 5.4.zip )

    def info(object , spacing = 10 , collapse = 1 ):

    """ Print methods and doc string .Takes module , class , list , dictionary , or string ."""methodList = [method for method in dir(object) if callable(getattr(object, method))]

    processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)print "\n".join(["%s %s" %

    (method.ljust(spacing),processFunc(str(getattr(object, method).__doc__)))

    for method in methodList])

    if __name__ == "__main__":print info.__doc__

    Module ny c 1 hm , info . Trong khai bo hm , c ba tham s : object , spacing, and collapse . C 2 tham s c chn la .

    Hm info c nhiu dng doc m t ngn gn mc ch ca hm . Ch rngkhng c gi tr tr v c cp .

    Code trong hm th c tht vo . if __name__ la gt , cho php chng trnh lm mt ci g ha dng hn khi

    chy bi chnh n m khng quan tm n chng trnh s dng module ca chng

    trnh khc . Trong trng hp ny , chng trnh n gin ch in ra chui doc ca hminfo .

  • 8/6/2019 kienthucpython

    44/56

    Hm info c thit k c s dng bi bn , ngi lp trnh , trong khi lmvic vi Python IDE. Chng trnh ly bt k i tng c hm hay phng thc v in

    ra ngoi .V d :

    >>> from apihelper import info>>> li = []>>> info(li)append L.append(object) append object to endcount L.count(value) > integer return number of occurrences of valueextend L.extend(list) extend list by appending list elementsindex L.index(value) > integer return index of first occurrence of valueinsert L.insert(index, object) insert object before index

    pop L.pop([index]) > item remove and return item at index (default last)

    remove L.remove(value) remove first occurrence of valuereverse L.reverse() reverse *IN PLACE*sort L.sort([cmpfunc]) sort *IN PLACE*; if given, cmpfunc(x, y) > 1, 0, 1

    Mc nh output c nh dng c th d dng c . Chui Multi-line doc th chuyn

    thnh mt hng n , nhng la chn ny c th c thay i bi c t s 0 cho tham

    s collapse . Nu nhng tn hm di hn 10 k t . Bn c th c t gi tr ln hn bitham s spacing lm output d c hn

    V d :

    >>> import odbchelper>>> info(odbchelper)

    buildConnectionString Build a connection string from a dictionary Returns string.>>> info(odbchelper, 30)

    buildConnectionString Build a connection string from a dictionary Returns string.>>> info(odbchelper, 30, 0)

    buildConnectionString Build a connection string from a dictionaryReturns string.

    [sa]Using Optional and Named Arguments

    Python cho php tham s hm c gi tr mc nh . Nu hm c gi m khng c tham

    s , tham s s ly gi tr mc nh . Xa hn , tham s c th c c t trong bt c thbt vi vic s dng tn tham s . Th tc lu tr trong SQL Server transact/SQL c th

  • 8/6/2019 kienthucpython

    45/56

    lm iu ny .y l mt v d v info , mt hm vi hai tham s chn :

    def info(object , spacing = 10 , collapse = 1 ) :

    Example Nhng cch gi info hp linfo(odbchelper)info(odbchelper , 12 )info(odbchelper, collapse=0)info(spacing=15, object=odbchelper)

    Vi duy nht mt tham s , spacing v collapse ly gi tr mc nh l 10 v 1 . Vi 2 tham s , collapse ly gi tr mc nh . Do t tn collapse = 0 , nn collapse s c tra tr l 0 , bt chp th t . cn

    spacing c gi tr l mc nh . Ngay c tham s c i hi ( ging object ) c th c t tn , v tham s

    c t tn c th xut hin bt c u .[sa]Using type , str , dir , and Other Built - In Functions

    Python c mt tp hp nh extremely cc hm hu dng . Tt c hm c tch ra vo

    trong cc modules . iu ny l mt quyt nh thit k tnh to , gi core language trnn phng ln ging bt c ngn ng kch bn khc ( cough cough , Visual basic ) .

    [sa]The type function

    Hm type tr v kiu gi tr ca bt k i tng ty thch no . Cc lai kh thi , th c

    lit k trong types module .Vd : Introducing type

    >>> type(1)>>> li = []>>> type(li)>>> import odbchelper>>> type(odbchelper)>>> import types>>> type(odbchelper) == types.ModuleTypeTrue

  • 8/6/2019 kienthucpython

    46/56

    type ly bt c th g , v tr v kiu d liu ca n . Integers , strings , lists ,dictionaries ,...

    type ly mt gi tr variable v tr v kiu d liu ca n . type cng c th lm vic trong nhng modules . bn c th s dng hng trong module types so snh lai i tng .[sa]The str Function

    V d : Introducing str

    >>> str(1)'1'>>> horsemen = ['war', 'pestilence', 'famine']>>> horsemen['war', 'pestilence', 'famine']

    >>> horsemen.append('Powerbuilder')>>> str(horsemen)"['war', 'pestilence', 'famine', 'Powerbuilder']">>> str(odbchelper)"">>> str(None)'None'

    Trong kiu d liu n gin ging s nguyn . Bn s mong ch str lm vic , biv hu nh mi ngn ng c mt hm chuyn s ngun thnh mt chui .

    D sao i na , str lm vic trn bt k i tng ca bt c lai no . y nlm vic trn danh sch .

    str cng lm vic trn modules . Ch rng s biu din chui ca module baogm pathname ca module trn disk .V d : Introducing dir

    >>> li = []>>> dir(li)

    ['append', 'count', 'extend', 'index', 'insert','pop', 'remove', 'reverse', 'sort']>>> d = {}>>> dir(d)['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'setdefault', 'update', 'values']>>> import odbchelper>>> dir(odbchelper)

  • 8/6/2019 kienthucpython

    47/56

    ['__builtins__', '__doc__', '__file__', '__name__', 'buildConnectionString']

    li l mt danh sch , v vt dir(li) tr v mt danh sch ca tt c cc phng thcca danh sch. Ch rng danh sch c tr v cha tn ca phng thc nh lchui , khng phi l phng thc ca chng .

    d l mt th mc, v vy dir(d) tr v mt danh sch ca tn cc phng thc thmc .

    iu ny tht s kch thch . odbchelper l mt module , v vy dir(odbchelper) trv mt danh sch ca tt c cc nh ngha trong module .V d : Introducing callable

    >>> import string

    >>> string.punctuation'!"#$%&\'()*+, ./:;?@[\\]^_`{|}~'>>> string.join>>> callable(string.punctuation)False>>> callable(string.join)True>>> print string.join.__doc__

    join(list [,sep]) > string

    Return a string composed of the words in list, withintervening occurrences of sep. The default separator is asingle space.

    Nhng hm trong module string th phn khng ( mc d nhiu ngi vn cndng hm join ). Nhng module cha nhiu hng c ch ging nh string.punctuation, cha tt c k t chm cu tiu chun .

    string.join l hm dng join mt danh sch cc chui . string.punctuation th khng th c gi ; n l mt chui ( Mt String cphng thc callable ,nhng chui ca chnh n th khng c ) . string.join is callable , n l mt hm ly hai tham s . Bt c i tng callables c th c mt doc string . S dng hm callable trn

    mi mt thuc tnh ca i tng , bn c th xc nh , thuc tnh bn quan tm , vci no m bn mun b qua .

  • 8/6/2019 kienthucpython

    48/56

  • 8/6/2019 kienthucpython

    49/56

    File "", line 1, in ?AttributeError: 'tuple' object has no attribute 'pop'

    iu ny ly mt tham chiu ti phng thc pop trn danh sch . Ch rng iuny khng gi phng thc pop . Nu vy s l li.pop() . y l phng thc cachnh n .

    iu ny cng tr v mt tham chiu ti phng thc pop , tn phng thc cmiu t nh l mt chui , tham s ti hm getattr . getattr l mt hm built in hu

    dng khng th ng ci tr v bt c thuc t nh ca bt c i tng . Trong trnghp ny , i tng l mt danh sch , v thuc t nh l phng thc pop .

    Gi tr tr v ca getattr l mt phng thc . getattr cng lm vic trn t in . Trong l thuyt , getattr s lm vic trn tuples , tr ra tuples khng c phng

    thc , v vy getattr s nm mt ngai l , khng vn g v tn thuc tnh m bna .

    [sa]getattr with Modules

    V d . The getattr Function in apihelper.py

    >>> import odbchelper>>> odbchelper.buildConnectionString>>> getattr(odbchelper, "buildConnectionString")>>> object = odbchelper>>> method = "buildConnectionString">>> getattr(object, method)>>> type(getattr(object, method))

    >>> import types>>> type(getattr(object, method)) == types.FunctionTypeTrue>>> callable(getattr(object, method))True

  • 8/6/2019 kienthucpython

    50/56

    iu ny tr v mt tham chiu ti hm buildConnectionString trong moduleodbchelper

    S dng getattr, bn c th tham chiu ti hm . getattr(object,"attribute") thtng ng vi object.attribute. Nu i tng c mt module , th thuc tnh c th

    c inh ngha bt k trong module : a function, class, or global variable. V iu ny l ci g bn tht s dng trong hm info. i tng c truyn vo

    trong hm nh tham s . Phng thc l mt chui , th cng tn vi phng thc hayhm .

    method is a string which is the name of a method or function.

    Trong trng hp ny , phng thc l tn ca mt hm.[sa]getattr As a Dispatcher

    V d : Creating a Dispatcher with getattr

    import statsoutdef output(data, format="text"):output_function = getattr(statsout, "output_%s" % format)return output_function(data)

    Hm output i hi mt tham s ( data ) , v mt tham s chon la ( format ). Nuformat th khng c truyn , n s mc nh l text .

    Gi tr l mt tham chiu to hm thch hp t module statsout.V d : getattr Default Values

    import statsoutdef output(data, format="text"):

    output_function = getattr(statsout, "output_%s" % format, statsout.output_text)return output_function(data)

    Gi Hm ny is m bo lm vic , bi v bn thm ba tham s gi getattr . Tham s th ba l mt gi tr mc nh v c tr v . Nu thuc tnh hay

    phng thc c t bi tham s th hai th khng tm thy .[sa]Filtering List

    Python c kh nng nh x danh sch vo trong danh sch khc .

  • 8/6/2019 kienthucpython

    51/56

    y l c php lc danh sch : [mapping expression for element in source list iffilter expression]

    V d : Introducing List Filtering

    >>> li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]>>> [elem for elem in li if len(elem) > 1]['mpilgrim', 'foo']>>> [elem for elem in li if elem != "b"]['a', 'mpilgrim', 'foo', 'c', 'd', 'd']>>> [elem for elem in li if li.count(elem) == 1]['a', 'mpilgrim', 'foo', 'c']

    Biu thc nh x y th n gin ( n ch tr v gi tr ca mi phn t ), v vynn tp trung vo biu thc lc ( filter ). Trong khi vng lp Python thng quan danhsch , n chy qua mi phn t trong mng v a vo biu thc lc. Nu biu thclc l true , phn t c nh x v kt qu ca biu thc nh x l danh sch .

    [sa]The Peculiar Nature of and and or

    Trong Python , and va or and c biu din boolean lun l , nhng chng khng tr v

    gi tr boolean . Thc t , chng tr v mt trong nhng gi tr thc m chng ang so

    snh .V d : Introducing and

    >>> 'a' and 'b''b'>>> and 'b'

    >>> 'a' and 'b' and 'c''c'

    Khi dng and , gi tr c c lng trong mt ng cnh lun l ( in a booleancontext ) t tri sang phi . 0,, [], (), {}, v None l false trong ng cnh boolean ;mi th khc u l true . Mc nh , v d classes l true trong boolean context ,nhng bn khng th nh ngha phng thc c t trong lp ca anh lm v dcho false

    Nu bt k gi tr l false trong boolean context , v tr v gi tr u tin l false .Trong trng hp ny , l gi tr false u tin .

  • 8/6/2019 kienthucpython

    52/56

    Tt c gi tr l true , v vy tr v gi tr cui l , 'c'.V d : Introducing or

    >>> 'a' or 'b''a'>>> or 'b''b'>>> or [] or {}{}>>> def sidefx():... print "in sidefx()"... return 1>>> 'a' or sidefx()'a'

    Khi dng or , gi tr th c lng trong boolean context t tri sang phi . Nu btc gi tr l true hoc tr v gi tri lp tc . Trong trng hp ny , 'a' l gi tr trueu tin .

    Ta c l false, ri 'b' l true, v tr v 'b'. Nu tt c gi tr l false hoc tr v gi tr cui . Ta c l false , ri [] l false, ri

    {} cng l false , s tr v gi tr {} .

    Ch rng or c lng cc gi tr n khi or tm thy mt ci l true trongboolean context, v sau n b qu v ngh . iu ny quan trong nu vi gi tr cth c hiu ng bn cnh . sidefx hm th khng bao gi c gi , bi v c lng'a' is true, v tr v 'a'lp tc.

    [sa]Using the andor Trick

    V d : Introducing the and or Trick

    >>> a = "first">>> b = "second">>> 1 and a or b

    'first'>>> 0 and a or b'second'

    C php ny ging biu thc " bool ? a : b " trong C . Tan b biu thc c clng t tri sang phi , v vy and c mc inh u tin .

  • 8/6/2019 kienthucpython

    53/56

    0 v 'first' c lng l false , v sau 0 or 'second' c lng 'second'.

    V d : When the and or Trick Fails

    >>> a = "">>> b = "second">>> 1 and a or b'second'

    a l mt chui rng , Python cn nhc false trong mt boolean context, 1 v clng, v

    sau hoc 'second' mc nh 'second'.

    Vi d : Using the and or Trick Safely

    >>> a = "">>> b = "second">>> (1 and [a] or [b])[0]

    Khi [a] khng l mt danh sch rng , n th khng bao gi false . Ngay c nu al 0 hoc vi gi tr false khc , danh sch [a] l true bi v n c mt phn t .[sa]Using lambda functions

    Python h tr mt c php quan trng m bn nh ngha mt hng , hm nh trn fly .

    c mn t Lisp, Nhng ci ny c gi l hm lambda m c th c dng bt c

    u khi mt hm c i hi .V d : Introducing lambda Functions

    >>> def f(x):... return x*2

    ...>>> f(3)6>>> g = lambda x: x*2>>> g(3)6

  • 8/6/2019 kienthucpython

    54/56

    >>> (lambda x: x*2)(3)

    y l mt hm lambda , trng gin nh mt hm thng thng trn n . Ch cphp tm tt y : Khng c du ngoc n quanh danh sch tham s , v t khareturn b qua . D vy , hm khng tn , nhng n c th c gi thng qua bin nassign.

    Bn c th s dng hm lambda khng cn assign mt bin .[sa]RealWorld lambda Functions

    Here are the lambda functions in apihelper.py:

    processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)

    V d : split With No Arguments

    >>> s = "this is\na\ttest">>> print sthis isa test>>> print s.split()['this', 'is', 'a', 'test']>>> print " ".join(s.split())

    'this is a test'

    y l mt chui nhiu dng , c nh ngha bi k t escape thay v ba ungoc

    split khng c bt c tham s . V vy tch da trn ' ', '\n', '\t' . Bn c th s dng chui " " ni chui va c tch .

    Hm info tht s lm vi 3 hm lambda , splits v and-or tricks ?

    processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)

    [sa]Putting it all together

    This is the meat of apihelper.py:

  • 8/6/2019 kienthucpython

    55/56

    print "\n".join(["%s %s" %(method.ljust(spacing),processFunc(str(getattr(object, method).__doc__)))for method in methodList])

    V d : Getting a doc string Dynamically

    >>> import odbchelper>>> object = odbchelper>>> method = 'buildConnectionString'>>> getattr(object, method)

    >>> print getattr(object, method).__doc__Build a connection string from a dictionary of parameters.Returns string.

    Trong hm info , object l i tng bn ang ly s gip , truyn trong nhmt tham s .

    Trong khi bn ang lp xuyn qua danh sch , phng thc l tn ca phng thchin ti .

    S dng hm getattr , bn dang ly mt tham chiu ti phng thc ca i tngtrong module .

    By gi l phng thc in doc string th d dng .

    V d. Introducing ljust

    >>> s = 'buildConnectionString'>>> s.ljust(30)

    'buildConnectionString '>>> s.ljust(20)'buildConnectionString'

    ljust thm vo chui vi khang trng vi di c truyn .

  • 8/6/2019 kienthucpython

    56/56

    Nu di c a vo th nh hn di ca chui , ljust s n gin tr vchui khng b thay i .

    V d : Printing a List

    >>> li = ['a', 'b', 'c']>>> print "\n".join(li)a

    bc

    y l cch hu dng g ri vi trick . V trong python , bn lun lun lmvic vi danh sch .

    By gi bng c th hiu dng code sau .

    print "\n".join(["%s %s" %(method.ljust(spacing),processFunc(str(getattr(object, method).__doc__)))for method in methodList])