2011-09-21 86 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