2017-10-15 50 views
2

我是编程新手,偶然发现了这个“奇怪”问题。这里是我的代码:当函数退出时,对函数中的变量所做的更改

part_1 = "" 
part_2 = "" 
part_3 = "" 
part_4 = "" 

alphabet = "abcdefghijklmnopqrstuvwxyz" 

import random 

def random_part(part): 
    for x in range (0,4) : 
     part += random.choice(alphabet) 
    print(part) 


random_part(part_1) 

print(part_1) 

目标是创建一个由4个随机字母组成的字符串。现在,当我运行这段代码时,我期待它打印字符串2次:1,因为函数中的“打印”指示和另一个由于打印(part_1)。

事情是,当我运行它,我有一个随机串和空行,比如:

bdgv 

*empty line* 

换句话说,位于机能的研究工作中的第一印刷指示,但如果我问函数完成后,该变量重置为“”。 这可能是什么原因?

回答

4

part += random.choice(alphabet)是局部变量part,不是突变再分配。作为参数传递的字符串不受影响。在Python中,字符串是不可变的,所以你不能将它们传递给任何函数,并期望它们已经改变。你不得不返回新的String对象,并具有来电它分配给传递的变量:

def random_part(part): 
    for x in range (0,4) : 
    part += random.choice(alphabet) 
    print(part) 
    return part 

part_1 = random_part(part_1) 

顺便说一句,在+=操作是否是一个突变或重新分配取决于所涉及的类型的实现神奇的方法__iadd__。例如,对于列表,这是一个突变,您传递的参数会发生变化。显然,对于不可变的类型,它永远不会是一个变种。

相关问题