2011-09-21 4 views
0

J'essaie de combiner deux fonctions parce que A) Je pense que je peux et B) Je pense que je devrais. Lorsque j'utilise les fonctions séparément, le script fonctionne correctement. Quand je les combine, la "nouvelle" variable est une chaîne vide, ce qu'elle devrait être. Toute aide serait appréciée. Si vous avez besoin du script complet qui pourrait être organisé.Combinant 2 fonctions

Fonction A:

def strip_domain_name(x): 
    global ns 
    l = x.find('@') 
    ns = x[0:l] 

Fonction B:

def encode_user_name(x,y): 
    global new 
    for a in x: 
     if a in y: 
      new = new + y.get(a) 

Fonction A + B:

def combined_above_script(x,y,z): 
    global ns 
    global new 
    l = x.find('@') 
    ns = x[0:l] 
    for a in y: 
     if a in z:     
      new = new + z.get(a) 

Voici une version simplifiée de ce que je suis en train de faire, avec quelques modifications basées sur la suggestion de Blender. À la fin, si j'imprime aa, il devrait en résulter '0000000'. Ce qui n'est pas le cas.

aa = '' 
bb = '' 
encode = {'a':'0'} 

def strip_and_encode(x,y,z): 
aa = '' 
bb = x[0:x.find('@')] 

for a in y: 
    if a in z:     
     aa += z.get(a) 

s='[email protected]' 
strip_and_encode(s,bb,encode) 
print(aa) 
+1

ce que vous essayez de faire? Il semble que function_1 renvoie juste la partie d'une chaîne (?) Jusqu'au premier signe "@". function_2 a l'air de renvoyer l'intersection de x et y. Dans votre script combiné, je ne peux pas dire ce que la partie function_1 et la partie function_2 doivent faire l'une avec l'autre. Et pourquoi les globals? Et ce n'est probablement pas une bonne idée de nommer une variable "nouvelle", parce que c'est un mot-clé. –

+0

@Chris Curvey: 'new' n'est pas un mot-clé Python. –

+0

Vos fonctions devraient probablement retourner quelque chose. – Benjamin

Répondre

2

Je vais facile avec les GLOBALS:

def script(x, y, z): 
    new = '' 
    ns = x[:x.find('@')] 

    for a in y: 
    if a in z:     
     new += z.get(a) 
+1

Compte tenu de la surutilisation des globaux dans la question originale, l'affiche doit probablement y jeter un 'retour nouveau '. –

+0

Je ferais aussi 'script()' un peu plus descriptif;) – Blender

+0

Mis à jour pour refléter les suggestions. – Chris