Sunteți pe pagina 1din 48

Python 101

Curs 4 - Module
11.11.2021
Pentru început...
● 📚 Zoom + Discord + Netacad
○ Curs
○ Materiale și anunțuri
● 🕐 Joi, ora 18:00 - 21:00
○ Quiz de recapitulare din cursul precedent
○ Curs + Demo
○ Laborator
● 󰢧 Puneți întrebări oricând
● 👀 Feedback la fiecare curs
Quiz time!
Parola: Curs4_quiz
Module
Module
● Orice fișier ce conține cod sursă Python
este un modul.

● Modulele ajută la reutilizarea codului.

● Modulele sunt o modalitate de a împărți


programele mari în componente mai mici
și mai ușor de urmărit.
Crearea unui modul
● Într-un modul putem avea definiții de
funcții și/sau clase.

În fișierul operations.py avem:


def add(a, b):
return a + b

def sub(a, b):


return a - b

def mul(a, b):


return a * b

def div(a, b):


return a / b

def mod(a, b):


return a % b
Importarea unui modul(1)
● Putem să importăm într-un alt fișier un modul
folosind

import <nume_modul>.
● Putem folosi funcțiile/clasele din acel modul cu

<nume_modul>.<nume_funcție/ nume_clasa>

import operations

print(operations.sub(11,2)) #9
Importarea unui modul(1)
● Dintr-un modul se pot importa doar anumite
funcții și/sau clase cu
from <nume_modul> import <nume_funcție/ nume_clasa>

from operations import add, sub

print(sub(11,2)) # 9
print(add(11,2)) # 13
print(mul(11,2)) # eroare
Importarea unui modul(2)
● La importarea unui modul, se poate stabili și
un alias pentru numele modulului.

import <nume_modul> as <nume_alias>

import operations as op

print(op.sub(11,2)) # 9
Main
● Funcția main este punctul de început în
orice limbaj de programare.
● Pentru orice program se va seta variabila
__name__ astfel:
○ __name__ = __main__ fișierul dat ca
parametru interpretorului
○ __name__ = nume modul pentru restul
modulelor
Main - exemplu
# File main.py # File not_main.py

import not_main

def get_name(): def get_name():


print(__name__) print(__name__)

get_name()
not_main.get_name()

python3 main.py

# __main__
# not_main
if __name__ == ‘__main__’
Verificarea se face pentru a vedea dacă
modulul curent a fost dat ca parametru
interpretorului.

if __name__ == ‘__main__’:
print(“I am the main module”)
else:
print(“I am not the main module”)
Fișiere în Python
● În Python, lucrul cu fișiere presupune 3
pași:
■ deschidere fișier
■ operații de citire / scriere fișier
■ închidere fișier
Deschidere fișier
Un fișier se poate deschide cu funcția open.
f = open(“nume_fisier”, “mod”),

unde mod reprezintă modul în care e


deschis fișierul:
Mod Explicație

r read - se vor citi date din fișier

w write - se vor scrie date în fișier (dacă există


date în fișier, vor fi suprascrise)

a append - se vor scrie date la finalul fișierului

t text - fișierul este perceput ca fișier text

b binar - fișierul este perceput ca fișier binar


Închidere fișier
Un fișier se închide folosind funcția close.

f = open(“file.txt”)

f.close()
Citire linii din fișier
Putem citi toate liniile din fișier cu funcția
readlines(), care va întoarce o listă cu liniile
din fișier.

f = open(“file.txt”)
lines = f.readlines()
print(lines)
f.close()

Why close files?


Citire linii din fișier(2)
Putem citi o singură linie din fișier cu file.txt
funcția readline().
1 citire
2 fisier
f = open(“file.txt”)
3
line = f.readline().strip(“\n”)
print(line) # citire

line = f.readline().strip(“\n”)
print(line) # fisier

f.close()
Scriere linii în fișier
Putem citi liniile din fișier cu funcția
writeline(), care va scrie o linie în fișier.

f = open(“file.txt”, “w”)
f.writelines(“am scris in fisier”)
f.close()
With
Putem citi mai ușor fișiere cu cuvântul cheie
with, care va închide automat fișierul la ieșirea
din blocul de cod asociat.

lines = []

with open(“file.txt”) as file:


lines = file.readlines()
… # operation with file
#file este acum închis

print(lines)
Split
Putem împărți un șir de caractere după spațiu
folosind funcția split.

s = “Cine este numărul #5 în top?”


print(s.split())

# ['Cine', 'este', 'numărul', '#5', 'în', 'top?']


Split(2)
Funcția split poate primi și un parametru
opțional, delimitatorii după care să împartă șirul.

s = “acesta-este-un-text”
print(s.split(‘-’))

# ['acesta', 'este', 'un', 'text']


One liner
Un one-liner reprezintă rezolvarea unei
probleme/task scriind cod pe o singură linie,
care poate fi destul de lungă.

● Dacă linia depășește o lungime


rezonabilă, putem trece pe linia
următoare prin escapare cu \.
One liner - exemplu de
problemă
● Convertește prima literă a fiecărui cuvânt
din propoziție la literă mare.

