2010-01-17 3 views
1
import re 
def strip_tags(value): 
    "Return the given HTML with all tags stripped." 
    return re.sub(r'<[^>]*?>', '', value) 

J'ai cette fonction pour supprimer les balises HTML, mais elle ne semble accepter qu'une seule valeur, que dois-je changer si je veux passer plusieurs (pas fixe) valeurs à la fois?Passer plusieurs valeurs à un appel de fonction (Python)

Merci

Répondre

8

Python offre un moyen d'utiliser des listes d'arguments de taille arbitraire:

def myfunc(*args): 
    for argument in args: 
     print "myfunc was given", argument 

Si vous mettez *args dans votre définition de fonction, toutes les valeurs transmises à la fonction sont disponibles en tant que tuple appelé args. Notez que vous pouvez également faire valoir des arguments supplémentaires avant *args, comme

def my_other_func(name, *args): 

de sorte que le premier argument sera disponible name, le reste sera dans le tuple args.

Il est conventionnel, mais pas nécessaire, d'appeler ce paramètre args. Tant qu'il y a un astérisque devant, vous pouvez l'appeler comme vous voulez.

+0

Il y a un bon (et très rapide) tutoriel montrant comment utiliser non seulement * mais aussi ** (dictionnaires) pour passer des arguments, ici: http: //www.technovelty .org/code/python/asterisk.html – Roman

2

Pourriez-vous utiliser une boucle.

for value in values: 
    strip_tags(value) 
1

Vous pouvez passer value comme un tableau de chaînes, puis retourner le tableau de valeurs nettoyées.

1
import re 
def strip_tags(values): 
    return map(lambda i: re.sub(r'<[^>]*?>', '', i), values) 
0

Voici une fonction écrite au-dessus de la fonction que vous avez fournie. cela prendrait dans une liste des valeurs et retourner la liste traitée correspondante:

import re 
def strip_tags_list(values): 
    return map(strip_tags, values) 

Note: ceci fonctionnerait sur Python 2.6 et versions earleir. sur python 3.0, vous devez convertir explicitement le résultat de map() en liste en utilisant list().

1

Si les valeurs sont indépendantes les unes des autres, alors ne pas modifier strip_tags, il suffit de changer la façon dont vous l'appelez:

values = [some_value, another_value] 
values = [strip_tags(v) for v in values] 
# values[0] is now the strip_tags version of the old values[0] 
# similar to values[0] = strip_tags(values[0]), except for every item 

Si les valeurs sont liées, telles que pièces adjacentes étant du même fichier, les concaténer alors avant d'utiliser strip_tags:

values = [some_value, another_value] 
result = strip_tags("".join(values)) 
# note result is single string 
Questions connexes