4 η Διάλεξη Python - Συναρτήσεις

Σχετικά έγγραφα
Θέματα Προγραμματισμού Η/Υ

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στον Προγραμματισμό Python Μάθημα 4: Συναρτήσεις (functions) και δομοστοιχεία (modules) στην Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ (ΟΜΑΔΑ ΘΕΜΑΤΩΝ A)

Πληροφορική ΙΙ Θεματική Ενότητα 8

ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ

Σημειωματάριο Δευτέρας 30 Οκτ. 2017

Εισαγωγή στον Προγραμματισμό

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Φύλλο Εργασίας 3. Μια γρήγορη επανάληψη από τα προηγούμενα

Γλώσσες Προγραμματισμού Εφαρμογών - ΜΕΠΒ20

Θέματα Προγραμματισμού Η/Υ

Γλώσσα προγραμματισμού python

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι ; Συναρτήσεις. Παράδειγμα #1. double convert ( double cm ) { double inch;

Σημειώσεις. Ο αριθμός των στοιχείων μίας λίστας μπορεί να βρεθεί με χρήση της συνάρτησης len:

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Έλεγχος Ροής - Παραδείγµατα Χειµερινό Εξάµηνο 2014

Σημειώσεις. Ο αριθμός των στοιχείων μίας λίστας μπορεί να βρεθεί με χρήση της συνάρτησης len:

Βασικές Ασκήσεις από τα Εργαστήρια της PYTHON (εβδομάδα 5)

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Θέματα Προγραμματισμού Η/Υ

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Συναρτήσεις και διαδικασίες

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Δρ. Ιωάννης Λυχναρόπουλος Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις I Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Πληρουορική Γ Γσμμασίοσ

Συναρτήσεις. ΚΕΡΟΣ ΓΙΑΝΝΗΣ, ΠΕ19 1ο ΕΠΑΛ ΚΙΛΚΙΣ. Κέρος Α. Ιωάννης Καθηγητής Πληροφορικής ΠΕ19 1 ο ΕΠΑΛ Κιλκίς

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

ΠΛΗΡΟΦΟΡΙΚΗ Ι Σημειώσεις Python Ενότητα 3 Ν. Φερεντίνος. ΠΛΗΡΟΦΟΡΙΚΗ Ι (Python) Ενότητα 3. Συναρτήσεις

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Προγραμματισμός ΙI (Θ)

Εισαγωγή στον Προγραμματισμό

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

Ανάπτυξη και Σχεδίαση Λογισμικού

