【问题标题】:Python: TypeError: 'function' object has no attribute '__getitem__'Python:TypeError:'function'对象没有属性'__getitem__'
【发布时间】:2015-07-26 11:48:12
【问题描述】:

我是 python 新手,我遇到了一些代码问题。我收到了错误

TypeError: 'function' object has no attribute '__getitem__' at line 32

我不知道发生了什么。从我在互联网上看到的情况来看,这意味着将函数用作列表,但我无法用我的代码弄清楚这一点。我的代码是

#! /usr/local/bin/python


import random


def genFirstGen():
    print "First Generation"
    generation = []
    for chromosomecounter in range(0, 20):
        chromosome = []
        fitness = 0
        for genecounter in range(0, 10):
            chromosome.append(random.randrange(0, 2))
        for genecounter in range(0, 10):
            if (chromosome[genecounter] == 1):
                fitness += 1
        chromosome.append(fitness)
        generation.append(chromosome)
        print gene
    return generation


def FindMostFit(generation):
    failedset = [0,0,0,0,0,0,0,0,0,0,0]
    highestfitness = 0
    mostfit = 0
    fitparents = []
    gene = []
    for fitcounter in range(0, 10):
        for chromosomecounter in range(0, 20):
            chromosome = [generation[chromosomecounter]] #  The error is here.
            fitness  = chromosome[10]
            highestfitness = 0
            if (fitness > highestfitness):
                highestfitness = fitness
                mostfit = chromosomecounter

        fitparents.append(generation[mostfit])
        generation[mostfit] = failedset
    return fitparents


def BreedMostFit(Parents):
    Mother = Parents(random.randrange(0, 10))
    Father = Parents(random.randrange(0, 10))
    child = []
    for genecounter in range(0, 5):
        parentgenetaken = random.randrange(0, 2)
        if (parentgenetaken == 1):
            child.append(Mother[genecounter * 2])
            child.append(Mother[(genecounter * 2) + 1])
        else:
            child.append(Father[genecounter * 2])
            child.append(Father[(genecounter * 2) + 1])
    return child


def Generation2():
    newgeneration = []
    for gencounter in range(0, 20):
        newgeneration.append(BreedMostFit(FindMostFit(genFirstGen)))
    return newgeneration

def GenerationFunction(parentgen):
    generation = []
    for gencounter in range(0, 20):
        generation.append(BreedMostFit(FindMostFit(parentgen)))
    return generation

GenerationFunction(Generation2())

我已经束手无策了。任何人都可以帮忙吗?谢谢!

【问题讨论】:

  • 想分享回溯吗?
  • 您好,欢迎来到 StackOverflow。您能否写下哪一行产生错误以及在什么调用上?您的代码很长,不清楚问题出在哪里。

标签: python function object typeerror


【解决方案1】:

在第 62 行,您将 genFirstGen 函数传递给 FindMostFit

newgeneration.append(BreedMostFit(FindMostFit(genFirstGen)))

稍后在第 32 行将其编入索引。我猜你想调用函数并传递它的结果。所以将第 62 行替换为

newgeneration.append(BreedMostFit(FindMostFit(genFirstGen())))

【讨论】:

    【解决方案2】:

    传递给FindMostFit 的是genFirstGen 函数本身,而不是被调用的genFirstGen() 的输出。

    这个:

    newgeneration.append(BreedMostFit(FindMostFit(genFirstGen)))

    应该是这样的:

    newgeneration.append(BreedMostFit(FindMostFit(genFirstGen()))).

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      • 2012-11-28
      • 2019-07-11
      • 1970-01-01
      • 2013-05-12
      • 2013-03-17
      • 2015-10-26
      相关资源
      最近更新 更多