Python from zero to hero

Python from zero to hero
Python from zero to hero

Σε αυτό το όχι TLDR άρθρο (ελπίζω) θα δούμε όλες τις βασικές έννοιες και δομές της scripting γλώσσας προγραμματισμού Python.

H Python είναι μια interpreted γλώσσα και όχι compiled πράγμα που σημαίνει ότι η μετάφραση του προγράμματος σε γλώσσα μηχανής δεν γίνεται όλη μαζί όταν επιλέξουμε να κάνουμε compile αλλά εκτελείτε κατευθείαν και μεταφράζετε απευθείας από τον interpreter ανά γραμμή εντολών.

Shebang line

Στη sheband line που πρέπει να είναι η πρώτη γραμμή του κώδικα μας, δηλώνουμε το path που είναι εγκατεστημένη η Python(ο interpreter).

#!/usr/bin/python3.6
Print (προβολή)

Στη Python oρίζουμε μεταβλητές χωρίς να χρειάζεται να τις δηλώσουμε με το datatype τους. Με τη function print εμφανίζουμε είτε τη μεταβλητή είτε απευθείας ότι της έχουμε ορίσει.

a=2+3
print(type(a))
print(a)
<class 'int'>
5

Όταν ορίζουμε σε μία μεταβλητή με quote ορίζεται ως string.

a='2'+'3'
print(type(a))
print(a)
<class 'str'>
23

Όταν χρησιμοποιούμε την print function μπορούμε να χρησιμοποιήσουμε την παράμετρο sep για να διαχωρίσουμε τα δεδομένα μεταξύ τους ή το end για να προστεθεί  στο τέλος της γραμμής.

print('0','1','2','3',sep='-')
print('0','1','2','3',end='-')
0-1-2-3
0 1 2 3-
Loops (βρόγχοι)

Πάμε σε παραδείγματα loops με for και while. Μην ξεχνάμε ότι το range ξεκινάει από το 0 και φτάνει έως την τιμή που έχουμε ορίσει εξαιρώντας αυτή την τιμή.

for i in range(0,3):
    print(i)
0
1
2
i = 0
while i < 3:
  print(i)
  i = i + 1
0
1
2
Δομές δεδομένων

Στη Python xρησιμοποιούμε 3 δομές δεδομένων lists, tuples και dictionary. Μπορούμε και συνδυαστικά όπως λίστες ή dictionary που περιέχει tuple.

Lists (λίστες)

H λίστα είναι μια σειρά από δεδομένα που επιτρέπει μεταβολές όπως σορτάρισμα, αφαίρεση ή προσθήκη δεδομένων.

Ορίζεται ως =[a,b].

list = ['μπανάνα','μήλο','κεράσι','φράουλα']
print(type(list))
print(list)
<class 'list'>
['μπανάνα', 'μήλο', 'κεράσι', 'φράουλα']

Μπορούμε να επιλέξουμε από ποια τιμή έως ποια θέλουμε να φέρουμε με την πρώτη τιμή να είναι το 0

print(list[1:3])
['μήλο', 'κεράσι']

Μπορούμε να τα φέρουμε και με την αντίστροφη σειρά

print(list[::-1])
['φράουλα', 'κεράσι', 'μήλο', 'μπανάνα']

Μπορούμε να αφαιρέσουμε και να προσθέσουμε δεδομένα.

list.append('ανανάς')
list.remove('φράουλα')
print(list)
['μπανάνα', 'μήλο', 'κεράσι', 'ανανάς']

Μπορούμε να την βάλουμε σε αλφαβητική σειρά.

list.sort()
print(list)
['ακτινίδιο', 'ανανάς', 'κεράσι', 'μήλο', 'μπανάνα', 'σύκο']
Tuples

To tuple είναι σαν λίστα με την διαφορά ότι είναι αμετάβλητη, δηλαδή δεν δέχεται αλλαγές.

Ορίζεται ως = (a,b)

tuple = (1, 2, 3, 'παπάκι')
print(type(tuple))
print(tuple)
<class 'tuple'>
(1, 2, 3, 'παπάκι')
Dictionaries

To dictionary είναι σαν λίστα με την διαφορά ότι η δομή της χωρίζεται σε key και value. To key είναι σαν ο τίτλος του πεδίου και πρέπει να είναι μοναδικό.

Ορίζεται ως ={key:value}.

dictionary = {'onoma':('Stratos','Nikos','Maria'),'epitheto':('Matzouranis','Georgiou','Papa')}
print(dictionary)
{'onoma': ('Stratos', 'Nikos', 'Maria'), 'epitheto': ('Matzouranis', 'Georgiou', 'Papa')}

Με την εντολή .key μπορούμε να δούμε τα κλειδιά που έχει.

print(dictionary.keys())
dict_keys(['onoma', 'epitheto'])

Μπορούμε να εκτυπώσουμε όλα τα ονόματα που ανήκουν στο κλειδί όνομα:

print(dictionary.keys())
dict_keys(['onoma', 'epitheto'])

Μπορούμε να εκτυπώσουμε όλα τα ονόματα που ανήκουν στο κλειδί όνομα:

print(dictionary['onoma'])
('Stratos', 'Nikos', 'Maria')

Μπορούμε να εκτυπώσουμε μόνο το τρίτο όνομα:

print(dictionary['onoma'][2])
Maria

ή όλες τις τιμές:

print(dictionary.values())
dict_values([('Stratos', 'Nikos', 'Maria'), ('Matzouranis', 'Georgiou', 'Papa')])
Δημιουργία και προβολή πολυδιάστατου πίνακα

