为什么函数里的变量名不同,效果就不一样了?不是说不可变数据在函数里面,可读不可写吗?
这个运行报错
data = 100
def func():
data = data +1
print(data)
func()
print(data)
这个运行不报错
data = 100
def func():
data1 = data +1
print(data1)
func()
print(data)
第二个里面的 data1=data+1,对于data是只读,data1是一个新的变量
在第一个例子中,函数内部的 data
变量是一个局部变量,它与全局变量 data
同名,但是它们是不同的变量。在函数内部,data
被赋值为 data + 1
,但是此时 data
还没有被定义,因此会抛出 UnboundLocalError
异常。
在第二个例子中,函数内部的 data1
变量是一个局部变量,它的值是全局变量 data
加上 1。这里的 data
是全局变量,函数内部只是读取了它的值,并没有修改它的值。
在 Python 中,如果在函数内部使用了一个变量名,Python 会首先在函数内部查找这个变量,如果找到了就使用它,如果没有找到就在全局作用域中查找。如果在函数内部对一个变量进行赋值,Python 会将这个变量视为局部变量,如果这个变量在函数内部没有定义,就会抛出 UnboundLocalError
异常。因此,如果想在函数内部修改全局变量的值,可以使用 global
关键字来声明这个变量是全局变量。
问题分析:
函数里面的变量名不同,会导致输出结果不同,这是因为变量名只是一个标识符,与变量所存值无关。在传递可变对象(如列表、字典等)时,函数修改可变对象时,会有相应的结果;在传递不可变对象时(如数字、字符串等),函数修改时会创建新的对象,原对象不会改变,所以按新变量名进行操作是不会有改变的。
解决方案:
如果需要传递可变对象,可以在函数内部对传递对象进行修改,在函数外部可以看到这些修改。
如果需要将函数内部修改的结果返回给函数外部的变量名,可以使用return返回函数内部的结果。
如果需要将原来的变量名修改为别的变量名,可以先把原来的变量名赋值给一个新变量名,然后在使用新变量名进行操作。比如:
a = [1,2,3] b = a # 将a的值赋值给b b.append(4) # 对b进行操作 print(a) # 输出:[1, 2, 3, 4] print(b) # 输出:[1, 2, 3, 4]
代码说明:
下面的代码实现的是一个简单的文件管理系统,包括用户登录、注册、文件查询、拷贝、删除等功能。其中,函数和变量的命名比较规范,注释也比较详细,可以让人很容易地看懂代码的整体逻辑。但是,由于篇幅过长,有些代码没有注释。如果需要更详细的讲解,请提出具体问题,我会尽力给予答复。
代码展示: