2016-12-30 78 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] 
相关问题