Δημοσιεύτηκε: 01 Οκτ 2011, 01:05
από Ilias95
Λοιπόν πάλι δεν κατάλαβες σχετικά με τα namespaces.

Πάρε αυτό το παράδειγμα:
Spoiler: show
Κώδικας: Επιλογή όλων
x = 50

def func(x):
print('Το x είναι', x)
x = 2
print('Άλλαξα το τοπικό x σε', x)

func(x)
print('Το x είναι ακόμα', x)

Η έξοδος είναι:
Spoiler: show
Κώδικας: Επιλογή όλων
Το x είναι 50
Άλλαξα το τοπικό x σε 2
Το x είναι ακόμα 50

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

Παράδειγμα:
Spoiler: show
Κώδικας: Επιλογή όλων
x = 50

def func():
global x
print('Το x είναι', x)
x = 2
print('Άλλαξα το καθολικό x σε', x)

func()
print('Η τιμή του x είναι', x)

Έξοδος:
Spoiler: show
Κώδικας: Επιλογή όλων
Το x είναι 50
Άλλαξα το καθολικό x σε 2
Η τιμή του x είναι 2

Τώρα πως περνάμε όρισμα στην συνάρτηση;

Παράδειγμα:
Spoiler: show
Κώδικας: Επιλογή όλων
x = 'banana'

def function(z):
print(z)

function(x)
function('apple')

Έξοδος:
Spoiler: show
Κώδικας: Επιλογή όλων
banana
apple

Αυτό που είπαμε πριν είναι να αποφύγεις την χρήση της εντολής global μέσα στις συναρτήσεις.

Οπότε αντί να γράψεις:
Spoiler: show
Κώδικας: Επιλογή όλων
lista = [1, 2, 3, 4]

def a_function():
global lista
for item in lista:
print(item)

a_function()

Θα γράψεις:
Spoiler: show
Κώδικας: Επιλογή όλων
lista = [1, 2, 3, 4]

def a_function(z):
for item in z:
print(item)

a_function(lista)

Τέλος για να το δεις στην πράξη σου δείχνω ένα μέρος του κώδικα σου πως πρέπει να γίνει:
Κώδικας: Επιλογή όλων
import os, pickle

pickle_file = "crypt.db"
pickle_dict = dict()

if os.path.exists(pickle_file):
with open(pickle_file, "rb") as f:
pickle_dict = pickle.load(f)

def save(something_to_save):
pickle.dump(something_to_save, f)
f.close()

def write(file_to_modify, file_to_save_to):
name = input("ονομα; ")
file_to_modify["name"] = "name"
with open(file_to_save_to, "wb") as f:
pickle.dump(file_to_modify, f)
save(file_to_modify)

def menu():
n = input("τι θελετε να κανετε; ")
if n == 1:
write(pickle_dict, pickle_file)

Το υπόλοιπο διόρθωσε το εσύ.

Επίσης καλύτερα ξαναδιάβασε για τις συναρτήσεις ή αν έχεις και άλλα κενά ξανά πάρε τα όλα απ' την αρχή.