Giới thiệu ngôn ngữ lập trình Python

Embed Size (px)

Citation preview

  • Gii thiu ngn ng lp trnh Python

    ng Nguyn [email protected]

    Ngy 16 thng 10 nm 2014

    Mc lc

    1 M u 2

    2 Gii thiu Python 2

    3 Cch thc ci t v s dng Python 43.1 Cch ci t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43.2 Cch thc s dng Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    4 Python c bn 54.1 C php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54.2 Cc ton t c bn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54.3 Cc kiu d liu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64.4 Cu trc iu khin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94.5 Hm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104.6 File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.7 Lp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.8 Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144.9 Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    5 Cc gi Python cho khoa hc v k thut 185.1 SciPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185.2 NumPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185.3 Matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215.4 IPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    6 Python v C++ 246.1 Nhng C++ vo Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246.2 Gi module Python trong C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    7 Python v ROOT 277.1 PyROOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287.2 S dng Python trong ROOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    Ti liu tham kho 29

    1

  • ng Nguyn Phng Ti liu ni b NMTP

    1 M u

    Trong khoa hc k thut, cc ngn ng lp trnh bc trung nh C/C++, Fortran, Assembler,...c s dng rng ri v l nn tng xy dng nn cc gi (package) x l s liu cng nhtnh ton s. Tuy nhin, mt trong nhng nhc im ca cc ngn ng ny l kh phc tp,i hi ngi dng phi b nhiu thi gian v cng sc nm vng ngn ng.

    Trong lnh vc thc nghim ht nhn v ht c bn, phn ln cc thao tc x l s liu ucn phi c thc hin bng my tnh, do i hi ngi lm thc nghim phi c kin thcv lp trnh. Hin nay, mt trong nhng xu hng ang c ph bin trong lp trnh x l sliu, c bit trong vic xy dng cc framework, l kt hp cc ngn ng bc trung vi mtngn ng bc cao hn (cc ngn ng th h th 4 v 5). Trong vai tr ca cc ngn ng bccao l xy dng nn cc macro hoc cc giao din tng tc, cn cc tc v c th s do ccngn ng bc thp hn m nhim. u im d nhn thy ca cc ngn ng bc cao l c cutrc r rng, sng sa, do s d s dng hn i vi nhng nh khoa hc thc nghim vnkhng phi l cc lp trnh vin chuyn nghip. iu ny s gip h gim bt lng cng viclp trnh c th tp trung vo cc vn ct li khc trong x l s liu cng nh thc hincc tnh ton.

    Mt trong nhng ngn ng bc cao c ng dng rng ri trong thc nghim ht nhn v htc bn hin nay chnh l ngn ng lp trnh Python. y l mt trong nhng ngn ng d hc,c cu trc sng sa, c th chy trn nn tng nhiu h iu hnh khc nhau v c bit lmin ph. Nu cc bn tng bit qua chng trnh x l s liu ROOT hoc chng trnhm phng GEANT4, c hai chng trnh ny u c cc module dnh ring nhm gip cho vickt ni vi cc chng trnh Python c d dng hn1. Trong vt l nng lng cao, Pythoncng thng c s dng kt hp vi ngn ng C++ trong lp trnh x l s liu cng nhtnh ton l thuyt.

    Ti liu ny nhm gii thiu cho cc bn sinh vin v ngn ng lp trnh Python v ng dngca n trong lnh vc khoa hc k thut ni chung v vt l ni ring. Ba phn u ca ti liu(Phn 2, 3, 4) cung cp cc kin thc c bn v ngn ng lp trnh Python. Phn 5 gii thiuti cc bn mt s gi ng dng (tnh ton s, ma trn, v th,...) ca Python trong khoahc k thut. Cui cng s l phn hng dn cch nhng cc gi chng trnh ca C++ (Phn6) v ROOT (Phn 7) vo trong Python. Hi vng cc kin thc cung cp trong ti liu ny sgip ch cho cc bn trong vic tm hiu ngn ng Python v ng dng n vo trong cng vicca mnh.

    2 Gii thiu Python

    Python l mt ngn ng lp trnh thng dch (interpreted language) do Guido van Rossum tora nm 1990. Python c pht trin trong mt d n m ngun m, do t chc phi li nhunPython Software Foundation qun l. Tn gi Python c Van Rossum t bt ngun t mtseries hi kch Monty Pythons Flying Circus ca i truyn hnh BBC c pht trong nhngnm 1970.

    Ban u, ngn ng Python c pht trin chy trn nn Unix, nhng sau n m rngsang cc h iu hnh khc nh MacOS, Windows,... y l mt ngn ng d hc, c nhngcu trc d liu cp cao hiu qu v hng lp trnh i tng n gin. ch tng tc,trnh thng dch Python tng t nh cc shell2 trong cc h iu hnh h Unix, ta cth nhp vo tng biu thc ri g Enter, cc kt qu thc thi s c hin th ngay lp tc

    1Cc module l PyROOT (http://root.cern.ch/drupal/content/pyroot) v Geant4Py (http://geant4.cern.ch/UserDocumentation/UsersGuides/ForApplicationDeveloper/html/apas07.html)

    2Xem thm trong ti liu Nhp mn h iu hnh Linux (http://goo.gl/11gQjF)

    2

  • ng Nguyn Phng Ti liu ni b NMTP

    (khc vi cc ngn ng nh C/C++ v Fortran i hi phi bin dch trc khi thc thi chngtrnh). c im ny rt hu ch cho ngi mi hc, gip h tm hiu cch thc thc thi cachng trnh tng bc mt, hoc cc lp trnh vin chy th m lnh trong sut qu trnhpht trin phn mm.

    Mt s c im chnh ca ngn ng Python gm c

    Ngn ng thng dch: bin dch chng trnh ngun theo tng phn on hoc tng culnh, sau thc thi cc on m c bin dch, chng trnh ch va to ra skhng c lu li. Do n c u im tit kim thi gian pht trin ng dng v khngcn phi thc hin bin dch v lin kt.

    Ngn ng kiu ng3: ngn ng m cc kiu ch c gn ln cc d liu trong thi gianchng trnh c thc thi. Chng trnh khng kim tra cc rng buc v kiu d liuti thi im dch, m l ti thi im thc thi. Ngoi ra, khi s dng Python ta khngcn phi khai bo bin, bin c xem l khai bo nu n c gn mt gi tr ln utin. Cn c vo mi ln gn, Python s t ng xc nh kiu d liu ca bin.

    C ch cp pht b nh t ng : khng khi to gi tr ban u cho bin.

    Kh nng m rng : trnh thng dch Python c th c m rng d dng vi nhng chcnng v kiu d liu c vit trong C hoc C++ (hoc ngn ng no c th gi ct C). Ta cng c th m rng chc nng ca trnh thng dch, hoc lin kt cc chngtrnh Python vi cc th vin ch dng nh phn.

    Tuy nhin, cng nh tt c cc ngn ng lp trnh khc, Python khng phi l khng c nhngkhuyt im

    Python vn khng phi l ngn ng c xy dng nn phc v cho mc ch khoahc k thut do cc th vin ca n khng so snh c vi cc ngn ng chuyn sunh Matlab/Octave, Mathematica,...

    Tc thc thi chng trnh khng nhanh bng nhng ngn ng khc nh C/C++,Fortran,...

    Cc nhnh chnh ca ngn ng Python

    CPython: c xy dng nn t ngn ng C bi Guido van Rossum

    Jython: Python cho Java

    IronPython: Python cho Microsoft .NET

    PyMite: Python cho cc vi x l (microprocessor)

    Ngoi ra, Python c cc th vin phc v cho khoa hc k thut chng hn nh

    NumPy: y l th vin c vit bng cc ngn ng lp trnh cp thp nh C v Fortran(ch yu phc v cc cc tnh ton ma trn), c xy dng da trn nn tng cc thvin nh BLAS, LAPACK.

    SciPy: th vin ny phc v cho cc tnh ton tch phn s, gii h thng phng trnhvi phn, tnh ton ti u,...

    Mathplotlib: cng c v th tng ng vi b cng c trong Matlab.

    Multi-processing: gi tnh ton song song.3Ngc li vi ngn ng kiu ng l ngn ng kiu tnh, l ngn ng m kiu d liu phi c gn trc

    khi chng trnh thc thi, chng hn nh ngn ng C/C++.

    3

  • ng Nguyn Phng Ti liu ni b NMTP

    3 Cch thc ci t v s dng Python

    3.1 Cch ci t

    i vi h iu hnh Windows: ta ci t Python bng cch sau

    Ti file ci t Python cho h iu hnh Windows (c ui .msi) ti http://www.python.org/downloads/windows/

    Double click vo file v ci t theo hng dn

    i vi cc h iu hnh Linux: ta ci t Python bng cch s dng cc trnh qun lgi (package manager) ci t cc gi python2 v python2-devel (i vi Red Hat) haypython2.x v python2.x-dev (i vi Debian).

    3.2 Cch thc s dng Python

    chy trnh thng dch Python, ta g lnh

    python

    Mt giao din tng tc s hin ra vi du nhc chnh (primary prompt) c dng >>>, v dnh

    $ pythonPython 2.7.1+ (r271 :86832 , Apr 11 2011, 18:05:24)[GCC 4.5.2] on linux2Type "help", "copyright", "credits" or "license" for more information.>>>

    Du nhc th cp (secondary prompt) c biu din bng du . . .

    $ pythonPython 2.7.1+ (r271 :86832 , Apr 11 2011, 18:05:24)[GCC 4.5.2] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> if 1:... print "Hello world"...Hello world>>>

    thot khi giao din tng tc ca Python ta s dng t hp phm tt Ctrl+D trong Linuxhay Ctrl+Z trong Windows, hoc g lnh

    exit()

    chy mt file script vit bng ngn ng Python (c ui .py), ta g

    python script.py

    Ngoi ra ta cng c th chy file script trc tip t shell. Gi s ta c mt file script c ni dung

    #!/usr/bin/env pythonprint "Hello world"

    Tip theo ta gn quyn thc thi v chy file4

    4Xem cc hng dn v gn quyn trong Nhp mn h iu hnh Linux

    4

  • ng Nguyn Phng Ti liu ni b NMTP

    $ chmod +x hello.py$ ./ hello.pyHello world

    4 Python c bn

    4.1 C php

    Mt s quy tc c php ca Python:

    Ngn ng Python c phn bit ch hoa v ch thng.

    K t # c tc dng comment tt c ni dung trn mt dng nm sau n.

    Mt cu lnh kt thc bng vic xung dng.

    Nhiu cu lnh trn cng 1 dng c tch nhau ra bi k t ;

    Mt khi m lnh c xc nh bi tht vo bn trong so vi u hng.

    K t \ c tc dng ni tip vi dng di n. Cc cp ngoc c tc dng bao ton b ni dung bn trong n, cho d c vit trn

    nhiu dng khc nhau.

    4.2 Cc ton t c bn

    Cng (+), tr (), nhn (*), chia (/), chia ly d (%) v ly tha (**) Cc ton t gn v tng gim: =, +=, =, *=, /= (tng t nh C++) Cc ton t lun l: and, or, not

    Cc ton t so snh: ==, !=, = (c bit c th so snh lin tc, vd:X < Y < Z s tr v kt qu l True nu Y nm gia X v Z)

    Cc ton t thao tc trn bit: |, , &, , So snh con tr (pointer): is, is not

    Kim tra phn t thuc tp hp: in, not in

    V d:

    >>> 2**38>>> x = 1; x+=3; x4>>> [1,2] < [1,2,3]True>>> 'a' in [1, 'a', "hello"]True

    Lu khi dng ton t is

    >>> test = "h" + "i">>> test is "hi"False>>> test == "hi"True

    5

  • ng Nguyn Phng Ti liu ni b NMTP

    # Khong khuyen khich su dung "is" de so sanh noi dung nhu cach duoi day>>> test = "hi">>> test is "hi"True

    4.3 Cc kiu d liu

    Python khng kim tra kiu d liu ti thi im dch m l ti thi im thc thi, cch thcny c gi l duck typing hay latent typing (t ng xc nh kiu). Khi thc thi, nu mtthao tc trn mt i tng b tht bi c ngha l i tng khng c s dng kiu thchhp.

    Bn cnh , ta cng khng cn phi khai bo bin trc khi s dng, bin c xem l khaibo nu n c gn mt gi tr ln u tin. Cn c vo gi tr gn, Python s t ng xcnh kiu d liu ca bin. Cc kiu d liu thng dng trong Python gm c:

    int kiu s nguyn (t nht 32bit)

    float kiu s thc (tng ng kiu double trong C++)

    complex kiu s phc, phn o c vit vi hu t j hoc J (vd: 1+2j)

    bool kiu boolean (True hoc False)

    str chui k t (hng, tng ng const char* trong C++)

    list kiu danh sch (tng ng std::vector trong C++)

    tuple tng t kiu list nhng cc phn t khng thay i c (hng)

    dict kiu map, l cp cc d liu c gn theo kiu t kha: gi tr (tng ng std::maptrong C++)

    set kiu tp hp, cc phn t khng sp xp theo th t

    List Kiu danh sch (list) cng tng t nh kiu array trong C++.

    Khai bo list

    v = [] # list rongv = list() # list rongv = [1, 2, 4, 5]v = ['a', 'b', 'c']v = range (4,10,2) # tra ve ket qua list tu 4 den 10, buoc nhay 2;

    tuong duong v = [ 4,6,8 ]v = [4, 2.5, 'Hi', [1,3,5]] # list hon hop

    Thm phn t mi vo list

    >>> v = [1,2,3]>>> v.append (4)>>> print v[1, 2, 3, 4]

    Xa phn t t list

    >>> v.remove (2)>>> v[1, 3, 4]

    6

  • ng Nguyn Phng Ti liu ni b NMTP

    >>> del v[0]>>> v[3, 4]

    Ni list

    >>> v += ['a', 'b']>>> v[3, 4, 'a', 'b']

    Xem kch thc

    >>> len(v)4

    Truy cp phn t trong list

    >>> v[0]3>>> v[0] = 'c' # gan gia tri cho phan tu dau tien>>> v['c', 4, 'a', 'b']>>> v[-1] # phan tu cuoi cung'b'>>> v[1:3] # cac phan tu co chi so >= 1 va < 3[4, 'a']>>> v['c', 4, 'a', 'b']>>> v[1:2] # cac phan tu co chi so >= 1 va < 2[4]>>> v[0:2] # cac phan tu co chi so >= 0 va < 2['c', 4]

    Tuple Kiu tuple cng tng t nh list nhng cc phn t trong dy khng thay i c, nh ngha tuple ta s dng cp ngoc trn () thay cho cp ngoc vung [].

    Khai bo tuple

    >>> x = (1,2,'abc')>>> x = () # tuple rong

    In ra cc phn t

    >>> print x[1]2

    In ra di

    >>> print len(x)3

    To tuple bng cch kt ni cc list vi nhau

    >>> zip([1,2],['a','b'] ,[168 ,168])[(1, 'a', 168), (2, 'b', 168)]

    7

  • ng Nguyn Phng Ti liu ni b NMTP

    String Kiu chui k t (string) c th c xem nh l kiu tuple ca cc k t, tuy nhinc nhiu tnh nng hn mt tuple thng thng.

    Khai bo chui: dng cc cp nhy n , nhy kp hoc ba nhy kp lin tip trong trng hp khai bo chui trn nhiu dng

    >>> a = 'Hello'>>> b = "How are you?">>> c = """Hello ,... how are you?"""

    Ni chui

    >>> d = a + "!">>> d'Hello!'>>> print dHello!

    Truy cp k t trong chui

    >>> d[0]'H'>>> d[4]'o'

    Chui con

    >>> d[1:3]'el'>>> d[-2:]'o!'

    Tm kim

    >>> d.find('e')1>>> d.find('ll') # tra ve vi tri cua phan tu dau tien cua chuoi

    duoc tim2

    In gi tr ra chui (tng t hm printf trong C)

    >>> print "%s: %5.2f" % ('Ket qua', 2.3)Ket qua: 2.30

    Lp chui

    >>> 10 * 'hi ''hi hi hi hi hi hi hi hi hi hi '

    Phn chia chui (mc nh s dng khong trng phn chia)

    >>> e = c.split()>>> e['Hello ,', 'how', 'are', 'you?']

    Kt ni mt list cc chui li bng 1 (hay nhiu) k t kt ni

    8

  • ng Nguyn Phng Ti liu ni b NMTP

    >>> '--'.join(e)'Hello ,--how --are --you?'

    Dict Kiu dict c th hiu nm na nh l kiu list vi cc ch s khng phi l s nguyn.

    Khai bo

    k = {} # dict rongk = dict() # dict rongk = {'a' : 2, 'b' : 5}

    Gn gi tr

    >>> k = {'a' : 2, 'b' : 5}>>> k['a']2>>> k['a'] = 1>>> k['a']1

    Thm phn t

    >>> k['c'] = -2>>> k{'a': 1, 'c': -2, 'b': 5}>>> k.update( {'d' : 3} )>>> k{'a': 1, 'c': -2, 'b': 5, 'd': 3}

    Xa phn t

    >>> del k['a']>>> k{'c': -2, 'b': 5, 'd': 3}

    Truy cp thng tin

    >>> k.keys()['c', 'b', 'd']>>> k.values ()[-2, 5, 3]>>> k.items()[('c', -2), ('b', 5), ('d', 3)]

    Kim tra t kha

    >>> k.get('c', 10) # tra ve 10 neu 'c' khong co trong k1>>> k.get('a', 10) # tra ve 10 neu 'a' khong co trong k10

    4.4 Cu trc iu khin

    Tng t nh cc ngn ng lp trnh khc, Python cng c cc cu trc iu kin (if-then-else)v cc cu trc lp (for, while)

    9

  • ng Nguyn Phng Ti liu ni b NMTP

    If-then-else

    >>> x = int(raw_input("Please enter an integer: "))Please enter an integer: 42>>> if x < 0:... x = 0... print 'Negative changed to zero'... elif x == 0:... print 'Zero'... elif x == 1:... print 'Single '... else:... print 'More'...More

    Vng lp for

    >>> words = ['cat', 'window ', 'defenestrate ']>>> for w in words:... print w, len(w) # thut vao trong mot khoang...cat 3window 6defenestrate 12>>> for x in range (0,3):... print "%d" % x # thut vao trong mot khoang...012

    Vng lp while

    >>> count = 0>>> while (count < 9):... print 'The count is:', count... count = count + 1...print "Good bye!"

    Ta c th s dng break v continue ngt hoc thot khi cc cu trc iu khin(tng t nh C).

    Ngoi ra, trong Python cn c 1 c php c bit (list comprehension) cho php thao tctrn ton b danh sch m khng cn vit r vng lp

    >>> x = [1,2,3,4]>>> y = [xi**2 for xi in x]>>> print y[1, 4, 9, 16]

    4.5 Hm

    nh ngha hm: s dng t kha def

    def ():"thong tin ve ham"

    10

  • ng Nguyn Phng Ti liu ni b NMTP

    ...return [ket qua]

    V d:

    # Dinh nghia hamdef printme( str ):

    "This prints a passed string into this function"print str;return;

    # Goi hamprintme ();

    Hm tr v nhiu gi tr

    >>> def powers(n):... return n, n**2, n**3...>>> v = powers (2)>>> v(2, 4, 8)>>> v1,v2,v3 = powers (2)>>> v12>>> v24>>> v38

    Hm khng tr v gi tr

    def returns_nothing ():pass

    def returns_none ():return None

    def also_returns_none ():return

    Mt s cng c lp trnh hng hm

    filter(hm, dy) tr v mt dy cha cc phn t t dy m hm c gi tr ng. Nudy l mt string hoc tuple, th kt qu tr v s c cng kiu; ngc li, s lun lun lmt list.

    >>> def f(x): return x % 2 != 0 and x % 3 != 0...>>> filter(f, range(2, 25))[5, 7, 11, 13, 17, 19, 23]

    map(hm, dy) gi hm vi mi phn t trong dy v tr v mt danh sch cc gi trtr v.

    >>> def cube(x): return x*x*x...

    11

  • ng Nguyn Phng Ti liu ni b NMTP

    >>> map(cube , range(1, 11))[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

    reduce(hm, dy) tr v gi tr duy nht c to ra t vic gi hm vi thng s l haiphn t u ca dy, ri sau vi gi tr tr v ny vi phn t k, v c th.

    >>> def add(x,y): return x+y...>>> reduce(add , range(1, 11)) # tinh tong cac so tu 1 den 1055

    4.6 File

    M file

    >>> f=open('/directory/file', 'r')

    Cc option cho lnh m file gm c: r (ch c), w (ch ghi), a (thm vo cui), r+ (cv ghi). Ngoi ra, trong Windows c phn bit gia file dng vn bn (text) v nh phn(binary), nu ta mun m cc file ch nh phn th cn thm k t b vo sau (vd: rb,wb, r+b,...).

    c ni dung file

    >>> f.read(size)

    size quy nh kch thc (tnh theo byte) ca ni dung c c, trong trng hp khngc khai bo size ton b ni dung tp tin s c c. Nu n cui tp tin, f.read()s tr v mt chui rng ( ).

    c tng dng ni dung file

    >>> f.readline ()

    K t dng mi (\n) c gi li cui chui, v s ch b b qua dng cui ca tp tinnu tp tin khng kt thc bng mt dng mi.

    Mt cch khc c cc dng l lp qua i tng file

    >>> for line in f:... print line

    Ghi ni dung ra file

    >>> f.write(string)

    Trong trng hp ni dung ghi khng phi l chui, n s cn c chuyn thnh mtchui trc c ghi

    >>> value = ('the answer ', 42)>>> s = str(value)>>> f.write(s)

    Tm v di chuyn n v tr trong file

    >>> f.tell() # cho biet vi tri hien tai trong file>>> f.seek (5) # di chuyen den vi tri byte thu 6 tinh tu dau file>>> f.seek(3, 0) # di chuyen den vi tri byte thu 3 tinh tu dau

    file

    12

  • ng Nguyn Phng Ti liu ni b NMTP

    >>> f.seek(-3, 1) # di chuyen den vi tri byte thu 3 truoc vi trihien tai

    >>> f.seek(-3, 2) # di chuyen den vi tri byte thu 3 tinh tu cuoifile

    ng file

    >>> f.close()

    4.7 Lp

    nh ngha lp: s dng t kha class

    class ClassName:"thong tin ve lop"...

    V d:

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

    return 'hello world '

    Khi nh ngha mt phng thc (hm) thuc lp, ta thng s dng t kha self nhl tham s u tin. Tuy nhin khi ta gi phng thc ca lp ny t bn ngai, ta khngcn c t bt c th g cho tham s self, Python s t ng thm tham chiu self.iu ny cng tng t nh con tr this trong C++.

    Khai bo mt bin thuc lp

    x = MyClass ()

    Hm khi to lp phi c tn l __init__(), hm ny s t ng kch hot khi khai bomt bin mi thuc lp

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

    Hm __del__(), hm ny ch c thc hin khi vic thu gom rc trong b nh hontt, ngha l khi ton b cc bin tr ti i tng b mt.

    Theo quy c thng dng trong Python, nu mt phn t thuc lp c bt u bi kt _, phn t s c thuc tnh private (cc b).

    Nu c bt u bi __ phn t s c thuc tnh public.

    13

  • ng Nguyn Phng Ti liu ni b NMTP

    4.8 Module

    Mt module l mt file cha cc nh ngha (cc lp, cc hm,...) v cc cu lnh ca Python,v s ch c thc thi ln u khi c nhp u . Bt k file no cng phn m rng .pycng u l module.

    V d ta c mt module tn fibo.py cha hm tnh dy s Fibonacci

    def fib(n): # xuat day so Fibonacci toi gia tri na, b = 0, 1while b < n:

    print b,a, b = b, a+b

    Khi mt module c nhp (import), trnh thng dch s tm mt tn ca module trong thmc hin ti, ri trong danh sch cc th mc c ch nh bi bin mi trng PYTHONPATH5.Bin ny c cng c php nh l bin mi trng PATH, cng cha mt danh sch tn cc thmc. Khi PYTHONPATH cha c thit lp, hoc khi file module khng c tm thy, vic tmkim s tip tc tm trong ng dn mc nh ty theo khi ci Python; trn Unix, ng dnny thng l /usr/local/lib/python.

    Lnh import l lnh dng nhp ni dung ca mt module vo trong module khc. Cphp ca lnh nh sau

    import filename

    B dch lnh Python khi thy lnh import filename s i tm ni dung ca file filename.py,tt c cc m lnh c trong filename.py nu c th chy c u s c thc hin. Thngthng ta hay tt c cc lnh import trn u ca file.

    V d ta mun nhp ni dung ca file fibo.py, ta g

    >>> import fibo

    Vic ny s khng nhp trc tip cc tn hm nh ngha trong fibo.py, n ch nhp tn modulem thi. Sau ta s dng tn module c nhp ny truy cp cc hm trong n, chnghn nh

    >>> fibo.fib (1000)1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

    Trong trng hp ta mun dng mt hm fib mt cch thng xuyn, ta c th gn n vomt bin cc b

    >>> fib = fibo.fib>>> fib (1000)1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

    Mt cch khc c th gi thng tn hm fib m khng cn thng qua module fibo l sdng cu trc from ... import ...

    >>> from fibo import fib>>> fib (1000)1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

    5 thm ng dn cho bin mi trng PYTHONPATH ta c th s dng lnh export hay setenvexport PYTHONPATH=$PYTHONPATH:tenduongdan

    setenv PYTHONPATH $PYTHONPATH:tenduongdan

    14

  • ng Nguyn Phng Ti liu ni b NMTP

    Bng cch ny ta phi g t hn, bi thay v fibo.fib, ta ch g fib, lm cho m lnh ri.Nhng trong mt s trng hp dng cch ny s khng an ton (chng hn nh cc nh nghac cng tn nm trong cc module khc nhau), c bit trong trng hp cc chng trnh ln.

    Ta cng c th nhp nhiu nh ngha t 1 module bng cch

    from fibo import fib , fib1 , fib2

    hoc

    from fibo import *

    s nhp tt c mi th trong fibo.py, tr nhng nh ngha bt u bng du gch chn _.

    Tn ca module c th c truy cp qua bin ton cc __name__

    >>> fibo.__name__'fibo'

    i vi trnh thng dch th chng trnh tng tc c gi l __main__, cn module cnhp vo c tn __name__. Do nu ta mun kiu tra mt module c phi c chy khnghay l c nhp t cu lnh khc, ta phi kim tra xem __name__ c phi l __main__ haykhng.

    Nhng lu khi thao tc vi module

    Cc module cng l cc i tng (object), chng c th c s dng nh cc tham scho cc hm, tr li gi tr t hm,... Tn ca cc bin, hm, lp,... ca mi module cngl cc thuc tnh ca module .

    Cc dng lnh t do (khng thuc hm hay lp no) trong module s c thc hinngay khi module c nhp.

    Mt module c th gi cc module khc, thng thng ta hay tt c cc lnh import u module.

    Python khng thc s h tr cc bin ton cc nh C/C++. Mt module c nhp caPython s khng c quyn truy cp ti cc bin ton cc trong module ra lnh nhp. Mimodule c mt bng k hiu ring ca n v c dng nh bng ton cc i vi mihm c nh ngha trong module . Ngi dng c th s dng cc bin ton cc trongmodule m khng phi lo lng v vic trng lp vi cc bin ton cc ca module khc.

    Python khng c dng che giu d liu no tng t nh private hay protected trong C++.Tuy vy n cng h tr mt phn vic kiu ny.

    Nu ta thm vo mt du gch _ pha trc tn bin trong mt module th bin skhng c nhp trong trng hp ta dng lnh from ... import ...

    Cc file c bin dch trong Python

    Khi s dng cc module trong mi trng Python ta s thu c mt cc file c ui .pyc,cc file ny c xem l phin bn c bin dch byte (byte-compile) ca cc module.py. Ni dung ca cc file .pyc khng ph thuc vo h thng, do n c th c chias vi nhiu my trn cc kin trc khc nhau.

    Khi trnh thng dch Python c chy vi flag -O (hoc -OO), m byte ti u s c tov lu trong cc tp tin c ui .pyo (file .pyc s b b qua).

    15

  • ng Nguyn Phng Ti liu ni b NMTP

    Mt chng trnh khng chy nhanh hn khi n c c t mt file .pyc hay .pyo so vikhi n c c t file .py ; im duy nht y l cc file .pyc hay .pyo c tc nphanh hn so vi .py.

    Cc module chun Python c mt th vin cc module chun (th vin chun PythonStandard Library) cung cp cc tc v khng nm trong phm vi chnh ca ngn ng nhngcng c to sn v hiu qu cao hoc truy cp vo nhng chc nng ca h iu hnh(v d nh cc lnh gi h thng). Thng tin v th vin ny c th c xem ti http://docs.python.org/library/index.html.

    Mt trong nhng module chun quan trng nht ca Python l module sys. Trong module nyc hai bin sys.ps1 v sys.ps2 c dng nh ngha chui du nhc chnh (>>>) v ph(. . .)

    >>> import sys>>> sys.ps1'>>> '>>> sys.ps1 = 'C> 'C> print 'Hello!'Hello!C>

    Bin sys.path l mt danh sch cc chui thit lp ng dn tm kim cc module ca trnhthng dch. N c khi to theo ng dn mc nh t bin mi trng PYTHONPATH (hoct mt gi tr c sn nu PYTHONPATH khng c thit lp), ta c th chnh sa n bng cch

    >>> import sys>>> sys.path.append('/afs/phuong/lib/python ')

    Hm dir() c s dng tm cc tn c nh ngha trong module, v d nh

    >>> dir(fibo)['__builtins__ ', '__doc__ ', '__file__ ', '__name__ ', '__package__ ', 'fib'

    ]

    4.9 Package

    Trong trng hp nu c mt vi module c mi quan h vi nhau, ta c th xy dng cc gichng trnh (package). C th xem cc gi ny nh l cc th mc cha cc module.

    lm cho th mc tr thnh mt gi chng trnh, ta ch cn thm mt file c tn __init__.pyvo trong th mc . File ny c th trng hoc cha mt s lnh khi to trong trnghp cc chng trnh phc tp hn.

    Gi s ta c mt gi chng trnh c cu trc nh sau

    Science/__init__.pyMath/

    __init__.pyfibo.pyfactorial.py...

    Physics/__init__.py

    16

  • ng Nguyn Phng Ti liu ni b NMTP

    velocity.pyacceleration.py...

    truy cp cc gi chng trnh, ta s dng tn module c chm. V d, tn module Math.fiboch ra module con tn fibo trong mt gi tn Math.

    Khi nhp mt gi, Python s tm trong cc th mc t sys.path tm th mc con ca gi.Cc tp tin __init__.py l cn thit cho Python bit cc th mc cha cc gi. Ngi dnggi ny c th nhp tng module ring l t gi, v d nh

    import Science.Math.fibo

    s dng cc nh ngha trong module, ta cn phi cho tham chiu u

    Science.Math.fibo.fib (1000)

    Ta cng c th b qua tn gi bng cch nhp

    from Science.Math import fibo

    Lc ny ta ch cn gi

    fibo.fib (1000)

    Hoc b qua c tn module bng cch nhp

    from Science.Math.fibo import fib

    v

    fib (1000)

    Trong trng hp mun s dng lnh import * nhp tt c cc module c trong gi, ttnht ngi dng nn khai bo mt bin __all__ trong module __init__.py cha ton b ccmodule cn c nhp. V d nh trong gi Math, ta c file __init__.py c ni dung nh sau

    __all__ = ["fibo", "factorial"]

    iu ny c ngha l hai module fibo v factorial s c nhp nu ta gi

    from Science.Math import *

    Vic ny tng ng vi vic nhp

    import Science.Math.fiboimport Science.Math.factorialfrom Science.Math import *

    Bn cnh vic nhp vi a ch tuyt i, ta cng c th s dng lnh nhp tng i, chnghn nh t module fibo ta c th nhp cc gi v module khc bng cch

    from . import factorialfrom .. import Physicsfrom .. Physics import velocity

    y du chm c dng ch nh cc gi hin ti v gi m c mt trong cu lnh nhp.

    17

  • ng Nguyn Phng Ti liu ni b NMTP

    5 Cc gi Python cho khoa hc v k thut

    5.1 SciPy

    Mt trong nhng u im ca Python l n cung cp kh nhiu th vin cng c cho cc tnhton khoa hc v k thut, c th k n chng hn nh gi ng dng SciPy.

    SciPy (http://www.scipy.org/index.html) l mt th vin cha cc module dnh cho khoahc v k thut, bao gm nhiu gi th vin nh NumPy, IPython,... SciPy cung cp cc modulev thng k, ti u ha, tch phn, i s tuyn tnh, x l tn hiu, x l hnh nh, thut tondi truyn,. . .

    Mt s gi ng dng tiu biu trong SciPy gm c

    Pandas: biu th v phn tch d liu http://pandas.pydata.org/

    NumPy : thc hin tnh ton s c bn http://www.numpy.org/

    SciPy library : tnh ton khoa hc, gm c thng k http://www.scipy.org/scipylib/

    SymPy : cc tnh ton i s http://sympy.org/en/

    Matplotlib v th http://matplotlib.org/

    Xem thm ti http://www.scipy.org/about.html

    Cc gi ng dng trong SciPy c th ci t theo hng dn ti y http://www.scipy.org/install.html.

    5.2 NumPy

    NumPy (http://www.numpy.org/) l mt gi chng trnh phc v cho cc tnh ton khoa hcbng ngn ng lp trnh Python. s dng NumPy ta cn phi nhp gi ny thng qua lnhimport

    >>> import numpy

    hoc mt cng vit di tn numpy trong khi vit chng trnh, ta c th t tn rt gn(np) bng cch

    >>> import numpy as np

    Mng Mt trong nhng chc nng chnh ca NumPy l lm vic vi cc i tng mng(array). Cc mng cng tng t nh cc list trong Python, tr mt im khc bit duy nhtl cc phn t trong cng mt mng phi c cng kiu vi nhau (vd: int, float,...). Vic sdng mng s gip cho vic x l lng ln s liu nhanh hn so vi vic dng list.

    Cc cch to mt mng

    Mt mng c th c to t mt list, v d nh ta c th to mng 1 chiu theo cch sau

    >>> a = np.array ([1, 4, 5, 8], float)>>> aarray([ 1., 4., 5., 8.])

    hoc mng 2 chiu (ma trn)

    >>> b = np.array ([[1, 2, 3], [4, 5, 6]], float)>>> barray ([[ 1., 2., 3.],

    [ 4., 5., 6.]])

    18

  • ng Nguyn Phng Ti liu ni b NMTP

    Hoc tra c th s dng hm arange (tng t hm range trong Python)

    >>> np.arange(5, dtype=float)array([ 0., 1., 2., 3., 4.])>>> np.arange(1, 6, 2, dtype=int)array([1, 3, 5])

    Mt s thao tc c bn vi mng

    Xem kch thc v kiu d liu ca mng

    >>> b.shape(2, 3)>>> len(b) # lenh len() chi tra ve do dai cua chieu (dimension)

    dau tien cua mang2>>> a.dtypedtype('float64 ')

    Truy cp phn t ca mng

    >>> a[3]8.0>>> b[0,0]1.0

    Kim tra xem gi tr c nm trong mng

    >>> 1 in aTrue

    Thay i (reshape) mng

    >>> c = a.reshape ((2 ,2)) # lenh reshape khong thay doi mang goc>>> carray ([[ 1., 4.],

    [ 5., 8.]])>>> c.flatten ()array([ 1., 4., 5., 8.])

    To mng con (slice) t mng c sn

    >>> a[:2]array([ 1., 4.])>>> b[1,:]array([ 4., 5., 6.])>>> b[:,2]array([ 3., 6.])>>> b[-1:,-2:]array ([[ 5., 6.]])

    K t : dng ch rng ta s ly tt c phn t theo chiu (dimension) tng ng vik t

    Ni mng

    >>> a = np.array ([1,2], float)>>> b = np.array ([3,4,5,6], float)>>> c = np.array ([7,8,9], float)>>> np.concatenate ((a, b, c))array ([1., 2., 3., 4., 5., 6., 7., 8., 9.])

    19

  • ng Nguyn Phng Ti liu ni b NMTP

    Copy mng

    >>> d = np.array ([1, 2, 3], float)>>> e = d>>> f = d.copy()>>> d[0] = 0>>> darray ([0., 2., 3.])>>> earray ([0., 2., 3.])>>> farray ([1., 2., 3.])

    Chuyn i mng thnh cc kiu cu trc d liu khc

    >>> d = np.array ([1, 2, 3], float)>>> d.tolist () # chuyen thanh list[1.0, 2.0, 3.0]>>> s = d.tostring () # chuyen thanh string>>> s'\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00@\x00\x00

    \x00\x00\x00\x00\x08@'>>> np.fromstring(s) # chuyen nguoc lai tu stringarray([ 1., 2., 3.])

    Cc php ton i vi mng

    Cc php ton c bn

    >>> a = np.array ([1,2,3], float)>>> b = np.array ([5,2,6], float)>>> a + barray ([6., 4., 9.])>>> a - barray([-4., 0., -3.])>>> a * barray ([5., 4., 18.])>>> b / aarray ([5., 1., 2.])>>> a % barray ([1., 0., 3.])>>> b**aarray ([5., 4., 216.])

    Php ton trn cc phn t trong mng

    >>> a = np.array ([2, 4, 3], float)>>> a.sum()9.0>>> a.prod()24.0

    Tnh cc i lng thng k

    >>> a = np.array ([2, 1, 9], float)>>> a.mean() # tri trung binh4.0>>> a.var() # phuong sai

    20

  • ng Nguyn Phng Ti liu ni b NMTP

    12.666666666666666>>> a.std() # do lech chuan3.5590260840104371

    Cc php ton ma trn v vector

    Php nhn (v hng v c hng) hai vector hay ma trn

    >>> a = np.array ([1, 2, 3], float)>>> b = np.array ([0, 1, 1], float)>>> np.dot(a, b)5.0>>> c = np.array ([[1, 1, 1], [2, 4, 0]], float)>>> np.dot(c, a)array([ 6., 10.])>>> np.cross(a, b)array([-1., -1., 1.])

    Tnh nh thc, tr ring (vi module con linalg)

    >>> a = np.array ([[4, 2, 0], [9, 3, 7], [1, 2, 1]], float)>>> np.linalg.det(a) # dinh thuc-48.000000000000007>>> vals , vecs = np.linalg.eig(a) # tri rieng va vector tri rieng>>> valsarray([ 8.85591316 , 1.9391628 , -2.79507597])>>> vecsarray ([[ -0.3663565 , -0.54736745 , 0.25928158] ,

    [ -0.88949768 , 0.5640176 , -0.88091903] ,[ -0.27308752 , 0.61828231 , 0.39592263]])

    Ma trn nghch o

    >>> np.linalg.inv(a)array ([[ 0.22916667 , 0.04166667 , -0.29166667] ,

    [ 0.04166667 , -0.08333333 , 0.58333333] ,[ -0.3125 , 0.125 , 0.125 ]])

    5.3 Matplotlib

    Matplotlib (http://matplotlib.org/) l mt gi ng dng m rng t NumPy c chc nngv th. N cung cp mt API (giao din lp trnh ng dng) hng i tng a cc th vo trong ng dng thng qua cc cng c nh wxPython, Qt hay GTK+.

    Tng t nh vi NumPy, s dng c Matplotlib ta cn nhp n vo mi trng thngqua lnh import

    >>> import numpy as np>>> import matplotlib.pyplot as plt

    Gi s ta c hai mng x v y nh sau

    >>> x = np.arange (-20., 20., 0.2)>>> y = np.sin(x)

    Lnh v th (x,y) (xem Hnh 1)

    21

  • ng Nguyn Phng Ti liu ni b NMTP

    Hnh 1: V d th c v bng Matplotlib

    >>> plt.plot(x, y, 'b-', x, y, 'ro')>>> plt.show()

    Th vin Matplotlib cung cp mt s cc hm trnh by th (c th xem chi tit ti http://matplotlib.org/api/pyplot_summary.html), chng hn nh

    plt.title('y = sin(x)')plt.xlabel('x')plt.ylabel('y')plt.axis([-20, 20, -5, 5])

    5.4 IPython

    IPython (http://ipython.org/) l mt shell tng tc nng cao c th s dng thay thcho shell Python thng thng. N c nhiu tnh nng h tr nh tnh tng tc cao, d sdng, thun tin cho vic tra cu, c cc cng c h tr cho vic lp trnh song song,...

    khi ng IPython ta g

    $ ipythonPython 2.7.6 (default , Mar 22 2014, 22:59:38)Type "copyright", "credits" or "license" for more information.

    IPython 1.2.1 -- An enhanced Interactive Python.? -> Introduction and overview of IPython 's features.%quickref -> Quick reference.help -> Python 's own help system.object? -> Details about 'object ', use 'object??' for extra details.

    In [1]:

    Thay v s dng du nhc lnh >>> nh Python, IPython s dng du nhc In []:. Ccthao tc thc hin trn IPython cng tng t nh trn Python thng thng (Hnh 2).

    Ngoi ra, IPython cn cung cp notebook, mt cng c dng web, vi cc tnh nng tng tcng vi cc tnh nng tng tc th v.

    khi ng IPython notebook (Hnh 3) ta g

    22

  • ng Nguyn Phng Ti liu ni b NMTP

    Hnh 2: nh chp mn hnh khi s dng IPython

    $ ipython notebook2014 -10 -08 22:07:43.800 [NotebookApp] Using existing profile dir: u'/

    home/phuong /. config/ipython/profile_default '2014 -10 -08 22:07:43.822 [NotebookApp] Using system MathJax2014 -10 -08 22:07:43.886 [NotebookApp] Serving notebooks from local

    directory: /home/phuong2014 -10 -08 22:07:43.886 [NotebookApp] The IPython Notebook is running at

    : http ://127.0.0.1:8888/2014 -10 -08 22:07:43.887 [NotebookApp] Use Control -C to stop this server

    and shut down all kernels (twice to skip confirmation).

    Hnh 3: Giao din trang web ca IPython notebook

    23

  • ng Nguyn Phng Ti liu ni b NMTP

    6 Python v C++

    L mt ngn ng thng dch, Python c tc thc hin chm hn nhiu ln so vi cc ngnng bin dch nh Fortran, C/C++,... Do i vi cc tnh ton hay x l phc tp, i hitc thc hin nhanh, ta c th kt hp Python vi mt ngn ng khc. Trong phn ny, tcgi s trnh by mt s cch nhng (embedding) C++ vo trong Python v ngc li.

    6.1 Nhng C++ vo Python

    C mt s cch thc hin vic nhng C++ vo trong Python, di y l nhng cch thngdng nht

    Cch 1 S dng th vin ctypes, chc nng ca th vin ny l dng bao (wrap) cc thvin lin kt ng ca C (dll hay so) v s dng chng trong Python. N cung cp cc dngd liu tng ng C v cho php gi cc hm trong cc th vin C.

    Gi s ta c mt lp C++ c nh ngha trong file foo.cpp

    #include

    class Foo{public:

    void bar(){std::cout

  • ng Nguyn Phng Ti liu ni b NMTP

    f = Foo()f.bar()

    Trong trng hp file m ngun thun C, chng hn nh file welcome.c di y

    #include

    void welcome_msg(char *msg) {printf("%s\n", msg);return;

    }

    Ta c th bin dch thnh th vin v load trc tip trong Python

    >>> from ctypes import *>>> mylib = CDLL("./ libwelcome.so")>>> mylib.welcome_msg("Hello !")Hi C, I am from Python!

    Cch 2 S dng cng c SWIG (Simplified Wrapper and Interface Generator) (http://www.swig.org/), y l cng c cho php kt ni cc chng trnh vit bng C/C++ vi cc ngnng lp trnh bc cao khc (Perl, Ruby, PHP, Python, Javascript,...).

    Gi s ta c mt file m ngun C++ code.cpp c ni dung nh sau

    #include #include "code.h"

    using namespace std;

    vector average (vector < vector > i_matrix) {// tinh gia tri trung binh cua moi dongvector averages;for (int r = 0; r < i_matrix.size(); r++){

    double rsum = 0.0;double ncols= i_matrix[r].size();for (int c = 0; c< i_matrix[r].size(); c++){

    rsum += i_matrix[r][c];}averages.push_back(rsum/ncols);

    }return averages;

    }

    v file header ca n code.h

    #ifndef _code#define _code

    #include

    std::vector average (std::vector < std::vector > i_matrix);

    #endif

    Vic u tin ta cn lm l bin dch file m ngun ny

    25

  • ng Nguyn Phng Ti liu ni b NMTP

    g++ -c -fPIC code.cpp

    Sau to mt file nh ngha giao din (interface definition file) SWIG c ui .i, chng hnnh code.i

    %module code%{#include "code.h"%}%include "std_vector.i"namespace std {

    %template(VecDouble) vector ;%template(VecVecdouble) vector < vector >;

    }

    %include "code.h"

    S dng SWIG to ra file m ngun giao din C++ (C++ interface source file) t file nhngha giao din

    swig -c++ -python code.i

    Cui cng l bin dch file m ngun giao din C++ to ra file th vin chia s

    g++ -c -fPIC code_wrap.cxx -I/usr/include/python2 .7 -I/usr/lib/python2.7

    g++ -shared -Wl,-soname ,_code.so -o _code.so code.o code_wrap.o

    Nhp th vin ny vo Python v s dng

    import codea= [[3 ,5 ,7] ,[8 ,10 ,12]]print ab = code.average(a)print "Assignment done"print aprint b

    6.2 Gi module Python trong C++

    c th s dng cc module Python trong m ngun ca C++, ta cn phi s dng mtgiao din lp trnh ng dng (Application Programming Interface API). Trong trng hpca Python/C++ ta s s dng giao din C-API (xem chi tit ti http://docs.python.org/c-api/), giao din ny s cho php lp trnh vin C++ truy cp vo trong trnh thng dch caPython.

    s dng tt c cc nh ngha (hm, kiu d liu,...) ca C-API, ta cn phi s dng thvin Python.h bng cch thm dng di vo u on m C++

    #include "Python.h"

    Gi s ta c mt file Python mytest.py c ni dung

    import math

    def myabs(x):return math.fabs(x)

    26

  • ng Nguyn Phng Ti liu ni b NMTP

    Ta to mt file test.cpp c ni dung nh sau

    #include

    int main() {Py_Initialize ();// . . .// noi dung// . . .Py_Finalize ();return 0;

    }

    nhp module Python (thng qua lnh import) ta s dng cc lnh sau

    PyObject* myModuleString = PyString_FromString ((char*)"mytest");PyObject* myModule = PyImport_Import(myModuleString);

    PyObject l i tng c bn ca C-API, n i din cho tt c cc kiu d liu c bn caPython (int, float, string,...).

    Tham chiu ti hm myabs trong Python

    PyObject* myFunction = PyObject_GetAttrString(myModule ,(char*)"myabs");PyObject* args = PyTuple_Pack (1, PyFloat_FromDouble (2.0));

    Ly kt qu t hm

    PyObject* myResult = PyObject_CallObject(myFunction , args);

    Chuyn kt qu ny thnh gi tr trong C++

    double result = PyFloat_AsDouble(myResult);

    Ta cng c th thc hin cc lnh trong trnh thng dch Python, chng hn nh

    PyRun_SimpleString("import sys; sys.path.append('.')");PyRun_SimpleString("import mytest;");PyRun_SimpleString("print mytest.myabs (2.0)");

    7 Python v ROOT

    ROOT6 l mt framework da trn ngn ng lp trnh C++ dng cho vic phn tch v x l sliu7. ROOT c pht trin vo gia nhng nm 1990 ti T chc Nghin cu Nguyn t Chuu (CERN), v hin nay ang c s dng trong cc th nghim ti Large Hadron Collider(LHC) v ti hu ht cc th nghim vt l nng lng cao trn th gii.

    Tng t nh C++, ROOT cng cn lin kt vi cc module Python xy dng nn cc gi xl s liu. Phn ny s trnh by mt cch s lc cch s dng Python trong ROOT v ngcli.

    6Download ti http://root.cern.ch/drupal/content/downloading-root7Xem thm trong Hng dn s dng ROOT cho h iu hnh Windows (http://goo.gl/olLp5o)

    27

  • ng Nguyn Phng Ti liu ni b NMTP

    7.1 PyROOT

    PyROOT l mt module Python cho php ngi dng tng tc vi cc lp ca ROOT t trnhthng dch Python. Vic ny cng tng t nh cc ROOT dictionary nn khng cn phi tocc Python wrapper a cc lp ca ROOT vo. ng thi PyROOT cng cho php ngidng thc thi cc lnh ca Python bn trong trnh thng dch ROOT/CINT.

    ci t PyROOT, ta lm theo cc hng dn y http://wlav.web.cern.ch/wlav/pyroot/installation.html.

    Sau khi ci t PyROOT, ta c th s dng lnh import nhp cc lp ca ROOT m tamun dng vo trong Python, chng hn nh on code sau

    from ROOT import gROOT , TCanvas , TF1

    gROOT.Reset()c1 = TCanvas( 'c1', 'Example with Formula ', 200, 10, 700, 500 )

    # Tao mot ham 1-chieu va ve nofun1 = TF1( 'fun1', 'abs(sin(x)/x)', 0, 10 )c1.SetGridx ()c1.SetGridy ()fun1.Draw()c1.Update ()

    Trong trng hp ta mun a mt lp t to vo trong Python, trc tin ta cn to th vint lp thng qua ACLIC. V d: gi s ta c file MyClass.C c ni dung

    class MyClass {public:MyClass(int value = 0) {

    m_value = value;}void SetValue(int value) {

    m_value = value;}int GetValue () {

    return m_value;}private:

    int m_value;};

    Th vin c to ra bng lnh

    $ echo .L MyClass.C+ | root.exe -b

    Sau load t Python

    from ROOT import gSystem# load thu vien MyClassgSystem.Load('MyClass_C ')# import MyClass tu ROOTfrom ROOT import MyClass# su dung lop MyClassm = MyClass (42)print m.GetValue ()

    28

  • ng Nguyn Phng Ti liu ni b NMTP

    Ngoi ra, ta cng c th load trc tip file macro m khng cn phi to th vin, nhng iuny s gii hn chng ta ch c s dng hm khi to mc nh ca lp

    from ROOT import gROOTgROOT.LoadMacro('MyClass.C')

    Chi tit cch s dng PyROOT c th c tham kho ti http://wlav.web.cern.ch/wlav/pyroot/.

    7.2 S dng Python trong ROOT

    Ta c th s dng Python trong ROOT/CINT bng cch s dng th vin ca PyROOT (lpTPython8), chng hn nh

    root [0] gSystem ->Load("libPyROOT")root [1] TPython ::Exec( "print 1 + 1" )2root [2] TBrowser *b = (void*) TPython ::Eval( "ROOT.TBrowser ()" )(class TObject *)0x8d1daa0root [3] TPython :: Prompt () // su dung shell Python>>> i = 2root [4] TPython :: Prompt () // su dung shell Python>>> print i2

    Ti liu

    [1] Guido van Rossum, Bi ch dn Python (bn dch), Python Software Foundation (2006).

    [2] Norman Matloff, Ti liu hng dn nhanh v ngn gn v s dng ngn ng Python (bndch), University of California (2006).

    [3] Martin Woudstra, Basic Python Tutorial, CERN (2009).

    [4] Sbastien Binet, Introduction to python, CERN (2012).

    [5] M. Scott Shell, An introduction to Numpy and Scipy (2014)http://www.engr.ucsb.edu/~shell/che210d/numpy.pdf

    [6] http://www.vithon.org/tutorial/2.5/node8.html

    [7] http://vi.wikipedia.org/wiki/Python_%28ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh%29

    [8] https://wiki.python.org/moin/BeginnersGuide/Download

    [9] http://docs.python.org/2/contents.html

    [10] http://opentechschool.github.io/python-data-intro/core/notebook.html

    [11] http://karuppuswamy.com/wordpress/2012/01/28/how-to-use-c-library-in-python-generating-python-wrappers-for-c-library/

    [12] http://stackoverflow.com/questions/145270/calling-c-c-from-python

    [13] http://stackoverflow.com/questions/3286448/calling-a-python-method-from-c-c-and-extracting-its-return-value

    [14] http://root.cern.ch/drupal/content/how-use-use-python-pyroot-interpreter8Xem thm ti http://root.cern.ch/root/html/TPython.html

    29

    M uGii thiu PythonCch thc ci t v s dung PythonCch ci tCch thc s dung Python

    Python co banC phpCc ton t co banCc kiu d liuCu trc iu khinHmFileLpModulePackage

    Cc gi Python cho khoa hoc v k thutSciPyNumPyMatplotlibIPython

    Python v C++Nhng C++ vo PythonGoi module Python trong C++

    Python v ROOTPyROOTS dung Python trong ROOT

    Ti liu tham khao