Опять странности с HASH... ?

 
0
 
Python
ava
RM2010 | 18.02.2010, 22:21
На этот раз такая проблема. Представим, что есть hash, который нам надо очистить и заполнить нужными данными.


myhash = {}

myhash["aaaa"] = "beleberdaaa!"
myhash["bbbbb"] = "tozhe_ne_ochenj_vazhno!"
myhash["cccc"] = "nu_sovsem_ne_nuzhno!"

def populate():
myhash = {}
myhash["1"] = "a"
myhash["2"] = "b"
myhash["3"] = "c"

populate()

for s in myhash:
print("%s = %s" % ( s , myhash[s] ) )


>>> ================================ RESTART ================================
>>>
aaaa = beleberdaaa!
cccc = nu_sovsem_ne_nuzhno!
bbbbb = tozhe_ne_ochenj_vazhno!
>>>

вроде всё правильно, а нет, не работает, выдаёт только старые данные. smile


myhash = {}

myhash["aaaa"] = "beleberdaaa!"
myhash["bbbbb"] = "tozhe_ne_ochenj_vazhno!"
myhash["cccc"] = "nu_sovsem_ne_nuzhno!"

def populate():
myhash["1"] = "a"
myhash["2"] = "b"
myhash["3"] = "c"

def run():
myhash = {}
populate()

run()

for s in myhash:
print("%s = %s" % ( s , myhash[s] ) )

>>> ================================ RESTART ================================
>>>
cccc = nu_sovsem_ne_nuzhno!
aaaa = beleberdaaa!
3 = c
2 = b
1 = a
bbbbb = tozhe_ne_ochenj_vazhno!
>>>

А так, почему-то и старые и новые. Или может hash надо очищать не myhash = {} а как-то иначе???
Kommentare (3)
ava
kemiisto | 18.02.2010, 22:25 #

def populate():
myhash = {}
...

заменить на

def populate():
myhash.clear()
...


Дока. Всё таже, кстати.
Цитата
clear()
  Remove all items from the dictionary.
ava
Void | 18.02.2010, 22:31 #
Цитата (RM2010 @ 19.2.2010, 00:21 findReferencedText)
def run():
  myhash = {}
  populate()

Тут проблема с областями видимости. Дело в том, что Python этот код рассматривает, как определение новой локальной переменной, а не присваивание глобальной. Надо:
def run():
global myhash
myhash = {}

Но это вообще, к сведению, в данном конкретном случае лучше воспользоваться советом kemiisto.
ava
RM2010 | 18.02.2010, 22:48 #
Спасибо! smile
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  Void ava  kemiisto   RM2010
advanced
Absenden