2014-12-03 28 views
0

我有一個遞歸函數來連接一個字符串(並做一些邏輯),當邏輯完成時,它完成函數並將結果返回給變量。在Python中遞歸地連接字符串

(我的作用是相當大的,所以我簡化它

import random 
    def test(str): 
     l = len(str) 
     if l >= 10: 
      return 0 
     str += random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') 
     test(str) 

    str = '' 
    test(str) 
    print str 

當我 「打印海峽」 在我的功能它的工作原理,的iget:

r 
rV 
rVG 
rVGF 
rVGFK 
rVGFKa 
rVGFKat 
rVGFKatY 
rVGFKatYN 
rVGFKatYNY 

,但是當我打印STR(最後代碼行)我得到一個空字符串

+1

首先,str是一個python函數,你可能想要使用一個更好的名字。 – RvdK 2014-12-03 18:21:09

回答

2

一個字符串在Python中是不可變的,例如使用return語句或者一個字符數組,如果你想要函數實際修改它的輸入。

這條線:

str += random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') 

將初始化一個新的對象str並指派str + random.(...)它。所以你傳遞給函數的實際對象基本上被放棄了,後來垃圾被收集了。

這是那種你在找什麼,但它不是最好的實現:

import random 
def test(input_string): 
    l = len(input_string)             
    if l >= 10: 
     return input_string 
    input_string += random.choice('abcdefghijklmnopqrstuvwxyz' 
            'ABCDEFGHIJKLMNOPQRSTUVWXYZ') 
    return test(input_string)            

input_string = ''               
input_string = test(input_string)           
print(input_string) 
+0

哦,我錯過了「回報」,非常感謝你 – Erik 2014-12-03 18:31:33

-3

全球VS局部變量?嘗試全局變量。

+1

不要嘗試這個永遠! – tamasgal 2014-12-05 19:33:21