proandy Δημοσ. 3 Ιανουαρίου 2017 Δημοσ. 3 Ιανουαρίου 2017 #Filename: func_nonlocal.py def func_outer(): x = 2 print('Το x είναι',x) def func_inner(): global x #me nonlocal ektipwnei 2 kai 5 x = 5 func_inner() print('Το τοπικό x άλλαξε σε',x) func_outer() Καλησπέρα παιδιά, διαβάζω την ελληνική έκδοση του a byte of python και σε αυτό το παράδειγμα δεν μπορώ να κατανοήσω πως λειτουργεί ακριβώς το global.Περιμένω να εκτυπώσει 2 και 5 ωστόσο εκτυπώνει 2 και 2.Μήπως μπορεί να μου εξηγήσει κάποιος γιατί; (Γενικότερα έχω μια ασάφεια σε local nonlocal και global variables)
pmav99 Δημοσ. 3 Ιανουαρίου 2017 Δημοσ. 3 Ιανουαρίου 2017 Η Python έχει 4 scopes. Local, Enclosing, Global, Builtin http://stackoverflow.com/questions/291978/short-description-of-scoping-rules Σε αυτό που ρωτάς τωρα: To Global scope πρακτικά είναι το module level. To global keyword αναφέρεται σε αυτό το scope To nonlocal keyword επί της ουσίας σου επιτρέπει να κάνεις assign σε ένα Outer scope που δεν είναι όμως Globe (επί της ουσίας στο Enclosing). http://stackoverflow.com/questions/4693120/use-of-global-keyword-in-python http://stackoverflow.com/questions/1261875/python-nonlocal-statement (Εδώ είναι η απάντηση) 2
k33theod Δημοσ. 3 Ιανουαρίου 2017 Δημοσ. 3 Ιανουαρίου 2017 def func_outer(): x = 2 # Αυτή είναι local print('Το x είναι',x)#τυπώνεις τη local δηλαδή 2 def func_inner(): global x #Δεν βρίσκει global x και την δημιουργεί x = 5# δίνει στην global x τιμή 5 print('global x', x) #τυπώνει την global func_inner() print('Το τοπικό x άλλαξε σε',x) #Ξανατυπώνεις την local func_outer() Το x είναι 2 global x 5 Το τοπικό x άλλαξε σε 2 Στην εσωτερική δηλαδή συνάρτηση δημιουργούσες μία global που δεν χρησιμοποιούσες 1
proandy Δημοσ. 4 Ιανουαρίου 2017 Μέλος Δημοσ. 4 Ιανουαρίου 2017 Ευχαριστώ για τις απαντήσεις με βοηθήσατε πάρα πολύ..
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα