Sie sind auf Seite 1von 13

© 2017 – Python Programming

v 1.0

Python Modules

Programarea modulara presupune impartirea unui


program complex in module care nu trebuie sa depinda
unul de celalalt.

O aplicatie Python contine un top-level script folosit


pentru lansarea aplicatiei si optional o serie de module
importate care adauga functionalitate.

Nu exista o sintaxa speciala pentru a crea un modul.

Un modul este un fisier care contine declaratii de


variabile, functii, clase etc si care se importa in modul
main (top-level script). Numele fisierului este numele
modulului cu extensia .py

Importare modul

1. import module_name

Aceasta varianta importa toate definitiile in modulul


__main__

Exemplu importare modul built-in:

>>>import math

>>>math.pi

Out[2]: 3.141592653589793

© 2017 – Crystal Mind Academy


Informatiile continute in acest document reprezinta proprietate intelectuala Crystal Mind Academy
Distribuirea sau reproducerea de orice fel este interzisa.
-1-
© 2017 – Python Programming
v 1.0

>>>import random, sys

ToDo: importare module creat de user.

2. Dintr-un modul se pot importa doar anume definitii:


from fibo import fib1, fib2 situatie in care doar acestea
vor fi disponibile si se pot accesa direct, fara
module.name

>>> from math import pi, sqrt

>>> print(sqrt(pi))

1.7724538509055159

3. Se pot importa toate definitiile unui modul care apoi


sa fie accesate direct:

>>> from math import *

>>> print(sin(pi))

1.2246467991473532e-16

Atentie: name collisions!

>>> from math import *

>>> sin(3)

© 2017 – Crystal Mind Academy


Informatiile continute in acest document reprezinta proprietate intelectuala Crystal Mind Academy
Distribuirea sau reproducerea de orice fel este interzisa.
-2-
© 2017 – Python Programming
v 1.0

0.1411200080598672

>>> from numpy import *

>>> sin(3)

0.14112000805986721

4. Pentru evitarea ambiguitatilor se poate importa:

>>> import math as m

>>> m.pi

3.141592653589793

Un modul importat se cauta intre cele built-in si apoi in


diorectoarele din sys.path

Functia built-in dir() afiseaza toate definitiile (functii,


clase, variabile) dintr-un modul.

>>> import math

>>> dir(math)

['__doc__', '__loader__', '__name__', '__package__',


'__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2',
'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e',
'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor',
'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf',
'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log',

© 2017 – Crystal Mind Academy


Informatiile continute in acest document reprezinta proprietate intelectuala Crystal Mind Academy
Distribuirea sau reproducerea de orice fel este interzisa.
-3-
© 2017 – Python Programming
v 1.0

'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow',


'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

5. Import customizat din alta cale

import imp

imp.load_source('mod1','/home/andrei/lab/mod1.py')

Moduri executare script:

- Un script Python poate fi executat independent sau


poate fi importat ca modul in alta aplicatie. Pt. a
diferentia intre cele 2 situatii verificam daca __name__
== "__main__"

- Variabila globala __name__ contine numele scriptului


care importa modulul sau numele modulului in
interiorul fisierului care defineste modulul.

- Executarea unui script .py in IDLE se realizeaza: >>>


exec(open('mod1.py').read())

In interiorul modulului numele acestuia se gaseste in


variabila globala __name__

© 2017 – Crystal Mind Academy


Informatiile continute in acest document reprezinta proprietate intelectuala Crystal Mind Academy
Distribuirea sau reproducerea de orice fel este interzisa.
-4-
© 2017 – Python Programming
v 1.0

La importarea unui modul, acesta este compilat in


bytecode. Apare astfel directorul __pychache__ in care
se gaseste fisierul .pvc (bytecode).

Python Standard Library

https://pymotw.com/3/

Contine peste 200 de module cu scop general de la


calcul matematic, la lucru cu baze de date, cu sistemul
de operare, criptografie, regular expressions, Internet
etc.

Exista 2 categorii de module built-in:

1. scrise in C si compilate (fisiere .so, .dll). Ex: math,


sys

2. scrise in python (fisiere .py). Calea catre fisier se


afla:
>>> import random
>>> import os
>>> random.__file__
'/usr/lib/python3.5/random.py'
>>> os.__file__
'/usr/lib/python3.5/os.py'
>>> import inspect
>>> inspect.getfile(random)
'/usr/lib/python3.5/random.py'

© 2017 – Crystal Mind Academy


Informatiile continute in acest document reprezinta proprietate intelectuala Crystal Mind Academy
Distribuirea sau reproducerea de orice fel este interzisa.
-5-
© 2017 – Python Programming
v 1.0

Pentru a afisa toate modulele built-in:

>>> help('modules')

sys module

Acest modul include functionalitate pentru:

- afisarea informatiilor despre interpretorul Python si


modificarea setarilor acestuia la runtime

- afisarea de informatii despe OS

- interactiunea cu OS in afara environmentului scriptului


care ruleaza.

Afisare versiune Python

>>> import sys


>>> print(sys.version)
3.6.3 (default, Oct 6 2017, 08:44:35)
>>> sys.platform
'linux'
>>> sys.version_info
sys.version_info(major=3, minor=5, micro=2,
releaselevel='final', serial=0)
>>> sys.version_info[1]
5
>>> sys.implementation
namespace(_multiarch='x86_64-linux-gnu',
cache_tag='cpython-35', hexversion=50660080,

© 2017 – Crystal Mind Academy


Informatiile continute in acest document reprezinta proprietate intelectuala Crystal Mind Academy
Distribuirea sau reproducerea de orice fel este interzisa.
-6-
© 2017 – Python Programming
v 1.0

name='cpython', version=sys.version_info(major=3,
minor=5, micro=2, releaselevel='final', serial=0))

Lab:

- Redirectarea outputului intr-un fisier (sys.stdout)

- Executare scripturi folosind argumente (sys.argv)

os module

Executare comenzi

>>> import os
>>> os.system('date')
Fri Oct 20 15:55:13 EEST 2017
0
>>> os.system('cat /etc/lsb-realese')
cat: /etc/lsb-realese: No such file or directory
256

Se recomanda folosirea modulului subprocess si


a functiilor run(), check_call(),
check_output() pt. a executa comenzi.
>>> import subprocess
>>> subprocess.check_call('ls -l > a.txt',
shell=True)

© 2017 – Crystal Mind Academy


Informatiile continute in acest document reprezinta proprietate intelectuala Crystal Mind Academy
Distribuirea sau reproducerea de orice fel este interzisa.
-7-
© 2017 – Python Programming
v 1.0

Listare continut director

>>> l = os.listdir('/') #returns a list


>>> l
['sys', 'backup', 'data', 'bin', 'vmlinuz.old', 'vmlinuz',
'home', 'run', 'proc', 'var', 'initrd.img.old', 'opt', 'media',
'srv', 'boot', 'root', 'initrd.img', 'lib32', 'usr', 'cdrom',
'lib', 'lib64', 'sbin', 'tmp', 'etc', 'mnt', 'dev', 'lost+found']

Afisare director curent

>>> import os
>>> cwd = os.getcwd()
>>> print(cwd)

Schimbare director curent


>>> os.chdir('C:\\Users')

Verificare daca un fisier sau director exista (os.path


este modul separat)

>>> os.path.isfile('/etc/passwd')
True
>>> os.path.isdir('/tmp')
True
#returns True if path (dir or file) exists else False
os.path.exists(path)

© 2017 – Crystal Mind Academy


Informatiile continute in acest document reprezinta proprietate intelectuala Crystal Mind Academy
Distribuirea sau reproducerea de orice fel este interzisa.
-8-
© 2017 – Python Programming
v 1.0

os.path.join() construieste path din mai multe path


partiale. Este platform dependent
>>> os.path.join('/home/andrei/lab', 'b.py')
'/home/andrei/lab/b.py'

os.path.split() returneaza un tuplu cu filepath si


filename
>>> filepath, filename =
os.path.split('/var/log/auth.log')
>>> filepath
'/var/log'
>>> filename
'auth.log'

os.path.splitext() returneaza un tuplu cu nume fisier


fara extensie si extensie
>>> shortname, extension =
os.path.splitext('/var/log/auth.log')
>>> shortname
'/var/log/auth'
>>> extension
'.log'

Exemplu: list comprehension care contine toate fisierele


dintr-un director
>>> [f for f in os.listdir(dirname) if
os.path.isfile(os.path.join(dirname,f))]

© 2017 – Crystal Mind Academy


Informatiile continute in acest document reprezinta proprietate intelectuala Crystal Mind Academy
Distribuirea sau reproducerea de orice fel este interzisa.
-9-
© 2017 – Python Programming
v 1.0

['airtravel_.csv', '__init__.py', 'xxx.txt.sig', 'cities.txt',


'py.txt', 'SampleCSVFile_119kb.csv', 'if.py', '1.png.zip',
'arhiva.tar', 'a.txt.asc', 'cities1.zip', 'a.py', 'b.txt.sig',
'cities.zip', 'addresses.csv', 'a.pdf', 's.sh', 'x.txt',
'airtravel.csv', 'genesis1.json', 'cities_simple.txt',
'arc.zip', 'genesis.json', 'a.txt', 'z.txt', 'cities.dat', 'y.txt',
'truffle.js']

shutil module

Modulul shutil ofera operatii high-level asupra fisierelor


si directoarelor. Se recomanda a fi folosit in loc de
operatiile incluse in modulul os

>>> import shutil

Copiaza continutul fisierul src in fisierul dst (fara


permisiuni, atime, mtime, ctime)
>>> shutil.copyfile('a.txt.sig', 'b.txt.sig')
'b.txt.sig'

Copiaza fisiere si directoare impreuna cu permisiuni dar


nu si atime, mtime, ctime
>>> shutil.copy('a.txt.sig', 'xxx.txt.sig')
'xxx.txt.sig'
>>> shutil.copy('a.txt.sig', '/tmp')
'/tmp/a.txt.sig

© 2017 – Crystal Mind Academy


Informatiile continute in acest document reprezinta proprietate intelectuala Crystal Mind Academy
Distribuirea sau reproducerea de orice fel este interzisa.
-10-
© 2017 – Python Programming
v 1.0

Identic cu copy() doar ca va copia all metadata


>>> shutil.copy2('a.txt.sig', '/tmp')
'/tmp/a.txt.sig'

Muta/redenumeste (mv style) fisiere si directoare


>>> shutil.move('a.txt.sig', 'aaa.txt.sig')

Copiaza recursiv un director


>>> shutil.copytree('projects','work')

Sterge recursiv un director


>>> shutil.rmtree('work')

random Module

https://en.wikipedia.org/wiki/Applications_of_randomn
ess

random() genereaza un float random intre [0.0, 1.0)


>>> random.random()
0.6066836193348744
>>> random.random()
0.6248724934178866

Genereaza random in range


>>> random.uniform(4,100)
9.147402920462309

© 2017 – Crystal Mind Academy


Informatiile continute in acest document reprezinta proprietate intelectuala Crystal Mind Academy
Distribuirea sau reproducerea de orice fel este interzisa.
-11-
© 2017 – Python Programming
v 1.0

Initializare prng cu seed (orice obiect hashable precum


int, string) si va genera mereu aceeasi serie
random.seed(6)
for i in range(9):
print('{:04.3f}'.format(random.random()), end=' ')

Genereaza int aleator in range


for i in range(5):
print(random.randint(1, 100), end=' ')
for i in range(5):
print(random.randint(-50, 50), end=' ')

Randrand() foloseste (start, stop, step)


for i in range(5):
print(random.randrange(-50, 50,5), end=' ')

Returneaza un element random dintr-o structura


indexabila
>>> l = list('abcdef')
>>> random.choice(l)
'e'

Multe aplicatii necesita un esantion (sample) dintr-o


multime de valori (o populatie generala). sample()
genereaza o lista de valori unice si random din aceasta
populatie.
>>> l = list('fdsafdsakfdsajhfdksajhfdsakhjlfsaflhksa')
>>> random.sample(l, 3)

© 2017 – Crystal Mind Academy


Informatiile continute in acest document reprezinta proprietate intelectuala Crystal Mind Academy
Distribuirea sau reproducerea de orice fel este interzisa.
-12-
© 2017 – Python Programming
v 1.0

['l', 'a', 's']


>>> random.sample(l, 3)
['d', 'd', 'k']

Clasa SystemRandom ofera un PRNG care are acces la


mai multe surse de entropie.
>>> r = random.SystemRandom ()
>>> r.random()
0.6274783093976615

shuffle a list in place


>>> l = list('0123456789')
>>> l
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> random.shuffle(l)
>>> l
['7', '3', '6', '5', '0', '4', '1', '8', '2', '9']

© 2017 – Crystal Mind Academy


Informatiile continute in acest document reprezinta proprietate intelectuala Crystal Mind Academy
Distribuirea sau reproducerea de orice fel este interzisa.
-13-

Das könnte Ihnen auch gefallen