Python 为什么键函数可以调用属性?但我可以';是否在控制台中直接调用该属性?

Python 为什么键函数可以调用属性?但我可以';是否在控制台中直接调用该属性?,python,key,Python,Key,完整代码来自DEAP包示例: 我做了一个测试,人口和个体的数量都是5,我输入了以下语句: >>>MAX=max(pop,key=attrgetter("fitness")) >>>[1,1,1,1,1] 我理解这返回了pop.fitness的最大值,但是,为什么我不能直接称之为: >>>pop.fitness 发生了以下错误: Traceback (most recent call last): File "<ipython

完整代码来自DEAP包示例:

我做了一个测试,人口和个体的数量都是5,我输入了以下语句:

>>>MAX=max(pop,key=attrgetter("fitness"))
>>>[1,1,1,1,1]
我理解这返回了pop.fitness的最大值,但是,为什么我不能直接称之为:

>>>pop.fitness
发生了以下错误:

Traceback (most recent call last):

  File "<ipython-input-74-b9dde7c090eb>", line 1, in <module>
    pop.fitness

AttributeError: 'list' object has no attribute 'fitness'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
流行音乐健身
AttributeError:“list”对象没有属性“fitness”

为什么不能调用此
pop.fitness

pop
是一个
列表。列表本身没有属性
fitness
。该列表包含每个对象都有一个属性
fitness
attrgetter('fitness')
创建一个函数,当使用对象调用该函数时,该函数返回该对象的
fitness
属性
max
使用此函数从列表中获取它应该按哪个顺序排序的值

我不知道您的列表具体包含什么,但它是这样的:

>>> pop
[Thing(fitness=1), Thing(fitness=2), ...]
这两个是等效的:

>>> pop[0].fitness
1
>>> attrgetter('fitness')(pop[0])
1
max(pop,key=attrgetter('fitness'))
正在做一些事情:

for thing in pop:
    thing.fitness  # here be magic using this property as sorting criterion

pop
没有指定
fitness
属性,但我想知道为什么
功能可以设置
fitness
。在这种情况下,
pop
是一个列表。列表没有适合的
方法。您对
max
的调用正在调用列表中每个元素的
fitness
方法。因此,在本例中,由于
pop
没有
fitness
属性,因此
key=attrgetter(“fitness”
返回一个空白属性?不,它返回
pop[0].fitness
是。实际上,
pop
列表只包含数字,但没有任何属性。由于没有
fitness
属性,我可以说
key=attrgetter(“fitness”)
返回空白,
MAX=MAX(pop)
相当于
MAX=MAX(pop,key=attrgetter(“fitness”))
?如果您的列表只包含int,
attrgetter('fitness')(1)
将引发一个
AttributeError
!您的列表不包含您认为它包含的内容。