2016-12-30 81 views
0
makebbb(a): 
    a = "bbb" 

這個功能顯然沒有它的輸入轉換爲這表現在下面的代碼片段是否有可能作出這樣的修改輸入

x = "notbbb" 
makebbb(x) 
print(x) 
# Outputs "notbbb" 

現在我明白了失敗的原因,「BBB」的功能,我想知道的是,如果有反正做這樣的功能? (我不只是在談論分配字符串,但與一般的=分配)

+0

在蟒蛇可變和不可變參數讀了。你不能改變不可變參數。 (你可以通過把它們放在一個列表中或者聲明它們是全局的方式來解決它)。這裏有很多關於這個問題的問題。 –

+0

'def makebbb(a =「bbb」):返回一個'比'print makebbb(「test」)',可變或靜態變量的本地初始值 – dsgdfg

回答

0

定義你想從一個FUNC作爲global改變變量,

>>> def makebbb(): 
    global x 
    x = "bbb" 


>>> print x 
notbbb 
>>> makebbb() 
>>> print x 
bbb 
>>> 
0

爲什麼不直接在返回值的功能並更新'a'?

def makebbb(a): 
    return "bbb" 

x = "notbbb" 
x = makebbb(x) 
print(x) 
0
def makebbb(a): 
    return "bbb" 

x = "notbbb" 
x = makebbb(x) #call function in the assignment to modify it 
print(x) 

輸出:

bbb 
0

如果存在功能的範圍之外x,可以修改該變量直接(重新綁定值以相同的變量在內存中)。否則,一種功能性的方法就是返回一個新的字符串。

x = "notbbb" 
makebbb() # Modify variable outside function scope. 
print(x) 

x = "notbbb" 
print(makebbb(x)) # return new value.  

的特定捕獲這個例子是,你正在試圖通過引用傳遞一個一個不可改變值。反而會發生什麼是在參數傳遞上創建副本。您可以通過可變類型(如列表)實現您想要的效果。

0

您可以修改某些參數,即通過引用而不是按值傳遞的參數。

參數是可變對象是可以改變的,就像這樣:

def change_list(l): 
    l.append(4) 

k = [1, 2, 3] 
change_list(k) 
print(k) # Prints [1,2,3,4] 

然而,這是行不通的:

def dont_change_list(l): 
    l = [5] 
相關問題