python思想中一切皆对象,但是由于python是一门应用非常广泛的语言,所以在某些方面,你可以把python称为面向对象的语言,但它也可以是一门面向过程的语言: 程序 = 数据结构 + 算法
- 面向过程:以指令为中心,由指令处理数据,如何组织代码解决问题,如:shell运维
- 面向对象:以数据为中心,所有的处理代码都围绕数据展开,如何设计数据结构组织数据, 并提供对此类数据所允许处理操作,如:web开发
- 1.Python最基本的是数据结构是序列, 序列为索引为非负整数的有序对象的集合
- 2.Python中内建的6种数据序列:列表,元组,字符串,Unicode字符串,buffer对象和xrange对象
- 3.None表示Python的空值,对于Python而言,不管 "",None,[],{},set(),() 在if判断语句中都为False
-
Integral 类型:
- 整形:不可变类型
- 布尔类型:True,False
-
浮点类型:
- 浮点数:3.1415
- 复数 :3+6j
- 十进制数字:
-
字符串:"abc”
注:该类型其实都是对对象的引用
- 元组:tuple(),不可变对象
- 列表:list[],可变对象
- 字典:dict{},可变对象
- 集合:set([]),可变对象
list,tuple,dict都是容器
- 1.list,tuple,dict 可以跨行定义,最后一个元素后可以使用逗号,但元素为空时,不允许使用逗号
- 2.所有对象都有引用计数,当引用计数为0时,垃圾回收器会回收此对象
- 3.获取对象引用计数
import sys ; sys.getrefcount(object)
- 4.删除对象引用,del(object),减少对象引用计数
- 5.列表和字典都支持两种赋值操作:浅复制和深复制
- 浅复制:如list_1=list 创建一个新对象,但是还是对之前对象的引用,新对象会影响之前对象
- 深复制:创建一个新对象,然后递归的复制一份,放置到新对象中,新对象不会影响之前对象 深复制可以使用copy模块的deepcopy()实现
- 6.Python中的对象都是"第一类",即使用标识符命名的所有对象都有相同的状态,于是能够命名所有对象,
都可以直接当数据进行处理,比如:
a = 1,b = 2,result = b/a
表示数值对象直接可以当作数据处理 - 7.所有序列(概念:序列为索引为非负整数的有序对象的集合)都支持迭代(字符串也是一个序列)
- 8.所有序列都支持的操作和方法:
- 索引 :
val[i]
- 切片 :
val[i:j]
- 扩展切片 :
val[i:j:stride]
- 长度 :
len(val)
- 最小值 :
min(val)
- 最大值 :
max(val)
- 数值序列求和 :
sum(val)
- 都为True :
all(val)
- 任意为True :
any(val)
- 连接 :
val+val2
- 重复 :
val * N
- 存在 :
item in container
- 不存在 :
item not in container
- 索引 :
-
Python中所有的数据存为内存对象:
- Python中,"变量"实际是"指向内存对象的引用"
-
动态类型:
- 在任何时刻,只要需要,某个对象引用都可以重新引用一个不同的对象,可以是不同的数据类型
- 内置函数type()用于返回给定对象的数据类型
- 内置函数id()查看变量引用对象在内存中的地址
- "=”用于将变量名与内存中的对象绑定,如果对象存在,就直接指向该对象,如果不存在,用"=”创建引用的对象
例如:name="tom"
,这个操作Python会在内存中声明一个name变量,开辟一块内存空间存储tom
对象,然后name
指向
tom
这个字符串对象,当tom
这个字符串的引用计数为0时,Python会在合适的机会进行垃圾回收
-
只能包含字母,数字,下划线,不能以数字开头
-
区分字母大小写
-
禁止使用关键字
-
以单一下划线开头的命名的变量(_name)不会被from module import * 语句导入
-
前后有两个下划线命名的变量(__str__)是系统定义的变量名,对Python解释器有特殊含义
-
以两个下划线开头但结尾没有的变量(__numbers)是类的本地变量
-
在交互模式下,"_" 用于保存最后表达式的结果
注意:变量名没有类型,对象才有
- 查看对象方法:
dir(obj)
- 查看对象函数使用:
help(obj.method)