Qual é a diferença entre essas funções python?

1

Qual é a diferença entre isso:

def total(initial=10, *numbers, **keywords):  
     count = initial  
    for fake in numbers:  
        count = count + fake  
    for key in keywords:  
        count = count + keywords[key]  
    return count  
print total(10, 5, fruits=10)

e isso:

def total(initial=10, *numbers, **keywords):  
    count = initial        
    for fake in numbers:                      
        count = count + fake    
    for key in keywords:   
        count = count + key   
    return count   
print total(10, 5, fruits=10)

A coisa que eu não entendo aqui é no primeiro programa que ele aceita palavras-chave e no segundo programa eu continuo recebendo erros sobre palavras-chave !!

    
por froyo 23.05.2015 / 23:16

1 resposta

2

Há apenas uma única alteração entre dois snippets de código, o primeiro deles usa:

count = count + keywords[key]

enquanto o segundo usa:

count = count + key

No caso do primeiro, você está pegando o valor de uma chave do dicionário e adicionando o valor à contagem anterior.

Enquanto no segundo caso você está adicionando a própria chave (string) à contagem de números inteiros, o que está dando um erro esperado.

Isso vai deixar você mais claro:

#!/usr/bin/env python2
def total(initial=10, *numbers, **keywords):
    count = initial
    for fake in numbers:
        count = count + fake
    for key in keywords:
        print 'key is: ' + key
        print 'keyword is: ' + str(keywords)
        count = count + keywords[key]
    return count

Eu adicionei duas linhas para verificar os valores para os quais minha entrada está sendo interpretada.

Agora, quando eu corro:

print total(10, 5, fruits=10)

dá:

key is: fruits
keyword is: {'fruits': 10}
25

Sugiro que você escolha os tipos de dados básicos usados em python .

    
por heemayl 23.05.2015 / 23:52