当函数退出时,对函数中的变量进行更改

时间:2017-10-15 19:02:48

标签: python

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

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 ;. 可能是什么原因?

1 个答案:

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