kienthucpython
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])