Python 为什么键函数可以调用属性?但我可以';是否在控制台中直接调用该属性?
完整代码来自DEAP包示例: 我做了一个测试,人口和个体的数量都是5,我输入了以下语句: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
>>>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
!您的列表不包含您认为它包含的内容。