Ας κάνουμε κάτι πιο advanced, μια λίστα 4×3 εκτυπωμένη σαν πίνακας.Για να καταφέρουμε κάτι τέτοιο θα πρέπει να χρησιμοποιήσουμε loops όπως παρακάτω:

z = [
    [i for i in range(4)] 
         for j in range(3)
    ]
for rows in range(len(z)):
        for col in range(len(z[0])):
            print(z[rows][col],end='|')
        print('\n-----------')
0|1|2|3|
-----------
0|1|2|3|
-----------
0|1|2|3|
-----------
Functions

Ένα κομμάτι κώδικα που εκτελείτε μόνο όταν το καλούμε εμείς ονομάζεται function. H function μπορεί να δεχτεί παραμέτρους που θα επηρεάσουν την εκτέλεση της. Πάμε να δούμε ένα παράδειγμα:

def Dokimifunction(onoma,posa=1):
    timi = onoma+'!'*posa
    return timi;

Η function αυτή δέχεται σαν παράμετρο ένα όνομα και σαν δεύτερη παράμετρο έναν αριθμό, ο οποίος αριθμός είναι οι φορές που θα εμφανίζεται το θαυμαστικό στο τέλος. Στις παραμέτρους μπορούμε να δώσουμε μια default τιμή ώστε αν δεν έχει δηλωθεί να ισχύσει αυτή:

*αν δεν το κάναμε όταν δεν θα ορίζαμε τον αριθμό θα μας επέστρεφε error.

xristis='Κώστας'
print(Dokimifunction(xristis))
print(Dokimifunction(xristis,5))
Κώστας!
Κώστας!!!!!
Error Handling

Πάμε να δούμε τι τιμή έχει η παράμετρος “timi” που ορίζεται στην function:

print(timi)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-226-e0b6617a2c0c> in <module>
----> 1 print(timi)

NameError: name 'timi' is not defined

Ωχ… οι μεταβλητές μέσα σε μία function από default δεν είναι global οπότε ευκαιρία να δούμε πως δουλεύει το error handling:

try:
    print(timi)
except:
    print("Oops! Δεν υπάρχει...")

Oops! Δεν υπάρχει...
Classes (κλάσεις)

Για να μπορούμε να κληρονομήσουμε σε ένα object με μία σειρά από ιδιότητες και μεθόδους από έναν αρχικό σχεδιασμό χρειαζόμαστε τις κλάσεις.

Η κλάση αποτελείτε από έναν constructor που ονομάζεται init και μεταφέρει τις ιδιότητες του στο object που δημιουργείται, έναν constructor για τις παραμέτρους που ονομάζεται self και από εκεί και πέρα μπορούμε να προσθέσουμε και άλλες παραμέτρους και άλλα functions που θα περιέχει.

Πάμε να φτιάξουμε μια γρήγορη κλάση που θα μπορεί να προσθέτει και να εμφανίζει δύο αριθμούς:

class Prosthesi: 
    a = 0
    b = 0
    apotelesma = 0
      
    #To def __init__ ονομάζεται constructor και χρειάζεται πάντα για να δημιουργηθεί το object.
    #self είναι ο constructor της αρχικοποίησης των παραμέτρων 
    def __init__(self, timi_tou_a, timi_tou_b): 
        self.a = timi_tou_a
        self.b = timi_tou_b
      
    def show(self): 
        print("ο πρώτος αριθμός = " + str(self.a)) 
        print("ο δεύτερος αριθμός = " + str(self.b)) 
        print("η πρόσθεση = " + str(self.apotelesma)) 
  
    def ipologise(self): 
        self.apotelesma = self.a + self.b

Για να φτιάξουμε το object με την κληρονομιά της κλάσης για τους αριθμούς 13 και 28 εκτελούμε το κάτωθι:

mathimatika=(Prosthesi(13,28))

Με και το όνομα της function μπορούμε να τη καλέσουμε:

mathimatika.show()
ο πρώτος αριθμός = 13
ο δεύτερος αριθμός = 28
η πρόσθεση = 0

Βλέπουμε ότι η πρόσθεση έβγαλε μηδέν καθώς δεν εκτελέστηκε η function που κάνει τον υπολογισμό πρώτα. Πάμε πάλι:

mathimatika.ipologise()
mathimatika.show()
ο πρώτος αριθμός = 13
ο δεύτερος αριθμός = 28
η πρόσθεση = 41

Βλέπουμε αυτή την φορά λειτούργησε μια χαρά.

Modules

Μπορούμε να εισάγουμε ένα πακέτο functions, classes και μεταβλητών που ονομάζεται module με την εντολή import.

Πάμε να δούμε πως εισάγουμε ένα buildin module για μαθηματικά και να καλέσουμε και ένα function για υπολογισμό του pi :

import math
print(math.pi)
3.141592653589793

Μπορούμε και να φορτώσουμε μόνο συγκεκριμένη function από το module.

Επίσης μπορούμε να της ορίσουμε ένα alias για να μην χρειάζεται να τη καλούμε με ολόκληρο το όνομα του module συν του function:

from random import randrange as rr

#random.randrange(100) είναι το ίδιο με το από κάτω.
rr(100)
Πως κάνουμε εγκατάσταση ένα module

Για να εγκαταστήσουμε ένα custom module από το internet η εντολή είναι pip install:

pip install pandas

Ελπίζω να αντέξατε μέχρι τέλους, σε άλλα άρθρα θα δούμε παραδείγματα με custom βιβλιοθήκες που εκεί κρύβονται οι πραγματικές δυνατότητες της.

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση