Я пишу функцию, которая возводит в квадрат каждый элемент в списке.

def square(num):
    for i in range(len(num)):
        square[i] = square[i] ** 2

def action():
    nums = [2, 3, 4]
    print square(nums)


action() 

Возвращает ошибку:

    square[i] = square[i] ** 2
TypeError: 'function' object has no attribute `__getitem__`.

Идеи ?

0
nutship 1 Фев 2013 в 02:03

3 ответа

Лучший ответ

В вашей функции square вы ссылаетесь на функцию, как если бы это был список:

def square(num):
    for i in range(len(num)):
        square[i] = square[i] ** 2

Поскольку square не является списком, Python пытается запросить у него элемент i с помощью метода __getitem__, но его также не существует.

Возможно, вы хотели использовать num вместо этого?

def square(num):
    for i in range(len(num)):
        num[i] = num[i] ** 2
1
Martijn Pieters 31 Янв 2013 в 22:06

Чтобы основываться на ответе Мартин:

def square(seq):
    for index in range(len(seq)):
        seq[index] = seq[index] ** 2
    return seq # this gives the output of the function

См. «Возврат» в Python.

Другой способ сделать это (используя однострочное понимание списка):

def square(seq): return [x**2 for x in seq]

Понимания списков см. В разделе Понимания списков Python

0
Rushy Panchal 31 Янв 2013 в 23:16

Вы не можете использовать [] для функций, его для списка или dict.

def square(num):
    l= [None] * len(num)
    for i in range(len(num)):
        l[i] = num[i] ** 2
    return l
0
אריק ק 24 Янв 2015 в 22:31