PYTHON ΕΝΟΤΗΤΑ 18 – Functions (Part 1)

 


ΕΙΣΑΓΩΓΗ

Στο σημερινό δωρεάν μάθημα Python, σαν πρώτο βήμα, θα ορίσουμε τι είναι ένα function και γιατί τα functions γενικότερα είναι απαραίτητα στοιχεία του κώδικα μας. 

Στη συνέχεια θα δούμε πως συντάσσονται τα functions και ποια είναι η συνηθισμένη δομή τους. Τέλος, θα παρουσιάσουμε αρκετά παραδείγματα που καλύπτουν σχεδόν όλες τις περιπτώσεις που θα συναντήσετε σε ένα πρόγραμμα Python. Αυτό το δωρεάν μάθημα Python είναι το πρώτο μέρος της ανάλυσης μας.

WHY WE NEED FUNCTIONS

Πριν δούμε την δομή και το συντακτικό ενός function, ας δούμε ένα απλό παράδειγμα χρησιμοποιώντας τις γνώσεις που έχουμε αποκτήσει μέχρι τώρα. Θέλουμε λοιπόν να δημιουργήσουμε μια απλή εφαρμογή η οποία υπολογίζει τον μισθό ενός εργαζόμενου με βάση τις ώρες που έχει εργαστεί. Με όσα γνωρίζουμε μέχρι τώρα, ο κώδικας που θα αναπτύσσαμε θα ήταν ο εξής:

app.py

hours = int(input('Hours worked: '))
hourly_rate = float(input('Hourly rate: '))

salary = hours * hourly_rate

print('Your salary is ', salary)

Output

Hours worked: 35

Hourly rate: 25

Your salary is  875.0

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

app.py

hours = int(input('Hours worked: '))

hourly_rate = float(input('Hourly rate: '))

salary = hours * hourly_rate

taxes = (salary * 30) / 100

payment = salary - taxes

print('Your salary is ', salary)

print('Your taxes is ', taxes)

print('You will get paid the amount of', payment)

Output

Hours worked: 40

Hourly rate: 25

Your salary is  1000.0

Your taxes is  300.0

You will get paid the amount of 700.0

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

Τι είναι λοιπόν ένα function? Ένα function είναι η ομαδοποίηση γραμμών κώδικα που προσφέρουν μια συγκεκριμένη υπηρεσία. Για παράδειγμα, ο υπολογισμός του μισθού θα μπορούσε να είναι γραμμένος σαν function. Όταν θέλουμε να εκτελέσουμε την συγκεκριμένη υπηρεσία απλά καλούμε το όνομα του function και εκείνο θα εκτελέσει τον κώδικα που περιέχει.

Σκεφτείτε πόσο εύκολο θα είναι να διορθώσετε ή να επεκτείνετε τον κώδικα σας, αν αντί για αυτό:



έχετε οργανώσει τον κώδικα σας με functions.



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

Το πιο σημαντικό πλεονέκτημα όμως είναι ότι αποφεύγετε να επαναλαμβάνετε τον ίδιο κώδικα ξανά και ξανά και έτσι μπορείτε εύκολα να τεστάρετε την εφαρμογή σας.

HOW WE DEFINE AND CALL FUNCTIONS

Για να δημιουργήσουμε ένα function, θα πρέπει καταρχάς να του δώσουμε ένα όνομα. Οι κανόνες ονομασίας του function είναι οι ίδιοι με εκείνους που χρησιμοποιούμε για να ονομάσουμε τις μεταβλητές. Με άλλα λόγια, δεν μπορούμε να ονομάσουμε ένα function με κάποιο όνομα που ήδη χρησιμοποιεί η Python, το όνομα του function δεν μπορεί να περιέχει κενά, και ο πρώτος χαρακτήρας πρέπει να είναι γράμμα ή το underscore ( _ ).

Η γενική δομή για να δημιουργήσουμε ένα function είναι ο εξής:

def function_name( ) :

                statement

                statement

 

Πριν από το όνομα του function πρέπει να προσθέσουμε την λέξη κλειδί def για να καταλάβει η Python ότι πρόκειται να δημιουργήσουμε ένα function. Το όνομα του function ακολουθείται από παρενθέσεις μέσα στις οποίες μπορούμε αν θέλουμε να ορίσουμε παραμέτρους των οποίων οι τιμές θα χρησιμοποιηθούν στις πράξεις που θα εκτελέσει το function. Τέλος η πρώτη γραμμή ορισμού του function κλείνει με το colon ( : ) και αμέσως μετά ακολουθεί ο κώδικας που θέλουμε να περιέχει το function.

Αφού δημιουργήσουμε ένα function, για να το εκτελέσουμε απλά γράφουμε το όνομα του function ακολουθούμενο από παρενθέσεις.

Ας δούμε ένα απλό παράδειγμα.

app.py

def favorite_team():

    print('Everyone has a favorite soccer team')

    print('mine is Barcelona')


favorite_team()

Output

Everyone has a favorite soccer team

mine is Barcelona

Από τη στιγμή που έχετε ορίσει ένα function μια φορά, μπορείτε να το καλέσετε όσες φορές θέλετε.

app.py

def favorite_team():

    print('Everyone has a favorite soccer team')

    print('mine is Barcelona')


favorite_team()

favorite_team()

favorite_team()

Output

Everyone has a favorite soccer team

mine is Barcelona

Everyone has a favorite soccer team

mine is Barcelona

Everyone has a favorite soccer team

mine is Barcelona

Ένα function μπορεί να καλέσει άλλα functions. Συνήθως έχουμε ένα κύριο function που αποκαλούμε main (ή ότι όνομα θέλετε εσείς) το οποίο καλεί και εκτελεί τα υπόλοιπα functions.

app.py

def main():

    message()

    favorite_team()


def message():

    print('Everyone has a favorite team')


def favorite_team():

    print('mine is Barcelona')


main()

Output

Everyone has a favorite team

mine is Barcelona

Με τα functions πρέπει να προσέχουμε το indentation. Οι γραμμές κώδικα που ανήκουν στο function θα πρέπει να έχουν ένα κενό διάστημα στην αρχή της γραμμής για να αναγνωρίζει η Python ότι ανήκουν στο function και όχι στο κύριο πρόγραμμα. Έχουμε συναντήσει την ίδια λογική στα if else statements και στα loops οπότε η έννοια δεν σας είναι άγνωστη.

THE PASS KEYWORD

Πολλές φορές, όταν ξεκινάμε την ανάπτυξη μιας εφαρμογής, γνωρίζουμε τα ονόματα τα ονόματα των functions αλλά ακόμα δεν γνωρίζουμε όλες τις λεπτομέρειες του κώδικα. Σε αυτές τις περιπτώσεις μπορείτε να ορίσετε τα functions χωρίς να περιέχουν κώδικα αλλά την λέξη κλειδί pass. Η Python θα εκτελέσει κανονικά την function χωρίς να σας παρουσιάσει λάθος στο terminal. Φυσικά δεν θα δείτε τίποτα σαν αποτέλεσμα γιατί δεν υπάρχει κώδικας. Όταν αργότερα ξέρετε όλες τις λεπτομέρειες για να αναπτύξετε τον κώδικα σας τότε θα αντικαταστήσετε την λέξη κλειδί pass με τον αλγόριθμό σας.

app.py

def main():

    message()

    favorite_team()


def message():

    pass


def favorite_team():

    print('mine is Barcelona')


main()

Output

mine is Barcelona

LOCAL VARIABLES

Μέσα στα functions μπορούμε να δημιουργήσουμε μεταβλητές για τις ανάγκες του κώδικα μας. Το εύρος δράσης αυτών των μεταβλητών είναι local δηλαδή μόνο κώδικας μέσα από την ίδια τη function έχει πρόσβαση σε αυτές και μπορεί κατά συνέπεια να τις χρησιμοποιήσει. Άλλα functions ή κώδικας από το κύριο μέρος της εφαρμογής δεν μπορούν να «δουν» αυτές τις τοπικές μεταβλητές και κατά συνέπεια δεν μπορούν να τις καλέσουν.

app.py

def main():

    message()

    favorite_team()


