我试图解决这个新手的难题:替代“指定给一个函数调用”在Python
我创造了这个功能:
def bucket_loop(htable, key):
bucket = hashtable_get_bucket(htable, key)
for entry in bucket:
if entry[0] == key:
return entry[1]
return None
我必须把它在两个其他函数(波纹管)按以下方式:更改元素条目[1]的值或追加到此列表(条目)一个新元素。但我不能那样调用函数bucket_loop,就像我做的那样,因为“你不能指定函数调用”(分配给函数调用在Python中是非法的)。 (bucket_loop(htable,key)= value和hashtable_get_bucket(htable,key).append([key,value]))是什么方法(与我写的代码最相似)?
def hashtable_update(htable, key, value):
if bucket_loop(htable, key) != None:
bucket_loop(htable, key) = value
else:
hashtable_get_bucket(htable, key).append([key, value])
def hashtable_lookup(htable, key):
return bucket_loop(htable, key)
在此先感谢您的帮助!
这是代码,使这个脚本的其余作品:
def make_hashtable(size):
table = []
for unused in range(0, size):
table.append([])
return table
def hash_string(s, size):
h = 0
for c in s:
h = h + ord(c)
return h % size
def hashtable_get_bucket(htable, key):
return htable[hash_string(key, len(htable))]
类似的问题(但没有帮助我):SyntaxError: "can't assign to function call"
你有没有考虑过把它作为一个类并定义'__getitem __()'和'__setitem __()'? – 2012-03-26 05:18:22
我有点不清楚你的第一个代码。你有一个if else语句的循环,所以它只会执行一个循环。你只想检查桶中的第一个元素,还是要检查桶中的所有元素? – Jeff 2012-03-26 05:26:31
嗨伊格纳西奥巴斯克斯 - 艾布拉姆斯,我不假设在这个过程中使用类(我还没有学会这个概念)。但非常感谢你的提示。 – craftApprentice 2012-03-26 12:43:04