song='''εγώ μετράω τα ρέστα μου να βγάλω κι άλλο μήνα

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

ΠΛΗΡΟΦΟΡΙΚΗ Ι (Python) Ενότητα 4

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

Εισαγωγή στον Προγ/μό Υπολογιστών

Λίστες. Lista=[ red, green, blue ] Το πλήθος των στοιχείων μια λίστας δίνεται από τη συνάρτηση len(): Len(Lista)

Προγραµµατιστικές Τεχνικές

Δομημένος Προγραμματισμός (ΤΛ1006)

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Μεθόδων Επίλυσης Προβλημάτων

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναδροµικές Συναρτήσεις Χειµερινό Εξάµηνο 2014

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Σημειωματάαριο Δευτέρας 16 Οκτ. 2017

Συναρτήσεις. Εισαγωγή

Λογικές εκφράσεις και μεταβλητές

Περιεχόμενα. Πρόλογος...11

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

Εισαγωγή στον Προγραμματισμό με C++

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος

Ενδεικτική περιγραφή μαθήματος

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Κατανεμημένα Συστήματα

Βασικά στοιχεία γλώσσας προγραμματισμού. Σπάχος Κυριάκος Καθηγητής Πληροφορικής ΠΕ19

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό

Διάλεξη 1. Πράξεις Τελεστές Έλεγχος Ροής

Υπολογισμός - Εντολές Επανάληψης

Κεφάλαιο 10 ο Υποπρογράµµατα

Η γλώσσα προγραμματισμού C

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Προγραμματισμός Η/Υ. Ενότητα 3: Top Down Σχεδιασμός

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Προγραμματιστικά Εργαλεία και Τεχνολογίες για Επιστήμη Δεδομένων

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στον Προγραμματισμό Python Μάθημα 1: Μεταβλητές, τελεστές, είσοδος/έξοδος προγράμματος, συνθήκη ελέγχου if Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Λίστα. Το διάνυζμα (vector) στο Mathematica είναι μια λίστα που έχει τα στοιχεία. Ο πίνακας ( matrix ) είναι λίστα απο τις λίστες.

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

8. Μέθοδοι (Methods)

print( x is positive ) Στο διερμηνευτή Python, προσοχή στη στοίχιση, διότι γίνεται από το χρήστη:

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Παίρνοντας Αποφάσεις 1

ΘΕΜΑΤΑ ΚΑΙ ΛΥΣΕΙΣ. 1) Έστω η λογική συνάρτηση F = A' + Β'. D + B. C' + C. D' (όπου οι τόνοι δηλώνουν συμπληρώματα).

Νέο υλικό. Matlab2.pdf - Παρουσίαση μαθήματος 2. Matlab-reference.pdf Σημειώσεις matlab στα ελληνικά (13 σελίδες).

Η βασική συνάρτηση προγράμματος main()

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Πληροφορική ΙΙ Θεματική Ενότητα 12

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

ΠΕΡΙΕΧΟΜΕΝΑ Τμηματικός προγραμματισμός Χαρακτηριστικά των υποπρογραμμάτων Πλεονεκτήματα του τμηματικού προγραμματισμού Παράμετροι Διαδικασίες και

Προγραμματισμός Η/Υ. Ενότητα 7: Συναρτήσεις

Μεθοδολογία Προγραμματισμού

Προγραμματισμός Η/Υ. Συναρτήσεις & Υποπρογράμματα. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Η γλώσσα προγραμματισμού C

Transcript:

4 η Διάλεξη Python - Συναρτήσεις

Συναρτήσεις Οι συναρτήσεις µας επιτρέπουν την ομαδοποίηση κώδικα που επιτελεί µια συγκεκριμένη λειτουργία και, κατά συνέπεια, την ευκολότερη επαναχρησιμοποίησή του. Επιπλέον, επιτρέπουν τον σχεδιασμό του τελικού συστήματος λογισμικού σε ένα υψηλότερο επίπεδο αφαίρεσης, όπου οι λειτουργικότητα παρέχεται µέσω συναρτήσεων Στην συνέχεια απομένει η υλοποίηση αυτών, μέχρι του σημείου όπου οι μικρότερες δομικές μονάδες που χρησιμοποιούνται, παρέχονται ήδη από το σύστημα. Ορισμός: Συνάρτηση είναι μια αυτόνομη μονάδα κώδικα που σχεδιάστηκε για να εκτελεί μια συγκεκριμένη εργασία

Συναρτήσεις Η γενική μορφή μια συνάρτησης έχει τη μορφή: def όνομα_συνάρτησης (παράμετροι): εντολές return αποτέλεσμα/τα Ο ορισμός μιας συνάρτησης γίνεται με τη λέξη κλειδί def ακολουθεί το όνομα της συνάρτησης και ένα ζευγάρι παρενθέσεων με την προαιρετική λίστα παραμέτρων. Το όνομα της συνάρτησης ακολουθεί τους κανόνες ονοματολογίας των μεταβλητών Το όνομα μιας συνάρτησης πρέπει να είναι μοναδικό και όσο το δυνατόν περιγραφικό

Συναρτήσεις Η λίστα παραμέτρων αποτελείται από μεταβλητές που χωρίζονται μεταξύ τους με κόμμα και αποτελούν τις τιμές εισόδου της συνάρτησης. Με τις παραμέτρους γίνεται το πέρασμα τιμών από την καλούσα συνάρτηση στη καλούμενη, οι μεταβλητές αυτές αποτελούν «τοπικές μεταβλητές» της συνάρτησης Η εντολή return είναι προαιρετική και προκαλεί άμεση έξοδο από τη συνάρτηση Η κλήση μιας συνάρτησης έχει τη γενική μορφή: όνομα_συνάρτησης(λίστα_παραμέτρων)

Συναρτήσεις >>> def sayhello(a): print(a) return Ή def sayhello(): print('γειά σου κόσμε')

Κατηγορίες συναρτήσεων Συναρτήσεις χωρίς παραμέτρους που δεν επιστρέφουν τιμή Συνήθως εμφανίζουν κάτι στην οθόνη: >>> def ektipositetragoou(): print('******') print('* *') print('* *') print('* *') print('* *') print('******')

Κατηγορίες συναρτήσεων Συναρτήσεις χωρίς παραμέτρους που επιστρέφουν τιμή: Αν και δεν έχουν παραμέτρους επιστρέφουν μια τιμή: def zari(): return random.randint(1,6) Η κλήση της συνάρτησης γίνεται: k=zari() print(k) Ή print(zari())

Κατηγορίες συναρτήσεων Συναρτήσεις με παραμέτρους που δεν επιστρέφουν τιμή: Οι συναρτήσεις αυτής της κατηγορίας δέχονται κάποια τιμή και εμφανίζουν ένα αποτέλεσμα στην οθόνη:

Κατηγορίες συναρτήσεων Συναρτήσεις με παραμέτρους που επιστρέφουν τιμή:

Παράδειγμα

Εμβέλεια μεταβλητών Με τον όρο εμβέλεια μιας μεταβλητής εννοούμε το τμήμα του προγράμματος στο οποίο μια αναφορά στη μεταβλητή είναι έγκυρη. Κάθε συνάρτηση ορίζει ένα νέο χώρο εμβέλειας, ο οποίος αναφέρεται και ως χώρος ονομάτων (namespace). Οι μεταβλητές που δηλώνονται μέσα σε μια συνάρτηση ονομάζονται τοπικές (local) μεταβλητές και έχουν εμβέλεια μόνο μέσα στη συνάρτηση. Οι παράμετροι μιας συνάρτησης θεωρούνται τοπικές μεταβλητές της συνάρτησης Οι τοπικές μεταβλητές καταστρέφονται μόλις εκτελεστούν όλες οι εντολές της συνάρτησης ή την εγκαταλείψουμε με την εντολή return Επιτρέπεται η δήλωση μεταβλητών με το ίδιο όνομα μέσα στο κυρίως πρόγραμμα και σε μια συνάρτηση

Εμβέλεια μεταβλητών Παράδειγμα # 5-02.py def foo(): x = 10 print(x) def bar(): print(x) x = 99 foo() bar() print(x) # a local variable with the same name # no local variable x exist in bar Στη συνάρτηση bar που δεν υπάρχει τοπική μεταβλητή με το όνομα χ η print τυπώνει τη μεταβλητή χ του κυρίως προγράμματος. Αν τροποποιήσουμε τη bar: def bar(): print(x) x= geia sou print(x) Θα πάρουμε σφάλμα :local variable x referenced before assignment, και αυτό γιατί η μεταβλητή χ αντιμετωπίζεται πλέον ως τοπική μεταβλητή και γίνεται αναφορά σε αυτή πριν της δώσουμε κάποια τιμή

Εμβέλεια μεταβλητών Για να τροποποιήσουμε μέσα από μια συνάρτηση μια μεταβλητή δηλωμένη εκτός αυτής είναι με τη χρήση του προσδιοριστικού global: # 5-03.py def foo(): global x print('in foo, x is', x) x = 10 print('in foo, x is now', x) x = 99 foo() print('x is', x) Μια συνάρτηση μπορεί να διαβάσει την τιμή μιας εξωτερικής μεταβλητής, εφόσον δεν υπάρχει τοπική μεταβλητή με το ίδιο όνομα. Δεν μπορεί να τροποποιήσει την τιμή της χωρίς τον προσδιοριστεί global

Παράμετροι και Ορίσματα Όταν γίνεται κλήση μιας συνάρτησης με ορίσματα τότε αντιγράφεται η τιμή ενός ορίσματος στην αντίστοιχη τυπική παράμετρο της συνάρτησης. Η Python μας παρέχει τη δυνατότητα να ορίσουμε συναρτήσεις με προεπιλεγμένες τιμές ορισμάτων, με αποτέλεσμα κατά την κλήση της συνάρτησης να μπορούμε να παραλείψουμε τα συγκεκριμένα ορίσματα. Τα ορίσματα προεπιλεγμένης τιμής ονομάζονται keyword arguments σε αντίθεση με τα ορίσματα θέσης (position-all) όπου υπάρχει αντιστοιχία θέσης μεταξύ ορίσματος και παραμέτρου. Η προεπιλεγμένη τιμή ορίσματος πρέπει να έχει σταθερή τιμή και να καθορίζεται στον ορισμό της συνάρτησης: def sayhello(times=1): print( Γειά σου *times) Στην πρώτη περίπτωση στο πρόγραμμα της εικόνας δεν καθορίζουμε όρισμα οπότε το times παίρνει τη προκαθορισμένη τιμή

Παράδειγμα # 5-04.py def rectangularvolume(l, w, h=1): # default height is 1 return l * w * h print(rectangularvolume(1, 2)) # l=1, w=2, h=1 print(rectangularvolume(1, 2, 3)) # l=1, w=2, h=3 print(rectangularvolume(h=7, w=2, l=1)) # l=1, w=2, h=7 print(rectangularvolume(w=2, l=1)) # l=1, w=2, h=1 print(rectangularvolume(5, h=2, w=1)) # l=5, w=1, h=2 print(rectangularvolume(8, w=1)) # l=8, w=1, h=1

Μεταβλητός αριθμός ορισμάτων Για να περάσουμε σε μια συνάρτηση μεταβλητό αριθμό ορισμάτων, πρέπει να βάλουμε έναν * πριν το όνομα του ορίσματος, έτσι ώστε python στη συνέχεια να χειρίζεται το όρισμα ως πλειάδα. (non- keyworded) # 5-05.py def foo(farg, *args): print('formal argument:', farg) print('and now the arguments through *args:') for arg in args: print(arg) foo('nestos', [1, 3, 5, 7], 'Karadere', 3.14)

Μεταβλητός αριθμός ορισμάτων Αν βάλουμε 2 αστερίσκους μπορούμε να περάσουμε στη συνάρτηση έναν μεταβλητό αριθμό ορισμάτων (λεξικό). (keyworded variable length of arguments) # 5-06.py - def bar(farg, **kwargs): print('formal arg:', farg) print('and now the arguments through **kwargs:') for key in kwargs: print('%s: %s' % (key, kwargs[key])) bar('thassos', fname='soula', lname='pappa', age=21) Αν χρειαστεί να χρησιμοποιήσουμε και τους 3 τύπους παραμέτρων πρέπει να ακολουθήσουμε τη σειρά: formal, *args,***kwargs.

Αλφαριθμητικά τεκμηρίωσης Για να κάνουμε το κώδικά μας πιο κατανοητό είναι στις συναρτήσεις πρέπει να βάζουμε στην επόμενη γραμμή μετά την επικεφαλίδα ένα σχόλιο ανάμεσα σε 3πλά quotes το οποίο περιγράφει τη λειτουργία της συνάρτησης. Το αλφαριθμητικό αυτό ονομάζεται docstring και έχουμε πρόσβαση σε αυτό μέσω της ιδιότητας doc # 5-07.py def rectangularvolume(l, w, h=1): """ Compute and return the volume of a rectangular: rectangularvolume(length, width, height) If height is not given, default value is 1 """ return l * w * h print(rectangularvolume. doc )

Αναδρομή - Recursion Αναδρομή (recursion): μια συνάρτηση καλεί τον εαυτό της. Ο τερματισμός μιας τέτοιας αναδρομής γίνεται με μια συνθήκη: def name(arguments): if συνθήκη: else return λύση return κλήση της συνάρτησης Παρατηρούμε ότι χωρίς συνθήκη η συνάρτηση συνεχώς καλεί τον ευατό της μέχρι να δημιουργηθεί σφάλμα εκτέλεσης

Παράδειγμα Εύρεση του n! (πχ 4!=1*2*3*4=24) 1 η μέθοδος (επαναληπτική) def nparagontiko(n): a=1 for i range(1,n+1): a=a*i return(a) 2 η μέθοδος recursive: def nparagontiko(n): if n<=1: return 1 else : return n*nparagontiko(n-1) ΚΛΗΣΗ ΤΙΜΗ ΑΝΑΛΥΣΗ nparagontiko(5) 5*nparagontiko(4) 5*(4*3*2*1)=120 nparagontiko(4) 4*nparagontiko(3) 4*(3*2*1)=24 nparagontiko(3) 3*nparagontiko(2) 3*(2*1)=6 nparagontiko(2) 2*nparagontiko(1) 2*1=2 nparagontiko(1) 1

Παράδειγμα # 5-09.py def sum(list): if list == []: # if empty list return 0 return 0 else: return list[0] + sum(list[1:]); mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print('sum of elements is %d' % sum(mylist)); Στο παραπάνω παράδειγμα βρίσκουμε το άθροισμα των στοιχείων μιας λίστας

Συναρτήσεις lambda με τη λέξη κλειδί lambda μπορούμε να ορίσουμε συναρτήσεις μιας γραμμής (συνήθως ανώνυμες) και να τις χρησιμοποιήσουμε αργότερα στο πρόγραμμά μας : Γενική μορφή: lambda arg1,arg2, argn : Παράσταση με χρήση των ορισμάτων >>> f=lambda x,y :x+y # υπολογίζει το άθροισμα 2 αριθμών >>> f(2,3) 5 Μπορούμε να ορίσουμε μια συνάρτηση που να έχει παράμετρο μια συνάρτηση lambda: >>> def synartisi(f,n): print(f(n)) >>> k=lambda n:n+1 >>> synartisi(k,10) 11

Συναρτήσεις lambda Μια συνάρτηση lambda έχει το δικό της χώρο ονομάτων και δεν μπορεί να προσπελάσει άλλες μεταβλητές εκτός αυτών της λίστας παραμέτρων της. Συναρτήσεις lambda χρησιμοποιούμε στη δημιουργία χειριστών συμβάντων στον προγραμματισμό γραφικών διεπαφών >>> tetragona=list(map(lambda x: x*x,range(11))) #Η map εφαρμόζει σε κάθε αριθμό από το 0 μέχρι το 10 την οριζόμενη συνάρτηση lambda >>> print(tetragona) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100] >>>mini=list(filter(lambda x: x<10, tetragona)) #Η filter παίρνει ως όρισμα μια συνα ρτηση lambda η οποία εμφανίζει τα στοιχεία της λίστας tetragona που είναι μικρότερα από το 10 >>> print(mini) [0, 1, 4, 9]

Γεννήτορες Generators Ένας γεννήτορας (generator) είναι μια ειδική συνάρτηση η οποία επιστρέφει μια ακολουθία τιμών. Πιο συγκεκριμένα επιστρέφει έναν επαναλήπτη (iterator) που μπορεί να χρησιμοποιηθεί σε βρόγχο: # 5-10.py def mygenerator(): yield 1 # η ακολουθία των τιμών δημιουργείται στοιχείο στοιχείο με την εντολή yield yield 2 yield 3 for i in mygenerator(): print(i) Κάθε φορά που εκτελείται η yield η συνάρτηση επιστρέφει μια νέα τιμή. Σε κάθε κλήση το γεννήτορα συνεχίζει την εκτέλεση από εκεί που είχε σταματήσει τη προηγούμενη φορά, δηλαδή δεν έχουμε τη δημιουργία κάποιας λίστας αλλά η έξοδος παράγεται τμηματικά. Εναλλακτικά θα μπορούσαμε να καλέσουμε και τη μέθοδο next του γεννήτορα

Γεννήτορες Generators # 5-11.py Fibonacci generator def fibonacci(n): a, b, i = 0, 1, 0 while True: if (i > n): return yield a a, b = b, a + b i += 1 f = fibonacci(10) for i in f: print(i, end=' ') Στο αποκάτω παράδειγμα δίνουμε σαν όρισμα στην ενσωματωμένη συνάρτηση sum ένα γεννήτορα που επιστρέφει τις τιμές των τετραγώνων από 1 έως 10 >>>sum(x**2 for x in range(1,11)) 385

Modules Ο τεμαχισμός του κώδικα σε κομμάτια τα οποία μπορούμε αργότερα να επαναχρησιμοποιήσουμε σε άλλα προγράμματα μας παρέχει μεγάλη ευελιξία. Ο τρόπος αυτός οργάνωσης του κώδικα ονομάζεται Modularity (τμηματοποίηση). Τα αρχεία αυτά ονομάζονται Modules και έχουν την κατάληξη.py, Η εισαγωγή τους σε ένα πρόγραμμα γίνεται με τις εντολές import ή from import Μετά την εισαγωγή τους έχουμε πρόσβαση στα αντικείμενα της μονάδας με την εξής εντολή: module.object Οποιοδήποτε αρχείο που περιέχει εντολές της Python μπορεί να χρησιμοποιηθεί ως module (Μονάδα)

Modules - Παράδειγμα Έστω ο παρακάτω κώδικας των οποίο αποθηκεύουμε με το όνομα test.py: def add(x,y): return x+y def substract(x,y): Mypi=3.14 return x-y print(mypi) Αν το εκτελέσουμε από γραμμή εντολών : >>>test.py θα πάρουμε 3.14 Προφανώς αυτό γίνεται λόγο της τελευταίας εντολής. Αν εισάγουμε το αρχείο ως μονάδα σε κάποιο άλλο πρόγραμμα: #testprog.py import test print(test.add(3,5)) Print(test.substract(10,test.Mypi) Θα πάρουμε : 3.14 8 6.86

Η συνάρτηση main() Η python δεν έχει κάποια βασική συνάρτηση main() όπως η c++, από την οποία να αρχίζει η εκτέλεση ενός προγράμματος. Ο διερμηνευτής της python πριν διαβάσει ένα αρχείο κώδικα ορίζει κάποιες ειδικές μεταβλητές, μια από αυτές είναι και name στην οποία εκχωρεί την τιμή main αυτό γίνεται για να ξεχωρίζει ο κώδικας που είναι για εκτέλεση από τα τμήματα κώδικα που ορίζουν κάποια λειτουργικότητα (Import). Όταν κάνουμε import κάποιο Module τότε η ειδική μεταβλητή name παίρνει ως τιμή το όνομα του αρχείου που κάνουμε import. Αυτή η διαφοροποίηση της τιμής μας επιτρέπει να ξεχωρίζουμε τις 2 αυτές λειτουργίες με μια απλή if: #mymodule test def foo(): pass If name == main_ : else: print( %s εκτέλεση % file ) print( name έχει τιμή %s % name ) print( %s είσήχθει το : % file ) print( name έχει τιμή: %s %_)name ) Αν εκτελέσουμε το πρόγραμμα θα εκτελεστούν οι εντολές του if : mymodule.py εκτέλεση name έχει τιμή: main Αν το κάναμε Import θα εκτελεστούν οι εντολές του τμήματος else:

Η συνάρτηση main() def add(x,y): return x+y def substract(x,y): return x-y Mypi=3.14 print(mypi) if name == main : #τροποποιώντας το προηγούμενο παράδειγμα όταν κάνουμε εισαγωγή σε ένα άλλο πρόγραμμα το test.py δεν θα τυπώνεται το Mypi print(mypi)

Παράδειγμα Το πρόγραμμα που ακολουθεί επιδεικνύει την κλήση ενός προγράμματος με ορίσματα από την γραμμή εντολών: # 5-12.py import sys for arg in sys.argv: print(arg) print('total %d arguments' % len(sys.argv)) Ένα στιγμιότυπο της κλήσης του προγράμματος είναι: C:> python 5-12.py athina att gre 5.12.py athina att gre Total 4 arguments

Πακέτα - Packages Τα πακέτα είναι συλλογές από ομοειδείς μονάδες οργανωμένα σε καταλόγους και υποκαταλόγους. Κάθε πακέτο είναι ένας κατάλογος που πρέπει να περιέχει ένα ειδικό αρχείο με το όνομα init.py το οποίο σηματοδοτεί ότι ο συγκεκριμένος κατάλογος αποτελεί ένα πακέτο. Αν στο αρχείο ορίζεται μια λίστα με όνομα all, τότε η τιμή της λίστας καθορίζει τα περιεχόμενα του πακέτου όταν γίνεται εισαγωγή με την εντολή from package import* Παράδειγμα :δομή των καταλόγων του πακέτου supermath supermath/ init.py algebra/ init.py linear.py geometry/ polynomial.py boolean.py init.py line.py polygon.py import supermath.geometry.polygon import supermath.geometry.polygon.draw(args) Αν κάνουμε εισαγωγή με την εντολή: from supermath.geometry.polygon import draw Μπορούμε στη συνέχεια να καλούμε απλά με το όνομά του: draw(args)

Παραδείγματα Να φτιαχτεί συνάρτηση η οποία θα δέχεται έναν ακέραιο και θα τυπώνει το χαρακτήρα * τόσες φορές όσο είναι η τιμή του αριθμού: # 5-14.py def printstar(n): while n > 0: print('*', end=' ') n -= 1 #μείωση κατά 1 printstar(5) print() printstar(10)

Παραδείγματα Υπολογισμός της απόλυτης τιμής ενός αριθμού: # 5-15.py def myabs(x): if x < 0: return -x else: return x n = int(input('give an integer: ')) print('absolute value of %d is %d' % (n, myabs(n)));

Παραδείγματα Το παρακάτω πρόγραμμα καλεί μια συνάρτηση η οποία δέχεται 3 ακέραιους αριθμούς και επιστρέφει τον ενδιάμεσο αυτών: # 5-16.py def getmedian(a, b, c): if ((a <= b) and (a >= c)) or ((a >= b) and (a <= c)): median = a; elif ((b <= a) and (b >= c)) or ((b >= a) and (b <= c)): else: median = b; median = c; return median; x, y, z = [int(n) for n in input('give 3 integers:').split()] print('median is %d' % getmedian(x,y,z))

Παράδειγμα: μετατροπή ίντσες σε εκατοστά # 5-17.py def convert(inches): return inches * 2.54 inches = float(input(πόσο ψηλός είσαι σε ίντσες? ')) print('you are %.2f cm tall.' % convert(inches))

Παράδειγμα: Λύση Δευτεροβάθμιας # 5-18.py from math import sqrt def diakrinousa(a, b, c): return b*b - 4*a*c def printsolution(a, b, c): D = diakrinousa(a, b, c) if D < 0: print( Δεν έχει πραγματικές ρίζες.') elif D == 0: x1 = -b/(2*a) print( μια μοναδική λύση %f' % x1) else: x1 = (-b + sqrt(d))/(2*a) x2 = (-b - sqrt(d))/(2*a) print( Δύο λύσεις: %.2f, %.2f' %(x1, x2)) printsolution(2, 3, -4)

Παράδειγμα Να γραφεί πρόγραμμα το οποίο θα καλεί μια συνάρτηση η οποία θα δέχεται έναν ακέραιο και θα επιστρέφει το άθροισμα των ψηφίων του: # 5-19.py def digitsum(a): sum = 0 while a!= 0: sum += a % 10 #εξάγουμε ένα ψηφίο από τον αριθμό και τον προσθέτουμε στο sum a = a / 10 return sum #διαιρούμε με το 10 για να επαναλάβουμε τη διαδικασία num = int(input('give an integer: ')) print('sum of digits is %d\n' % digitsum(num))

Παραδείγματα Να γραφεί πρόγραμμα που θα καλεί συνάρτηση η οποία θα δέχεται 2 τιμές και θα επιστρέφει άθροισμα και γινόμενο # 5-20.py def addply(p, q): p, q = p+q, p*q return p, q x, y = addply(3, 5) print('%d %d' % (x, y)) Για να επιστρέψουμε 2 ή περισσότερες τιμές από μια συνάρτηση θα πρέπει να επιστρέψουμε μια πλειάδα ή άλλη δομή και να θέσουμε τις τιμές σε μεταβλητές

Παραδείγματα Να γραφεί πρόγραμμα που να υπολογίζει το ημίτονο ενός τόξου χρησιμοποιώντας το τύπο: x- # 5-21.py import math def fact(n): f = 1; for i in range(1, n+1): f *= i return f def sinus(x, n): sum = 0.0 sign = 1; for i in range(1, n+1): element = sign * pow(x,2*i-1) / fact(2*i-1) #η συνάρτηση fact υπολογίζει το παραγοντικό sign *= -1; sum += element return sum; deg = int(input('give degrees: ')) n = int(input('give count of terms:')) rad = math.pi * deg / 180; #μετατροπή μοίρες σε ακτίνια print('sinus of %d is %f' % (deg, sinus(rad, n)))! +! -!.

Παραδείγματα Να φτιαχτεί συνάρτηση η οποία θα μετατρέπει ένα αριθμό από το δεκαδικό στο δεκαεξαδικό: # 5-27.py def dec2hex(dec): digits = '0123456789ABCDEF' i = (dec % 16) rest = dec // 16 if (rest == 0): return digits[i] return dec2hex(rest) + digits[i] if name == ' main ': try: num = int(input('enter a decimal to convert: ')) print('{0} is {1} in hexadecimal.'.format(num, dec2hex(num))) except ValueError: print('no valid input.')