Προς το περιεχόμενο

nonlocal variables python


Προτεινόμενες αναρτήσεις

Δημοσ.
 #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)

Δημοσ.

Η 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    (Εδώ είναι η απάντηση)

  • Like 2
Δημοσ.
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 που δεν χρησιμοποιούσες 

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...