2014-12-03 3 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 

но (в прошлом, когда я печатаю ул строка кода) я получаю пустую строку

+1

Прежде всего, str - это функция python, вы можете использовать лучшее имя. – RvdK

ответ

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

-3

Global против локальной переменной? Попробуйте глобальную переменную.

+1

Не пытайтесь это когда-либо! – tamasgal

Смежные вопросы