<p>另一种方法是将名称和操作序列构建为元组</p>
<p>这里的目的是展示生成器的使用,这有助于避免构建额外的数据结构(请注意,甚至每个元组都可以被生成器替换,具体取决于它的使用)</p>
<p>例如,假设您只能拍摄中性物种的照片:</p>
<pre><code>rarebirds = {
'Gold-crested Toucan': {
'Height (m)': 1.1,
'Weight (kg)': 35,
'Color': 'Gold',
'Endangered': True,
'Aggressive': True},
'Pearlescent Kingfisher': {
'Height (m)': 0.25,
'Weight (kg)': 0.5,
'Color': 'White',
'Endangered': False,
'Aggressive': False},
'Four-metre Hummingbird': {
'Height (m)': 0.6,
'Weight (kg)': 0.5,
'Color': 'Blue',
'Endangered': True,
'Aggressive': False},
'Giant Eagle': {
'Height (m)': 1.5,
'Weight (kg)': 52,
'Color': 'Black and White',
'Endangered': True,
'Aggressive': True},
'Ancient Vulture': {
'Height (m)': 2.1,
'Weight (kg)': 70,
'Color': 'Brown',
'Endangered': False,
'Aggressive': False}
}
actions = ['Back Away', 'Cover our Heads', 'Take a Photograph']
def show_actions(birds):
for name, attrs in birds.items():
acs = []
if attrs['Aggressive']:
acs.append(actions[1])
if attrs['Endangered']:
acs.append(actions[0])
if not acs:
acs.append(actions[2])
yield (name, *acs)
for bird, *acs in show_actions(rarebirds):
print(f"{bird}: {', '.join(acs)}")
</code></pre>
<p>产生</p>
<pre><code>Gold-crested Toucan: Cover our Heads, Back Away
Pearlescent Kingfisher: Take a Photograph
Four-metre Hummingbird: Back Away
Giant Eagle: Cover our Heads, Back Away
Ancient Vulture: Take a Photograph
</code></pre>