Изменяемые объекты


kane = {'name':'Kane', 'health':'normal'}
dallas = {'name':'Dallas', 'health':'normal'}
lambert = {'name':'Lambert', 'health':'normal'}
group1 = [kane, dallas, lambert]

explore_the_object(group1)

print(group1)
            

# [ {'name': 'Kane', 'health': 'infected!'},  !!!!!
#   {'name': 'Dallas', 'health': 'normal'},
#   {'name': 'Lambert', 'health': 'normal'} ]
            

def explore_the_object(group):
    group[0]['health'] = 'infected!'
            

Ещё примерчики


group = spaceship.get_names()
def me_too(g):
    g.append(alien) # возможны проблемы!
    return g
            

def get_names(self): # self у нас изменяемый?
    g = []
    for k, v in self.members.items():
        g.append(v['name'])
    return g
            

def get_names(members): # нет видимых эффектов!
    g = []
    for k, v in members.items():
        g.append(v['name'])
    return g
            

# именно так мы избавляемся от циклов
def get_names(members):
    return list(map(lambda v: v['name'], members.values())
            

Больше примерчиков!


def dispatch_emergency(members):
    alive = next(filter(lambda m: m.is_alive(),
                        members.values()), None)
    if alive is not None:
        msg = alive.make_message()
        log.debug(alive + ' made the message ' + msg) # Ы?
        send(msg)            # побочный эффект 1
    elif len(members) == 0:
        send('SOS')          # побочный эффект 2
            

def build_emergency_action(members):
    alive = next(filter(lambda m: m.is_alive(),
                        members.values()), None)
    if alive is not None:
        msg = alive.make_message()
        return SendIntent(msg)      # значение 1
    elif len(members) == 0:
        return SendIntent('SOS')    # значение 2
    return SendIntent(None)         # значение 3
            

dispatch(emergency_action) # только эффект, никакой логики
            

Шаг 0

+6   +7   +6

Down arrow

Шаг 1

+2   -3   /3

Down arrow

Шаг 2

/2   *4   +9

Down arrow

Шаг 3

-5   +2   -6

Down arrow

Вопрос

?   ?   ?

Alien and Ripley

Ответ

-1   18   5

Space Joker and Alien