簡體   English   中英

在Python中遞歸連接字符串

[英]recursively concatenate string in 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

當我在函數中“打印str”時,它會起作用:

r
rV
rVG
rVGF
rVGFK
rVGFKa
rVGFKat
rVGFKatY
rVGFKatYN
rVGFKatYNY

但是當我打印str(代碼的最后一行)時,我得到一個空字符串

字符串在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)

全局變量還是局部變量? 嘗試全局變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM