2011-09-21 123 views
0

我想结合两个功能,因为A)我认为我可以和B)我认为我应该。当我单独使用这些函数时,脚本工作正常。当我把它们合并时,“新”变量是一个空字符串,它应该是什么。任何帮助,将不胜感激。如果你需要可以安排的完整脚本。结合2功能

功能A:

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

功能B:

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

功能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) 

这里是我想要做一个简化版本,根据搅拌机的建议进行一些修改。最后,如果我打印一个它应该导致'0000000'。事实并非如此。

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

什么是你想怎么办?它看起来像function_1只是返回字符串(?)的部分直到第一个“@”符号。 function_2看起来像返回x和y的交集。在你的组合脚本中,我不能说出function_1部分和function_2部分之间的相互作用。为什么全局?将一个变量命名为“新”可能不是一个好主意,因为这是一个关键字。 –

+0

@Chris Curvey:'new'不是Python关键字。 –

+0

你的函数应该可能返回一些东西。 – Benjamin

回答

2

我会去容易与全局:

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

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

由于在原始问题中过度使用全局变量,海报可能需要在那里抛出一个'return new'。 –

+0

我也会让'script()'更具描述性;) – Blender

+0

经过更新以反映建议。 – Chris