我是编程新手,偶然发现了这个"奇怪的"问题。这是我的代码:
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因为" print"由于打印(part_1),功能和另一个指示。
事情是,当我运行它时,我有一个随机字符串和一个空行,例如:
bdgv
*empty line*
换句话说,位于功能内的第一个打印指示有效,但如果我在功能完成后询问变量,则将其重置为" &#34 ;. 可能是什么原因?
答案 0 :(得分:4)
part += random.choice(alphabet)
是本地变量part
的重新分配,而非变异。作为参数传递的字符串不受影响。 Python中的字符串是不可变的,因此您永远不能将它们传递给任何函数并期望它们已经更改。您必须返回新的字符串对象并让调用者将其分配给传递的变量:
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__
的实现。例如,对于列表,它是一个变异,您传递的参数会发生变化。显然,对于不可变类型,它永远不会是一个变异。