gpt4 book ai didi

python - 当函数退出时,对函数中的变量所做的更改将恢复

转载 作者:行者123 更新时间:2023-11-28 22:23:55 25 4
gpt4 key购买 nike

我是编程新手,偶然发现了这个“奇怪”的问题。这是我的代码:

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”指示,另一次是因为 print(part_1)。

事情是,当我运行它时,我有一个随机字符串和一个空行,例如:

bdgv

*empty line*

换句话说,位于函数内的第一个打印指示有效,但如果我在函数完成后询问变量,它会重置为“”。可能是什么原因?

最佳答案

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__ 的实现。例如,对于列表,它是一个突变,您传递的参数会发生变化。显然,对于不可变类型,它永远不会是突变。

关于python - 当函数退出时,对函数中的变量所做的更改将恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46758866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com