要素#2:对象引用(变量)
- Python将所有数据存为内存对象
- Python中,变量事实上是指向内存对象的引用
- 动态类型:在任何时刻,只要需要,某个对象引用都可以重新引用一个不同的对象(可以是不同的数据类型)
- 内建函数type()用于返回指定数据项的数据类型
- "="用于将变量名与内存中的某对象绑定:如果对象事先存在,就直接进行绑定;否则,则由"="创建引用的对象
变量命名规则
- 只能包含字母、数字、下划线,且不能以数字开头
- 区分字母大小写
- 禁止使用保留字(python2与python3的保留字有所不同)
命令习惯
- 以单一下划线开头的变量名(_x)不会被from module import *语句导入
- 前后都有下划线的变量名(_x_)是系统定义的变量名,对python解释器有特殊意义
- 以两个下划线开头但结尾没有下划线的变量名(__x)是类的本地变量
- 交互式模式下,变量名"_"用于保存最后表达式的结果
>>> 1+1
2
>>> print _
2
在交互式模式中语句可以直接执行
注意:变量名没有类型,对象才有
>>> type(name)
<type 'int'>
>>> name = 3.14
>>> type(name)
<type 'float'>
变量可以引用任意对象
python变量名只是内存引用的标示而已
要素#3:组合数据类型
数据结构:通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合
python常用的组合数据类型
序列类型
列表:使用[]创建,如["This","is","a","pig"]
0 | This |
1 | is |
2 | a |
3 | pig |
>>> l1 = ["This","is","a","pig"]
>>> l1[0]
'This'
>>> l1[0][0]
'T'
列表是可变对象,原处修改,id未变
>>> print l1
['This', 'is', 'a', 'pig']
>>> print l1[3]
pig
>>> l1[3] = "sheep" //修改值
>>> print l1
['This', 'is', 'a', 'sheep']
>>> id(l1)
58691848L
>>> l1[3] = "Tom"
>>> id(l1)
58691848L //id未变
>>> print l1
['This', 'is', 'a', 'Tom']
//3号元素的引用发生了改变,整个列表的引用没有改变
元组:使用()创建,如('one','two')-------不可变对象
>>> t1 = ("This","is")
>>> t1[0]
'This'
>>> t1[0][0]
'T'
字符串也属于序列类型
//切片
>>> name = 'jerry'
>>> name[0]
'j'
>>> name[0:1] //结束位是不显示的,0:1只打印j
'j'
>>> name[0:2] //0:2打印je
'je'
>>> name[:2] //从开头到2
'je'
>>> name[2:] //从2到最后
'rry'
>>> name[0:4:2] //切片可以指定“步进”,从0到4,步进2
'jr'
//切片本身会创建新的对象(字符串不可变)
集合类型
集合
映射类型
字典
- 列表是可变对象,元组是不可变序列
- Python中,组合数据类型也是对象,因此其可以嵌套['hello','world',[1,2,3]]
- 实质上,列表和元组并不真正存储数据,而是存放对象引用
- python对象可以具有其可以被调用的特定“方法(函数)”,每一种对象都是由其类生成的,类由数据和操作这些数据的函数组成(类中的函数叫方法),抽象属性实例化出来才叫对象
- 元组、列表以及字符串等数据类型是“有大小的”,也即,其长度使用内置函数len()测量
>>> len(name)
5
>>> type(l1)
<type 'list'>
>>> print l1
['This', 'is', 'a', 'Tom']
>>> len(l1)
4
>>> l1.append('James') //列表对象的append()方法可用于为其补充新元素
>>> print l1
['This', 'is', 'a', 'Tom', 'James']
>>> len(l1)
5