Exemplu:

“Ana are mere” -> “Ana Are Mere”


One liner - Abordare clasică
def capitalize_each_word(s):
words = []
for word in s.split():
capitalized = word.capitalize()
words.append(capitalized)
return ' '.join(words)
One liner - Abordare Python
Ce face dificilă înțelegerea
acestei linii de cod?
def capitalize_each_word(s):
return ''.join[w.capitalize() for w in s.split()]

Dezavantajele unui one - liner

1. Greu de menținut
2. Greu de scris
Dezavantaje one-liner
''' Dear programmer:
When I wrote this code, only god and
I knew how it worked.
Now, only god knows it!!!

Therefore, if you are trying to optimize


this routine and it fails (most surely),
please increase this counter as a warning
for the next person

total_hours_wasted_here = 254
'''

Sursa: reddit
Pauză
Modulul sys
● Modulul permite interacțiunea cu interpretorul
și preluarea argumentelor din linia de comandă.
● Lista completă este aici.

import sys

print(sys.argv) # argumentele din linia de comandă


platform(sys.platform) # sistemul de operare folosit

student@lubuntu:~$ python3 test_sys.py arg1 45


['test_sys.py', 'arg1', '45']
linux
Modulul math
● Furnizează operații matematice:
○ pow, sqrt, exp, sin, cos, ...
● Lista completă aici.

import math

x = math.sqrt(5) # 2.2360679775
y = math.trunc(x) # 2
z = math.sin(math.pi) # 1.22e-16
Modulul random
● Generator de rezultate întâmplătoare.
● Toate funcțiile se găsesc aici.

from random import randrange


Număr random între 0 și 5

x = randrange(5)
Număr random între 4 și 10

y = randrange(4, 10)
Număr random între 3 și 6 cu pas 2

z = randrange(3, 6, 2)
Modulul random
● O alegere întâmplătoare se face cu
choice.

import random

l = [‘rock’, ‘jazz’, ‘techno’]

genre = random.choice(l)
Modulul time
● Folosit la măsurarea timpului și
întârzierea execuției.

from time import time, sleep


întoarce timpul de acum
t1 = time()
sleep(3) așteaptă 3 secunde
t2 = time()

print(t2 - t1) # 3.00232481956


Modulul numpy
● Procesor matematic similar cu Matlab.
● Suport pentru operații complexe: operații
vectoriale, gradient.
● Documentație aici.

import numpy as np
Numpy array
● Echivalentul unei liste.
● Suportă operații mai avansate.

import numpy as np

v = np.zeros(10)

Un array de 10 elemente cu valoarea 0


Numpy array
● Suportă valori uniform distribuite.
● Este un generator de intervale.

import numpy as np

v = np.linspace(10, 20, 4)
Optional: Contine 4 valori
Incepe la valoarea 10
Implicit 50
Valori distribuite
uniform Se oprește la valoarea 20
Numpy array
● Operațiile se aplică tuturor elementelor
array-ului.

import numpy as np

v = np.linspace(10, 12, 2) # [10, 12]


v **= 2 # [100, 144]
Numpy array
● Numpy suportă și operații matematice
mai abstracte: integrale.
● Aceste operații sunt numerice, NU
simbolice.

import numpy as np
x = np.linspace(0, 1)
y = x

print(np.trapz(y, x)) # 0.5


Modulul matplotlib
● Este un generator de grafice.
● Suport pentru 2D si 3D.
● Documentația este disponibilă aici.
● Lista mare de exemple.
Grafic simplu
import matplotlib.pyplot as plt

x = [1, 2, 3]
y = [10, 30, 90]

plt.plot(x, y)
plt.show()
Titlul și denumirea axelor
import matplotlib.pyplot as plt

plt.title(“Hello, world!”)

plt.xlabel(“Hello, X!”)
plt.ylabel(“Hello, Y!”)

plt.show()
Mai multe grafice
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi)
y1 = np.cos(x)
y2 = np.sin(x)

plt.plot(x, y1)
plt.plot(x, y2)

plt.show()
Legenda
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0.01, 2)
functie = np.log(x)

plt.plot(x, functie, label='Logaritm')


plt.legend()

plt.show()
Stiluri de grafice
● Fiecare grafic poate avea stilul lui propriu.
● Stilurile se stabilesc prin setarea de
parametrii kwargs.
● Stilul liniei este linestyle:
○ solid ‘-’
○ dotted ‘.’
○ dashed ‘--’
○ dashdot ‘-.’
Stiluri de grafice
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10)
y = x ** 2

plt.plot(x, y, linestyle=’-.’)

plt.show()
Stiluri de grafice
● Culoarea liniei este color. Se putea folosi
numele în engleza.
● Grosimea liniei este linewidth. Se
folosește grosime în puncte.
Stiluri de grafice
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10)
y = x ** 2

plt.plot(x, y, color=’cyan’, linewidth=10)

plt.show()
Salvare grafic
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10)
y = x ** 2

plt.plot(x, y)
plt.savefig(“name.png”)

plt.show()
Întrebări?

S-ar putea să vă placă și