对于全局变量的疑问
为什么下面这串代码的结果是,我理解的是对于change_result函数来说result是全局变量,按道理change_result函数不能对result做出修改,可结果是我明显是理解错了,求大佬解答{:9_221:}result=[]
def change_result():
result.insert(0,1)
print(result)
change_result() https://fishc.com.cn/thread-159034-1-1.html 列表,字典,集合等数据类型是没有作用域滴!
你在哪里都可以修改它们 全局变量和局部变量你没有好好搞懂:
局部变量是在函数,类中调用的变量,在外边修改不了(但可以访问)
全局变量是在整个程序中,在所有的地方都可以调用(新版要先写global 全局变量,没写会警告,但没啥事)
所以全局变量是可以在函数里调用的 可以看看我这个帖子的第四部分 global 与 nonlocal 使用的一个细节分析
为什么在函数中使用全局变量的时候,有时候需要使用关键字 global,而有时候则不需要关键字 global 呢?
python 编程语言,尽量的避免复杂化
像 int 、 float 、 str 等类型是一类不可变类型,所谓不可变类型,就是定义即赋值,修改实际上是新的定义,这一类变量的定义和修改都是使用赋值运算符 '='。
像 list 、 set 、 dict 等类型是一类可变类型,所谓可变类型,就是定义之后,还可以对变量进行修改,修改前后,该变量的 id 不变,这一类变量定义使用赋值运算符,修改则需要下标(或键),还可以有插入、删除等操作。
对于不可变类型的变量,若是在函数内部进行修改的话,会有歧义,无法识别到底是修改同名的全局变量,还是定义一个同名的局部变量(因为修改和定义方式是一样的)。因此在函数内若使用不可变类型的全局变量时需要使用 global 进行明确指出。
对于可变类型,则不存在这种歧义,若是在函数内部修改一个与全局变量同名的变量,不会被认为是要创建一个同名的局部变量(因为修改和定义方式是不一样的),当在函数内没有定义一个与全局变量同名的局部变量,那么修改一个同名的变量时,能够明确就是修改全局变量。因此在函数内若使用一个可变类型的全局变量时不需要使用 global 明确指出。
关于全局变量和局部变量。可以详细看看完整的帖子 重新看下视频
页:
[1]