python 的变量很有意思。有过一点基础语言的人都知道一个变量在声明前一定要给它指定类型。
例:JAVA 声明 变量名为 name 的时候一定要 String name = “某某”; 如果直接写 name = “某某”就会报错.
但是 但是 Python 就可以不用声明类型。 就可以 直接写 name = “某某”,但是它是怎么确定类型的呢,是由对象值来决定的。
例如:
name = “某某”,这个某某系统会认定是个字符串,所以 name 现在的类型为str.
age = 12 系统会判断这个12是数字类型。所以age就是int类型。 说到 int,那就先简单说一句,python里的int没有界限,只要你内存足够大,它可以放任何范围的整形。这点跟java区别很大。java 有 short,int,long等等整形的类型。
我们可以在编译器中检查一下。 首先 我们声明三个变量:
name = “张三”
age = 24
score = 95.5
然后运用python3的一个函数 type()来查看变量的类型.
我们现在就能很清楚的知道,每个变量的类型是什么了。
接下来会发现一个问题,如果 name 这个变量给他赋个其他类型的值会怎么样?
例如: name = ‘张三’,然后 name = 12 ;
我们也用type()看一下类型:
然后我们会发现这样写并不会报错,其类型也是随着第二次新的赋值对象的类型而改变了.
然后我们在说一下深层次一点的东西。
每当我们声明一个变量并且赋值的时候,python都会在内存中某个位置创建个空间来存放一下。这个我们可以用id()函数来查看一下。
但当一个变量重新赋值之后,原先的对象会一直存在那里吗?如果这样那岂不是内存会一点点的增大?
对于这点python内部有一个机制叫做垃圾回收机制(GC),每当这个变量在用不到的时候这个机制就会触发,然后就会把这个对象给清理了。
那么python 是怎样来确定这个对象有没有被引用呢?
是这样的,在对象被创建时,python内部就会给这个对象加一个 计数器。每当一个变量引用的时候就会在 计数器 上 +1,当这个计数器 为0 的时候,就会被回收了.
然后,在做几个小demo。
age = 30
score =30
输出 age == score 。 ==是用来比较值是否相等的。
如果想判断一下,这两个值所指向的是否是同一个对象两种方法:
1. 分别输入 id(age) 和 id(score)。比较一下
2.用 is 。 age is score。
我们会发现:不管值还是引用的地址,都是一样的。
下面在试一下。 salary = 3100
lines = 3100
salary == lines
salary is lines
会惊奇的发现 salary is lines 的结果居然是 false。
输出的id也都是不一样的。这是为什么呢?
因为是在python内部做了一个机制。就是 数字类型 15 - 256 之间,python早已经储存好了一个地址。不管你声没声名这个变量,这个地址都已经存在了。所以当赋值的时候都是指向同一个地址。 当超出这个范围之后,就会真正创建了一个新的空间地址.
(这里面还有好多暂时也没太懂。例如 :
id(4.0) 与 id(5.0)地址也是一样的. id(4.0) 与 id(3.0 +1.0)是不一样的。 这些问题,等后续深入的时候会慢慢在研究的)
这里在说几个函数:
len 查看长度的. 字符串也可以用 * 。 str[*]查看第几位字母的。从0开始.
下面赋上一张python数据类型的截图。先熟悉一下,接下来会一个个的熟悉这些类型的.