在网站上自学python,在这里记录下一些python和其他语言比较不同的一些独特的地方,以便日后重温学习。
1. 可变的数据类型和不可变的数据类型
学到Numbers这个数据类型的时候,教程提了一嘴,说Numbers是不可变的数据类型,此特点和其他编程语言是不一样的(或者说我以前在学习的时候没有留意到这点?),所以这次留意了一下。
可变数据类型包括:列表list和字典dict;不可变数据类型:整型int、浮点型float、字符串型string和元组tuple。
这些不可变数据类型一旦被重新赋值,就相当于创建了一个新的变量,在内存的地址也改变了。为此特意试了一下:
>>> print(counter)
1000.0
>>> id(counter)
4300282496
>>> counter=1000.1
>>> id(counter)
4300282520
同样的,一个字符串类型,s=iloveyou,如果取s[2:4],则新取出来的这个变量也是全新的变量,内存地址不同。
>>> s='dkdxi....dksdjf'
>>> id(s)
4314479216
>>> id(s[4:6])
4314483768
>>> id(s[3:5]);
4314483488
在这里要注意一点,不可变类型在参数传递的时候相当于只传值,函数内部的参数变化并不会影响到函数外部的变化。而可变类型的参数传递函数内部的变化是会影响到参数外的函数的值的。
2. Python关于数组的一个很有用的函数,string[start : end : step]。例如,x=[1,2,3,4,5,6,7,8],那么x[::2]=[1,3,5,7]。用来做字符串反转的时候最好用。只需要x[::-1]即可。这里要注意,因为是反转,所以如果只需要一部分反转的时候,start和end要倒过来用,即[end:start:step]。但是值得提醒的是,还是以上面的数组为例,如果是x[7:0:-1],那么只会是[7,6,5,4,3,2],也就是说最后一个1并不会出现。此时如果我改成x[7:-1:-1],干脆整个失效,不反回任何东西。所以这种情况只能留空白,才能是[7,6,5,4,3,2,1]。
3. python3.x中关于除法的定义发生了变化,在python2.x中,如果是3/2的话,默认是返回整数1,而在python3.x中,3/2返回的是float 1.5,如果仍然想返回整数,那么只能是3//2,此时返回的就是1了。