请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

全局变量使用疑惑

图片描述

本以为d是一个全局整形变量,可以在func函数里对他进行操作(给它加1),结果不能,提示我func里的那个d是一个局部变量,还没有定义你就想赋值? 但是为什么demo函数里就可以对全局变量c(是list)做追加元素的append操作呢? 我的问题就是 在函数的作用域里对列表追加元素的操作和对整形变量增加1的操作都是操作,两种操作有什么不同?整形的全局变量为什么在函数内不能直接操作???

正在回答 回答被采纳积分+3

2回答

johnnykuo2015 2021-02-05 11:55:54

我说一下我的想法:

UnboundLocalError这个错误,其实跟c 和d的类型没有什么关系,最重要的是你在函数里边做的相应操作不同导致的

第一, 编译器会认为d += 1,是在函数内部进行了一次赋值操作,d就会被认为是func()函数内部的一个局部变量了,而d += 1 ==> d = d +1,那么函数里边局部变量没有初始化,就拿来用就是会报错

第二,list.append()是通过 PyList_Append(PyObject *op, PyObject *newitem) 方法来实现,其实函数内部就是直接使用全局变量进行操作,函数内部不会产生局部变量,也就不会有UbboundLocalError的错误


参考:https://vbsreddy1.medium.com/unboundlocalerror-when-the-variable-has-a-value-in-python-e34e097547d6

0 回复 有任何疑惑可以回复我~
7七月 2020-07-29 08:09:28

d是可以的,你仔细检查下代码。

0 回复 有任何疑惑可以回复我~
  • d做为全局变量是不可以在函数作用域里直接使用,除非在函数里使用之前用global声明;而如果一个列表型的全局变量就可以在函数作用域里直接使用,无需global申明。 很奇怪!!??
    回复 有任何疑惑可以回复我~ 2020-07-29 09:43:40
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信