Το Στέκι των Πληροφορικών

Επαγγελματικό Λύκειο => Γενικά => Προγραμματισμός Υπολογιστών => Μήνυμα ξεκίνησε από: Λαμπράκης Μανώλης στις 14 Δεκ 2017, 01:56:15 ΜΜ

Τίτλος: Ερωτήσεις στις συναρτήσεις
Αποστολή από: Λαμπράκης Μανώλης στις 14 Δεκ 2017, 01:56:15 ΜΜ
Καλημέρα σε όλους

Ήθελα να κάνω κάποιες ερωτήσεις στις συναρτήσεις καθώς διδάσκω πρώτη φορά python και θα ήθελα να ακούσω κάποιες γνώμες

1) η συνάρτηση γίνεται να επιστρέψει περισσότερες από μία τιμές ;; από αυτά που λέει το βιβλίο νομίζω όχι, σωστά ;;

2) αν οι παράμετροι αλλάξουν μέσα στην συνάρτηση, δεν επιστρέφονται οι αλλαγές σωστά ;; εκτός αν είναι global   η μεταβλητή

3) η τιμή που επιστρέφεται με το  return πως μπορεί να αξιοποιηθεί ;; μπορεί πχ να εκχωρηθεί σε κάποια μεταβλητή ;; πχ    x= f(a,b) ;;; διαφορετικά αν η f   υπολογίζει πχ το άθροισμα των a,b  κατά την κλήση f(a,b)  πως μπορώ να ελέγξω πχ αν το άθροισμα είναι μεγαλύτερο από 5 ;;


Ευχαριστώ
Τίτλος: Απ: Ερωτήσεις στις συναρτήσεις
Αποστολή από: bugman στις 15 Δεκ 2017, 04:42:27 ΠΜ
1) Ναι, λέγεται tuple και μπορεί να έχει μια σειρά αποτελεσμάτων. Όταν διαβάζουμε από τέτοια συνάρτηση ή θα πάρουμε tuple, ή θα το ανοίξουμε απευθείας σε τόσες μεταβλητές όσες και οι τιμές στο tuple.
2) Διάβασε αυτό: http://effbot.org/zone/call-by-object.htm
Στην Python, δεν υπάρχει πέρασμα με τιμή, ούτε πέρασμα με αναφορά, Αυτό που περνάει είναι ο δείκτης το αντικειμένου. Αν το αντικείμενο δέχεται αλλαγές, τότε θα τις πάρει.

Δεν είναι με αναφορά γιατί δεν μπορούμε να αλλάξουμε αντικείμενο σε αυτό που καλεί τη συνάρτηση. Για να αλλάξει θα πρέπει να πάρει άλλο δείκτη, αλλά οι δείκτες δεν πάνε προς τα πίσω! Αν όμως δέχεται το αντικείμενο αλλαγές, τότε χωρίς να αλλάξει ο δείκτης στο αντικείμενο μπορούμε να αλλάξουμε τις τιμές σε αυτό, άρα να αφήσουμε το αντικείμενο με νέες τιμές (αυτό φαίνεται σαν πέρασμα με αναφορά, αλλά δεν είναι, δεν έχουμε τον έλεγχο της μεταβλητής που φυλάσσεται ο δείκτης στο αντικείμενο και πέρασε ως όρισμα, αλλά το αντικείμενο μόνο). Ούτε είναι πέρασμα με τιμή, αφού αν αλλάζει το αντικείμενο, μπορεί να αλλάξει και να φανούν οι αλλαγές στην επιστροφή.

Στη Visual Basic 6 για παράδειγμα όλα περνούν με αναφορά εκτός και είναι σταθερές ή ορίσουμε ότι θα περάσει με τιμή. Εκεί ένα αντικείμενο μπορεί να αλλάξει δείκτη, όταν περνάει με αναφορά, γιατί δεν περνάει ο δείκτης του αντικειμένου, αλλά η διεύθυνση της μεταβλητής, που έχει το δείκτη του αντικειμένου!

3) Σπάμε το πρόβλημα σε δυο μέρη: Άθροισμα, και έλεγχος συνθήκης. Αν τώρα από το πρώτο μέρος κρατήσουμε σε μεταβλητή το άθροισμα τότε μας είναι πιο εύκολο να συγκρίνουμε τη μεταβλητή με το 5 με την χρήση του >.

Τίτλος: Απ: Ερωτήσεις στις συναρτήσεις
Αποστολή από: taxata στις 15 Δεκ 2017, 12:54:59 ΜΜ
@ Λαμπράκης Μανώλης
Σου γράφω μερικά παραδείγματα για το ερώτημα 1 & 3
ο όρος τιμή ως επιςτροφή στη συνάρτηςη δεν είναι απόλυτα ακριβής εφόσον στην python everything is an object.
Μπορείς να επιστρέφεις ένα αντικείμενο (εδώ: tuple) που μπορεί να περιέχει  χρησιμοποιώντας τις εκτεταμένες δυνατότητες πολυμορφισμού της γλώσσας εάν επιθυμείς και το επιτρέπει η δομή του και άλλα αντικείμενα (εδώ: int, boolean)
πιστεύω κάτι  τέτοιο ψάχνεις
Κώδικας (python) [Επιλογή]

>>> def f(a,b):
xsum = a + b
above = True
if xsum < 5:
above = False
return xsum, above

>>> f(3,4)
(7, True)
>>> xsum , result = f(3,4)
>>> xsum
7
>>> result
True
>>> f(3,4)[0]
7
>>> f(3,4)[1]
True
>>>
>>> type(f(3,4))
<type 'tuple'>
>>> type(f(3,4)[0])
<type 'int'>
>>> type(f(3,4)[1])
<type 'bool'>
>>>
Τίτλος: Απ: Ερωτήσεις στις συναρτήσεις
Αποστολή από: Καρκαμάνης Γεώργιος στις 01 Φεβ 2018, 10:47:22 ΜΜ
Μανώλη όσο αφορά την 1η ερώτηση σου, το σχολικό βιβλιο εστιάζει σε παραδείγματα στα οποία η συνάρτηση επιστρέφει μία μονο τιμή. Στην πραγματικότητα η Python δίνει τη δυνατότητα να επιστρεφούν περισσότερες από μια τιμές μέσω των συναρτήσεων.

Για τη 2η ερωτησή σου, αυτό ισχύει γενικά, εκτός αν περάσεις λίστα ως παράμετρο, οπου εκεί μπορούν να τροποποιηθούν τα στοιχεία της λιστας μέσα στη συνάρτηση

3η ερώτηση, η επιστρεφόμενη τιμή μπορεί να χρησιμοποιηθεί μέσα σε οποιαδήποτε έκφραση, είτε αριθμητική είτε λογική ή να εκχωρηθεί σε μια μεταβλητή

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

# program
a,b=input()
if sum(a,b) >5:
   print "sum >5'
else:
   print "sum <=5'
Τίτλος: Απ: Ερωτήσεις στις συναρτήσεις
Αποστολή από: Σάκης Δημόπουλος στις 14 Αυγ 2019, 06:40:10 ΜΜ
https://www.youtube.com/watch?v=ADCkK1WKRqA&t=
Τίτλος: Απ: Ερωτήσεις στις συναρτήσεις
Αποστολή από: George Eco στις 14 Αυγ 2019, 07:21:08 ΜΜ
Παράθεση από: sakisnemkav στις 14 Αυγ 2019, 06:40:10 ΜΜ
https://www.youtube.com/watch?v=ADCkK1WKRqA&t=
Ναι αυτός ο φίλος έχει ανεβάσει ωραία video.