Python Φύλλο Οδηγιών
Η Python είναι μια γλώσσα προγραμματισμού υπολογιστών πολλαπλών πλατφορμών. Είναι μια αντικειμενοστραφής γλώσσα με δυναμικό τύπο, που αρχικά σχεδιάστηκε για τη συγγραφή σεναρίων αυτοματισμού (shell). Με τις συνεχείς ενημερώσεις εκδόσεων και την προσθήκη νέων λειτουργιών της γλώσσας, χρησιμοποιείται ολοένα και περισσότερο για την ανάπτυξη ανεξάρτητων, μεγάλων έργων.
Γενικά
- Η Python διακρίνει πεζά από κεφαλαία γράμματα
- Η δεικτοδότηση στην Python ξεκινά από το 0
- Η Python χρησιμοποιεί κενό διάστημα (στηλοθέτες ή κενά) για την εσοχή του κώδικα, αντί για άγκιστρα.
Βοήθεια
| Αρχική σελίδα βοήθειας | help() |
| Βοήθεια για συνάρτηση | help(str.replace) |
| Βοήθεια για ενότητα (module) | help(re) |
Ενότητες (Βιβλιοθήκες)
| Λίστα περιεχομένων ενότητας | dir(module1) |
| Φόρτωση ενότητας | import module1 * |
| Κλήση συνάρτησης από ενότητα | module1.func1() |
Η δήλωση import δημιουργεί ένα νέο χώρο ονομάτων και εκτελεί όλες τις δηλώσεις στο σχετικό αρχείο .py.
Εάν θέλετε να φορτώσετε το περιεχόμενο της ενότητας στον τρέχοντα χώρο ονομάτων, χρησιμοποιήστε το from module1 import *.
Βαθμωτοί Τύποι
Έλεγχος τύπου δεδομένων: type(variable)
Ακέραιοι (Integers)
int/long - Οι μεγάλοι ακέραιοι μετατρέπονται αυτόματα σε long.
Αριθμοί κινητής υποδιαστολής (Floats)
float - 64-bit, δεν υπάρχει τύπος "double".
Boolean
bool - True ή False.
Συμβολοσειρές (Strings)
str - Στην Python 2.x η προεπιλογή είναι ASCII, στην Python 3 είναι Unicode.
- Οι συμβολοσειρές μπορούν να είναι σε μονά, διπλά ή τριπλά εισαγωγικά.
- Μια συμβολοσειρά είναι μια ακολουθία χαρακτήρων, επομένως μπορεί να αντιμετωπιστεί όπως άλλες ακολουθίες.
- Οι ειδικοί χαρακτήρες μπορούν να διαφύγουν με
\ή χρησιμοποιώντας το πρόθεμαrγια raw strings.str1 = r'this\f?ff' - Η μορφοποίηση συμβολοσειράς μπορεί να επιτευχθεί με πολλούς τρόπους:
template = '%.2f %s haha $%d' str1 = template % (4.88, 'hola', 2)
Οι συναρτήσεις str(), bool(), int() και float() είναι επίσης συναρτήσεις ρητής μετατροπής τύπου.
Τιμή Null
NoneType(None) - Η τιμή ’null’ στην Python (υπάρχει μόνο ένα στιγμιότυπο του αντικειμένου None).
- Το None δεν είναι δεσμευμένη λέξη-κλειδί, αλλά το μοναδικό στιγμιότυπο του “NoneType”.
- Το None είναι η συνήθης προεπιλεγμένη τιμή για προαιρετικές παραμέτρους συναρτήσεων:
def func1(a, b, c = None) - Συνήθης χρήση του None:
if variable is None:
Ημερομηνία και Ώρα
datetime - Ενσωματωμένη ενότητα “datetime”, η οποία παρέχει τύπους όπως “datetime”, “date”, “time”.
- Το “datetime” συνδυάζει τις πληροφορίες που είναι αποθηκευμένες στο “date” και το “time”.
Δημιουργία ημερομηνίας/ώρας από συμβολοσειρά dt1 = datetime.strptime(‘20091031’, ‘%Y%m%d’) Λήψη αντικειμένου “date” dt1.date() Λήψη αντικειμένου “time” dt1.time() Μορφοποίηση ημερομηνίας/ώρας σε συμβολοσειρά dt1.strftime(’%m/%d/%Y %H:%M’) Τροποποίηση πεδίων dt2 = dt1.replace(minute=0, second=30) Λήψη διαφοράς diff = dt1 - dt2 # το diff είναι ένα αντικείμενο ‘datetime.timedelta’
Δομές Δεδομένων
Πλειάδες (Tuples)
Μια πλειάδα είναι μια ακολουθία σταθερού μήκους που δεν μπορεί να τροποποιηθεί.
| Δημιουργία πλειάδας | tup1=4,5,6 ή tup1 = (6,7,8) |
| Δημιουργία ένθετης πλειάδας | tup1 = (4,5,6), (7,8) |
| Μετατροπή ακολουθίας ή επαναλήπτη σε πλειάδα | tuple([1, 0, 2]) |
| Σύνδεση πλειάδων | tup1 + tup2 |
| Αποσυσκευασία πλειάδας | a, b, c = tup1 |
| Ανταλλαγή μεταβλητών | b, a = a, b |
Λίστες
Η λίστα είναι μια ακολουθία μεταβλητού μήκους με τροποποιήσιμα στοιχεία.
| Δημιουργία λίστας | list1 = [1, ‘a’, 3] ή list1 = list(tup1) |
| Σύνδεση λιστών | list1 + list2 ή list1.extend(list2) |
| Προσθήκη σε λίστα | list1.append(‘b’) |
| Εισαγωγή σε θέση | list1.insert(posIdx, ‘b’) |
| Αφαίρεση στοιχείου μέσω δείκτη | valueAtIdx = list1.pop(posIdx) |
| Αφαίρεση πρώτης εμφάνισης τιμής | list1.remove(‘a’) |
| Έλεγχος αν η τιμή υπάρχει στη λίστα | 3 in list1 => True |
| Ταξινόμηση λίστας | list1.sort() |
| Ταξινόμηση με συνάρτηση χρήστη | list1.sort(key=len) # κατά μήκος |
Σημείωση:
- Ο δείκτης “start” συμπεριλαμβάνεται, αλλά ο δείκτης “stop” εξαιρείται.
- Τα start/stop μπορούν να παραλειφθούν, με προεπιλογή την αρχή/τέλος.
Τεμαχισμός (Slicing)
Οι τύποι ακολουθιών περιλαμβάνουν ‘str’, ‘array’, ’tuple’, ’list’ κ.λπ.
list1[start:stop]
list1[start:stop:step]
list1[::2]
str1[::-1]Λεξικά (Hash)
| Δημιουργία λεξικού | dict1 = {‘key1’ : ‘value1’, 2 : [3, 2]} |
| Λεξικό μέσω zip | dict(zip(keyList, valueList)) |
| Λήψη στοιχείου | dict1[‘key1’] |
| Αλλαγή/Προσθήκη στοιχείου | dict1[‘key1’] = ’newValue’ |
| Λήψη τιμής με προεπιλογή | dict1.get(‘key1’, defaultValue) |
| Έλεγχος ύπαρξης κλειδιού | ‘key1’ in dict1 |
| Διαγραφή στοιχείου | del dict1[‘key1’] |
| Λίστα κλειδιών | dict1.keys() |
| Λίστα τιμών | dict1.values() |
| Ενημέρωση λεξικού | dict1.update(dict2) |
Σύνολα (Sets)
Ένα σύνολο είναι μια μη διατεταγμένη συλλογή μοναδικών στοιχείων.
| Δημιουργία συνόλου | set([3, 6, 3]) ή {3, 6, 3} |
| Έλεγχος υποσυνόλου | set1.issubset(set2) |
| Έλεγχος υπερσυνόλου | set1.issuperset(set2) |
| Έλεγχος ισότητας συνόλων | set1 == set2 |
| Ένωση (or) | set1 |
| Τομή (and) | set1 & set2 |
| Διαφορά | set1 - set2 |
| Συμμετρική διαφορά (xor) | set1 ^ set2 |
Συναρτήσεις
-
Βασική μορφή
def func1(posArg1, keywordArg1 = 1, ..): -
“Η συνάρτηση είναι αντικείμενο” - συνήθης χρήση:
def func1(ops = [str.strip, user_define_func, ..], ..): for function in ops: value = function(value) -
Επιστρεφόμενη τιμή
- Εάν δεν υπάρχει δήλωση
return, η συνάρτηση επιστρέφειNone. - Επιστροφή πολλαπλών τιμών μέσω πλειάδας:
return (value1, value2) value1, value2 = func1(..) - Εάν δεν υπάρχει δήλωση
-
Ανώνυμες συναρτήσεις (Lambda)
lambda x : x * 2 # ισοδύναμο: def func1(x) : return x * 2
Χρήσιμες συναρτήσεις
-
Enumerate: Επιστρέφει μια ακολουθία πλειάδων (δείκτης, τιμή).
for key, val in enumerate(collection): -
Sorted: Ταξινομεί οποιοδήποτε επαναλήψιμο αντικείμενο.
sorted([2, 1, 3]) => [1, 2, 3] -
Zip: Ομαδοποιεί τα στοιχεία από πολλαπλές ακολουθίες σε πλειάδες.
zip(seq1, seq2) => [('seq1_1', 'seq2_1'), (..), ..] -
Reversed: Επιστρέφει έναν αντίστροφο επαναλήπτη.
list(reversed(range(10)))
Έλεγχος Ροής
-
Τελεστές υπό συνθήκη:
Έλεγχος αν τα αντικείμενα είναι πανομοιότυπα var1 is var2 Έλεγχος αν τα αντικείμενα είναι διαφορετικά var1 is not var2 Έλεγχος αν οι τιμές είναι ίσες var1 == var2 -
Συνήθης χρήση του ‘for’:
for element in iterator: -
‘pass’ - δεν κάνει τίποτα, χρησιμοποιείται ως placeholder.
-
Τριαδική έκφραση:
value = true-expr if condition else false-expr -
Δεν υπάρχει δήλωση switch/case, χρησιμοποιείται το
if/elif.
Αντικειμενοστραφής Προγραμματισμός
-
Το ‘object’ είναι η βάση για όλους τους τύπους της Python.
-
Οτιδήποτε (αριθμός, συμβολοσειρά, συνάρτηση, κλάση, ενότητα) είναι ένα αντικείμενο και έχει έναν τύπο (’type’). Οι μεταβλητές είναι δείκτες προς τη θέση τους στη μνήμη.
-
Βασική μορφή κλάσης:
class MyObject(object): # το 'self' είναι το αντίστοιχο του 'this' σε Java/C++ def __init__(self, name): self.name = name def memberFunc1(self, arg1): .. @staticmethod def classFunc2(arg1): .. obj1 = MyObject('name1') obj1.memberFunc1('a') MyObject.classFunc2('b') -
Εργαλείο επιθεώρησης:
dir(variable1) # Παραθέτει όλες τις διαθέσιμες μεθόδους του αντικειμένου
Λειτουργίες Συμβολοσειρών
Σύνδεση λίστας/πλειάδας με διαχωριστικό:
', '.join([ 'v1', 'v2', 'v3']) => 'v1, v2, v3'Μορφοποίηση συμβολοσειράς:
string1 = 'My name is {0} {name}'
newString1 = string1.format('Sean', name = 'Chen')Διαχωρισμός συμβολοσειράς:
sep = '-'
stringList1 = string1.split(sep)Τεμαχισμός συμβολοσειράς:
start = 1
string1[start:8]Συμπλήρωση με μηδενικά (zfill):
month = '5'
month.zfill(2) => '05' Διαχείριση Εξαιρέσεων
- Βασική μορφή
try:
..
except ValueError as e:
print(e)
except (TypeError, AnotherError):
..
except:
..
finally:
..- Χειροκίνητη εγρήγορση εξαιρέσεων:
raise AssertionError # Αποτυχία διαβεβαίωσης
raise SystemExit # Αίτημα εξόδου προγράμματος
raise RuntimeError('Error message :..')List, Set και Dict Comprehensions
Συντακτική “ζάχαρη” για πιο ευανάγνωστο κώδικα.
-
List Comprehension: Δημιουργεί μια νέα λίστα φιλτράροντας και μετασχηματίζοντας τα στοιχεία μιας συλλογής.
[expr for val in collection if condition] -
Dictionary Comprehension:
{key-expr : value-expr for value in collection if condition} -
Set Comprehension: Το ίδιο με το list comprehension, αλλά χρησιμοποιώντας
{}αντί για[]. -
Nested List Comprehension:
[expr for val in collection for innerVal in val if condition]