def message():

    print('Everyone has a favorite team')


def favorite_team():

    team = 'Barcelona'

    print('mine is', team)


main()

Output

Everyone has a favorite team

mine is Barcelona

PASSING ARGUMENTS TO FUNCTIONS

Η χρησιμότητα ενός function δεν ορίζεται μόνο από το γεγονός ότι αποφεύγουμε να επαναλαμβάνουμε τον ίδιο κώδικα πολλαπλές φορές αλλά και από τη δυνατότητα να περνάμε τιμές στα functions μέσω παραμέτρων.

Για να μπορέσει ένα function να δεχτεί τιμές, θα πρέπει να ορίσουμε μια ή και περισσότερες parameter variables. Ο ορισμός των parameters γίνεται μέσα στην παρένθεση του function. Όταν καλούμε το function απλά περνάμε μέσα στην παρένθεση τόσες τιμές όσες είναι οι parameter variables.

app.py

def main():

    message()

    favorite_team('Barcelona')


def message():

    print('Everyone has a favorite team')


def favorite_team(team):

    print('mine is', team)


main()

Output

Everyone has a favorite team

mine is Barcelona


Μπορούμε να προκαθορίσουμε την τιμή που θα έχουν οι parameter variables σε περίπτωση που δεν δώσουμε εμείς κάποια τιμή όταν καλούμε την function. Με άλλα λόγια μπορούμε να ορίσουμε μια default value. Εάν περάσουμε εμείς κάποια τιμή στη function τότε η default τιμή δεν υπολογίζεται. Στο παρακάτω παράδειγμα καλούμε το function favorite_team( ) μια φορά περνώντας την δική μας τιμή και μια δεύτερη χωρίς να περάσουμε καμία τιμή.

app.py

def main():

    message()

    favorite_team('Barcelona')

    favorite_team()


def message():

    print('Everyone has a favorite team')


def favorite_team(team='Liverpool'):

    print('mine is', team)


main()

Output

Everyone has a favorite team

mine is Barcelona

mine is Liverpool

Μπορούμε επίσης να ορίσουμε μεταβλητές που η χρήση τους είναι προαιρετική. Αν δώσουμε κάποια τιμή θα χρησιμοποιηθούν, αν όχι τότε θα αγνοηθούν. Για να δηλώσουμε μια προαιρετική μεταβλητή, απλά δηλώνουμε την μεταβλητή να είναι ίση με ένα κενό String.

app.py

def main():

    message()

    favorite_team('Barcelona')

    favorite_team()

    favorite_team('Barcelona', 'Spain')


def message():

    print('Everyone has a favorite team')


def favorite_team(team='Liverpool', country=""):

    if country:

        print('Your favorite team is {} from {}'.format(team, country))

    else:

        print('Your favorite team is {}'.format(team))


main()


Output

Everyone has a favorite team

Your favorite team is Barcelona

Your favorite team is Liverpool

Your favorite team is Barcelona from Spain

Τέλος, μπορούμε να δηλώσουμε τα ονόματα των μεταβλητών καθώς περνάμε τις τιμές. Με αυτό τον τρόπο μπορούμε να περάσουμε τις τιμές οποιαδήποτε σειρά.

app.py

def main():

    message()

    favorite_team('Barcelona')

    favorite_team()

    favorite_team('Barcelona', 'Spain')

    favorite_team(country='Germany', team='Bayern')


def message():

    print('Everyone has a favorite team')


def favorite_team(team='Liverpool', country=""):

    if country:

        print('Your favorite team is {} from {}'.format(team, country))

    else:

        print('Your favorite team is {}'.format(team))


main()

Output

Everyone has a favorite team

Your favorite team is Barcelona

Your favorite team is Liverpool

Your favorite team is Barcelona from Spain

Your favorite team is Bayern from Germany

Μην ξεχάσετε να κάνετε ένα μικρό donationέτσι ώστε αυτό το siteνα μεγαλώσει ακόμα πιο πολύ και να αποκτήσει περισσότερες δυνατότητες onlineπαράδοσης δωρεάν μαθημάτων.

full-width

Post a Comment

0 Comments