Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

4.4 Κανόνες Εμβέλειας (Scope Rules) στην Python

Κανόνες Εμβέλειας (Scope Rules) στην Python

Η εμβέλεια μιας μεταβλητής καθορίζει το πού και πώς μπορεί να χρησιμοποιηθεί μέσα στο πρόγραμμα. Η εμβέλεια μπορεί να είναι είτε τοπική (local) είτε καθολική (global).

Τοπική Εμβέλεια (Local Scope)

Μια μεταβλητή με τοπική εμβέλεια είναι “σε εμβέλεια” μόνο εντός της συνάρτησης όπου ορίζεται. Αυτό σημαίνει ότι μια τοπική μεταβλητή μπορεί να χρησιμοποιηθεί μόνο εντός της συνάρτησης που την ορίζει και “βγαίνει από την εμβέλεια” όταν η συνάρτηση επιστρέφει στον καλούντα.

Καθολική Εμβέλεια (Global Scope)

Μεταβλητές που ορίζονται εκτός οποιασδήποτε συνάρτησης (ή κλάσης) έχουν καθολική εμβέλεια. Αυτές περιλαμβάνουν συναρτήσεις, μεταβλητές και κλάσεις. Μεταβλητές με καθολική εμβέλεια αποκαλούνται καθολικές μεταβλητές. Μεταβλητές με καθολική εμβέλεια μπορούν να χρησιμοποιηθούν σε ολόκληρο το αρχείο .py ή τη διαδραστική συνεδρία, αφού έχουν οριστεί.

Πρόσβαση σε Καθολική Μεταβλητή από Συνάρτηση

Μπορείτε να αποκτήσετε πρόσβαση στην τιμή μιας καθολικής μεταβλητής εντός μιας συνάρτησης:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Καθολική μεταβλητή
global_variable = 10
def demo_function():
# Πρόσβαση στην καθολική μεταβλητή εντός της συνάρτησης
print("Καθολική τιμή:", global_variable)
demo_function()
# Καθολική μεταβλητή global_variable = 10 def demo_function(): # Πρόσβαση στην καθολική μεταβλητή εντός της συνάρτησης print("Καθολική τιμή:", global_variable) demo_function()
# Καθολική μεταβλητή
global_variable = 10

def demo_function():
    # Πρόσβαση στην καθολική μεταβλητή εντός της συνάρτησης
    print("Καθολική τιμή:", global_variable)

demo_function()

Σημαντικές Παρατηρήσεις

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

Μπλοκ έναντι Συνόλων Εντολών (Blocks vs. Suites)

Στην Python, όταν ορίζετε μια μεταβλητή εντός ενός μπλοκ ή ενός συνόλου εντολών (suite), η εμβέλεια της μεταβλητής καθορίζεται από το πού έχει γραφτεί αυτή η εντολή.

Μπλοκ Συναρτήσεων

Όταν δημιουργείτε μια μεταβλητή μέσα σε ένα μπλοκ συνάρτησης, αυτή η μεταβλητή είναι τοπική στο συγκεκριμένο μπλοκ. Αυτό σημαίνει ότι η μεταβλητή είναι προσβάσιμη μόνο εντός της συνάρτησης και δεν είναι διαθέσιμη έξω από αυτήν.

Σύνολα Εντολών Ελέγχου (Control Statement Suites)

Όταν δημιουργείτε μια μεταβλητή εντός του συνόλου εντολών ενός δομικού στοιχείου ελέγχου (όπως if, for, while κτλ.), η εμβέλεια της μεταβλητής εξαρτάται από το πού έχει οριστεί το δομικό στοιχείο ελέγχου:

  • Εάν το δομικό στοιχείο ελέγχου βρίσκεται στην καθολική εμβέλεια: Οι μεταβλητές που ορίζονται στο σύνολο εντολών έχουν καθολική εμβέλεια.
  • Εάν το δομικό στοιχείο ελέγχου βρίσκεται εντός ενός μπλοκ συνάρτησης: Οι μεταβλητές που ορίζονται στο σύνολο εντολών έχουν τοπική εμβέλεια.

