2016-08-12 1 views
0

Je cette function mondiale:Python - args un kargs **

def filterBelowThreshold(name, feature, tids, xsongs, **kwargs): 
    print (name, 'PLAYLIST') 
    for i, x in enumerate(feature): 
     if x < value: 
      track_name = sp.track(tids[i])['name'] 
      xsongs.append(track_name) 
      print(name, ":", "{} - feature: {}".format(track_name, x)) 

Je veux l'appeler dans un classfunction passer les paramètres suivants (dont les variables sont déclarées localement):

filterBelowThreshold('myname', energy, tids, xsongs, value=0.650) 

à l'intérieur du class function, avant l'appel de fonction, je déclare les variables suivantes:

tids = []

xsongs = []

quelle est la syntaxe correcte pour la fonction globale?

+1

Le code semble correct. Je ne vois pas vraiment de problèmes avec ça ... – refi64

+0

S'il vous plaît montrer le cours que vous essayez d'écrire. Je ne peux pas comprendre votre tentative actuelle. (En ce qui concerne la gestion de 'kwargs', au cas où cela aiderait, cela fonctionne comme ceci: passer' value = 0.650' à 'filterBelowThreshold' fera de' kwargs' un 'dict' avec une seule clé,' value', dont la valeur est «0.650»). – pistache

Répondre

0

Vous ne devriez pas utiliser **kwargs si vous appelez la fonction avec un paramètre explicite value, il suffit d'utiliser des arguments normaux:

def filterBelowThreshold(name, feature, tids, xsongs, value): 
    print(name, 'PLAYLIST') 
    for tid, x in zip(tids, feature): 
     if x < value: 
      track_name = sp.track(tid)['name'] 
      xsongs.append(track_name) 
      print("{} : {} - feature: {}".format(name, track_name, x)) 

et l'appeler comme

filterBelowThreshold('myname', energy, tids, xsongs, value=0.650) 

ou

filterBelowThreshold('myname', energy, tids, xsongs, 0.650) 
0

test.py

def filterBelowThreshold(name, feature, tids, xsongs, **kwargs): 
    print kwargs['value'] 

class Test(object): 
    def __init__(self): 
     energy = ['item 1', 'item2', 'item3' ] 
     tids = [] 
     xsongs = [] 
     filterBelowThreshold('myname', energy, tids, xsongs, value=0.650) 

a = Test() 

python test.py imprimera 0.65

Vous avez déjà défini ce droit, il n'y a pas de problème. Quel est le problème auquel vous êtes confronté?