计算机二级python问题

为什么21题的ls变量在func()函数里不使用global标注也不会报错?而我写的那个s函数不用global n标注就会报错???

第1个回答  2019-03-23
如果是可变类型可以执行修改变量的值,

2、如果全局变量是不可变类型,如果想要在函数中修改不可变类型,其实本质上是修改不可变类型的全局变量的引用,加上global 就可以修改不可变变量的引用。

到此,对于全局变量做一个小结:

A、在函数外边定义的变量叫做全局变量

B、全局变量能够在所有的函数中进行访问

C、如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错

D、如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的,小技巧强龙不压地头蛇

 

以上就是关于全局变量和局部变量的所有问题以及需要注意的点。在这里我们在做一个总结。

在函数中不使用global声明全局变量时不能修改全局变量的本质是不能修改全局变量的指向,即不能将全局变量指向新的数据。

对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量。

对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量。

可变类型:值可以修改(内存地址不变但是所保存的值变化了),引用可以修改(变量的内存地址变化了)

不可变类型:值不可以修改,可以修改变量的引用(=赋值号)。

在函数里面修改全局变量:

     1、如果全局变量是可变类型:所以在函数里面任意修改(值,引用)

     2、如果全局变量是不可变类型:在函数里面不能修改值,也不能修改引用,除非加上global 才能修改引用。追问

为什么s1函数不写global可以直接输出,s3却报错?

还有第一个func函数没有声明global输出结果却是car bus truck

第2个回答  2019-03-23
第一行就声明了ls = ['car', 'truck'],ls已经是一个全局变量了,所以在函数中可以直接调用ls对象的方法。你写的程序问题在于没有声明z,而不是没有声明global n。追问

老师我问下,第一个func函数内部没有声明ls为全局变量,为什么最后print ls输出结果是bus car truck 不应该是truck car吗?

追答

因为你调用了funC("bus")向ls列表中添加了一个元素"bus",再打印ls结果自然是["car", "truck", "bus"]。

本回答被网友采纳
第3个回答  2019-03-23
这段日子迷惘又黑暗,撑过去了会有下一个黑暗的日子等着你。
第4个回答  2019-03-23
哈哈哈哈彼此彼此哈哈哈追问

有没有病啊

第5个回答  2019-03-23
你把n的赋值放到最开头试试,应该就不会报错了
相似回答