我有一个递归函数,它连接一个字符串(并做一些逻辑),当逻辑完成时,它完成函数并将结果返回给变量。
(我的功能非常大,所以我简化了它。
import random
def test(str):
l = len(str)
if l >= 10:
return 0
str += random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
test(str)
str = ''
test(str)
print str
当我在我的功能中“打印str”时,它可以工作,但是:
r
rV
rVG
rVGF
rVGFK
rVGFKa
rVGFKat
rVGFKatY
rVGFKatYN
rVGFKatYNY
但是当我打印str(代码的最后一行)时,我得到一个空字符串
答案 0 :(得分: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)
答案 1 :(得分:-4)
全局vs局部变量?尝试全局变量。