почему мой код ошибки? Я скопировал функцию «Записать» в django.utils.functional - PullRequest
0 голосов
/ 06 января 2010

мой код:

a=[1,2,3,4]
b=a[:2]
c=[]
c[b]='sss'#error

функция памятки:

def memoize(func, cache, num_args):
    def wrapper(*args):
        mem_args = args[:num_args]#<------this
        if mem_args in cache:
            return cache[mem_args]
        result = func(*args)
        cache[mem_args] = result#<-----and this
        return result

Ответы [ 2 ]

2 голосов
/ 06 января 2010

Какое отношение ваш вопрос имеет к сообщению, которое вы публикуете?

Предположительно (хотя мы должны догадаться, поскольку вы не опубликовали фактическую ошибку) вы получаете ошибку типа TypeError. Это связано с двумя ошибками.

Во-первых, c - это список. Таким образом, вы не можете использовать произвольные ключи, вы можете использовать только целочисленные индексы. Предположительно, вы хотели определить словарь здесь: c = {}

Во-вторых, вы получаете список в выражении 2 - b равно [1, 2] - и это недопустимый индекс словаря. a должен был быть кортежем: a = (1, 2, 3, 4).

Я должен повторить совет, который вам давали другие люди. Пожалуйста, ознакомьтесь с введением в программирование и прочитайте его, прежде чем пытаться скопировать сложный код Python, который вы не понимаете.

2 голосов
/ 06 января 2010

В функции memoize я предполагаю, что cache - это dict. Кроме того, поскольку a является list, b также будет list, и списки не могут быть хэшируемыми. Используйте tuple.

Попробуйте

a = (1, 2, 3, 4) # Parens, not brackets
b = a[:2]
c = {} # Curly braces, not brackets
c[b] = 'sss'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...