2014-01-23 48 views
1

鑑於這種代碼:在python中需要字符串初始化嗎?

def double_char(str): 
    result = "" 
    for i in range(len(str)): 
    result += str[i] + str[i] 
    return result 

result = ""字符串初始化?如果是這樣,是否有必要首先做?

+1

請注意,這整個事情是相當低效的;因爲使用不可變的字符串,這意味着每次迭代都會創建一個新的字符串對象,所以最好加入一個列表,而不是一次構建一個字符。 – geoffspear

回答

7

當你

result += ... 

這基本上意味着,

result = result + ... 

Python會不知道在這個點的值result。所以,它會拋出這個錯誤

UnboundLocalError: local variable 'result' referenced before assignment 

無論如何,初始化變量總是更好。

建議

  1. 不要使用str作爲變量名,它隱藏了內置str功能。

  2. 你正在嘗試做的,可以在一個單一的線來完成,像這樣

    return "".join(i*2 for i in input_string) 
    

def double_char(input_string): 
    return "".join(i*2 for i in input_string) 

print double_char("thefourtheye")   # tthheeffoouurrtthheeyyee 
0

而Python不要求你陳述的類型一個變量在使用之前(例如int a = 10而不是隻有a = 10),變量result必須在+=之前可以使用。否則,當你使用result += ...時,Python會嘗試result = result + ...

作爲另一個建議,避免命名變量str,因爲它會覆蓋Python中內置的str函數/類型。