Αυτή η διάκριση είναι σημαντική καθώς καθορίζει πού και πώς μπορείτε να χρησιμοποιήσετε τις μεταβλητές σας μέσα στο πρόγραμμά σας. Η περαιτέρω συζήτηση γύρω από την εμβέλεια θα συνεχιστεί στο κεφάλαιο “Αντικειμενοστραφής Προγραμματισμός” όταν εισαχθούν οι προσαρμοσμένες κλάσεις.

Απόκρυψη Ενσωματωμένων Συναρτήσεων (Shadowing Functions)

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

Παράδειγμα Απόκρυψης Ενσωματωμένης Συνάρτησης

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Ορισμός μεταβλητής με το όνομα sum
sum = 15
# Προσπάθεια χρήσης της ενσωματωμένης συνάρτησης sum
result = sum([1, 2, 3]) # Θα προκαλέσει TypeError
# Ορισμός μεταβλητής με το όνομα sum sum = 15 # Προσπάθεια χρήσης της ενσωματωμένης συνάρτησης sum result = sum([1, 2, 3]) # Θα προκαλέσει TypeError
# Ορισμός μεταβλητής με το όνομα sum
sum = 15

# Προσπάθεια χρήσης της ενσωματωμένης συνάρτησης sum
result = sum([1, 2, 3])  # Θα προκαλέσει TypeError

Αφού ορίσετε τη μεταβλητή sum, η ενσωματωμένη συνάρτηση sum δεν είναι πλέον προσβάσιμη στον κώδικά σας. Η προσπάθεια χρήσης της sum ως συνάρτησης θα προκαλέσει ένα TypeError, καθώς το Python θα ερμηνεύσει το sum ως την ακέραια τιμή 15 και όχι ως την ενσωματωμένη συνάρτηση.

Συστάσεις

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

Δηλώσεις σε Καθολική Εμβέλεια (Global Scope)

Στα σενάρια (scripts) που έχετε δει μέχρι τώρα, έχουν γραφτεί κάποιες δηλώσεις εκτός συναρτήσεων, στην καθολική εμβέλεια, καθώς και κάποιες εντός μπλοκ συναρτήσεων. Οι δηλώσεις σεναρίων στην καθολική εμβέλεια εκτελούνται μόλις συναντηθούν από τον διερμηνέα (interpreter), ενώ οι δηλώσεις μέσα σε ένα μπλοκ εκτελούνται μόνο όταν κληθεί η συνάρτηση.

Παράδειγμα

Για παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Καθολική εμβέλεια
print("Αυτό εκτελείται αμέσως.")
def demo_function():
# Εμβέλεια εντός συνάρτησης
print("Αυτό εκτελείται όταν κληθεί η συνάρτηση.")
# Κλήση της συνάρτησης
demo_function()
# Καθολική εμβέλεια print("Αυτό εκτελείται αμέσως.") def demo_function(): # Εμβέλεια εντός συνάρτησης print("Αυτό εκτελείται όταν κληθεί η συνάρτηση.") # Κλήση της συνάρτησης demo_function()
# Καθολική εμβέλεια
print("Αυτό εκτελείται αμέσως.")

def demo_function():
    # Εμβέλεια εντός συνάρτησης
    print("Αυτό εκτελείται όταν κληθεί η συνάρτηση.")

# Κλήση της συνάρτησης
demo_function()

Σε αυτό το παράδειγμα, η εντολή print("Αυτό εκτελείται αμέσως.") εκτελείται αμέσως, επειδή βρίσκεται στην καθολική εμβέλεια. Η εντολή print("Αυτό εκτελείται όταν κληθεί η συνάρτηση.") εντός της demo_function, από την άλλη πλευρά, εκτελείται μόνο όταν η συνάρτηση demo_function() κληθεί.

Σημασία

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

10 Ιανουαρίου, 2024
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων