一、Python对象
Python对象基础
1、python对象特性
所有的python对象都拥有三个特性:
1.身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到
2.类型:决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。用内建函数type()查看对象的类型
3.值:对象表示的数据项
2、python对象属性
1.某些python对象有属性、值或相关联的可执行代码
2.用点 . 标记法来访问属性
3.最常用的属性是函数和方法,不过有一些Python类型也有数据属性
4.含有数据属性的对象包括(但不限于) :类、类实例、模块、复数和文件
3、对象身份比较
1.对象可以通过引用被赋值到另一个变量
2.因为每个变量都指向同一个(共享的)数据对象,只要任何一个引用发生改变,该对象的其它引用也会随之改变
>>> aList = ['hello', 'bob']
>>> bList = aList
>>> id(aList)
140614565571544
>>> id(bList)
140614565571544
>>> aList is bList
True
>>> bList[1] = 'tom'
>>> print aList
['hello', 'tom']
python对象类型
1、标准类型
数字 :包含整型 、长整型 、布尔型 、浮点型 、复数型
字符串
列表
元组
字典
2、其他内建类型
在做python开发时,还可能用到的数据类型有
类型 、Null对象(None) 、文件 、集合/固定集合 、函数/方法 、模块 和类
3、内部类型
以下类型通常用不到,只是为了知识的完整性,简要的列出
:
代码 、帧 、跟踪记录 、切片 、省略 和xrange
序列
序列类型有着相同的访问模式:它的每一个元素可以通过指定一个偏移量的方式得到。
序列类型操作符
序列操作符 | 作用 |
seq[ind] | 获得下标为ind的元素 |
seq[ind1:ind2] | 获得下标从ind1到ind2之间的元素集合 |
seq * expr | 序列重复expr次 |
seq1 + seq2 | 连接序列seq1 + seq2 |
obj in seq | 判断obj元素是否包含在seq中 |
obj not in seq | 判断obj元素是否不包含在seq中 |
1、通用序列操作
索引、分片、加、乘、检查某个元素是否属于序列的成员(成员资格)、连接
2、Python的序列
Python包含6中内建的序列,即列表、元组、字符串、Unicode字符串、buffer对象和 xrange 对象。
序列通用的操作包括:索引、长度、组合(序列相加)、重复(乘法)、分片、检查成员、遍历、最小值和最大值。
3、序列类型可用的内建函数
enumerate(iter)
len(seq)
max
min
reversed(seq)
sorted
sum
zip
四、Python数据类型
Python有五个标准的数据类型:
1.Numbers(数字)
2.String(字符串)
3.List(列表)
4.Tuple(元组)
5.Dictionary(字典)
数字
Python 支持的基本数字类型:
1、int :有符号整数
2、long:长整型
3、bool:布尔值
4、float:浮点
5、complex:复数
1、int(整型)
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
2、long(长整型)
1.C或其它编译型语言的长整数类型的取值范围是32位或64位
2.跟C语言不同,python的长整数类型能表达的数值仅仅与机器支持的(虚拟)内存大小有关 ,
即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
3.注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
4.在一个整数值后面加个L(大写或小写都可以),表示这个整数是长整数
5.这个整数可以是十进制,八进制,或十六进制
3.float(浮点型)
浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
complex(复数)
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
3.在判断语句中,空列表、空元组、空字符串、空字典、数值为0的数字以及None皆为False,其他皆为True
下列对象的布尔值是 False。
None
False (布尔类型)
所有的值为零的数
0 (整型)
(浮点型)
0L (长整型)
0.0+0.0j (复数)
"" (空字符串)
[] (空列表)
() (空元组)
{} (空字典)
7.用户创建的类实例如果定义了 nonzero(__nonzero__())或 length(__len__())且值为 0,那么它们的布尔值就是 False。
2.数字以0开头表示为8进制数
3.数字以0x或0X开头表示16进制数
4.数字以0b或0B开头表示2进制数
2、创建数值对象和给变量赋值一样简单
>>> anInt = 1
>>> aLong = -9999999999999999L
>>> aFloat = 3.1415926535897932384626433832795
>>> aComplex = 1.23+4.56J
7、更新数字对象
1、数字是不可更改类型,也就是说变更数字的值会生成新的对象
2、在python中,变量更像一个指针指向装变量值的盒子
3、对不可改变类型来说,你无法改变盒子的内容,但你可以将指针指向一个新盒子
>>> i = 3
>>> id(i)
18486024
>>> i = 4
>>> id(i)
18486000
8、删除数字对象
1、按照python的法则,无法真正删除一个数值对象,仅仅是不再使用它而已
2、删除一个数值对象的引用,使用del语句
3、删除对象的引用之后,就不能再使用这个引用(变量名),除非给它赋一个新值
4、绝大多数情况下并不需要明确del一个对象
9、标准类型运算符
1、在做数值运算时,必须努力保证操作数是合适的类型
2、相同类型数值运算,得到结果也是该类型的数值
3、不同类型数值运算,需要(显示或隐式地)做数值类型的转换
Python数字类型转换
int(x [,base ]) 将x转换为一个整数
long(x [,base ]) 将x转换为一个长整数
float(x ) 将x转换到一个浮点数
complex(real [,imag ]) 创建一个复数
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) 将序列 s 转换为一个元组
list(s ) 将序列 s 转换为一个列表
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为Unicode字符
ord(x ) 将一个字符转换为它的整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串
python数字类型转换实例:
>>> x = "12"
>>> type(x)
<type 'str'>
>>> int(x)
12
>>> type(12)
<type 'int'>
>>> str(x)
'12'
>>> repr(x)
"'12'"
>>> tuple(x)
('1', '2')
>>> list(x)
['1', '2']
>>> x = 12
>>> chr(x)
'x0c'
>>> unichr(x)
u'x0c'
>>> ord('a') #把字符转换为整数值
97
>>> hex(97) 转换成16进制
'0x61'
>>> oct(10) #8进制的12,转换为10进制:12(8)= 1 x 10^1 + 2 * 10^0 = 10
'012'
补充知识:进制转换
更多参考:http://jingyan.baidu.com/article/a3a3f811f7ab518da2eb8acb.html
十进制转任意进制的方法:短除法
短除法:除基取余法,反向写出
其他进制转换成10进制:
1、按权展开求和:乘基求和
用公式来表示就是:
abcd = a * A^3 + b * A^2 + c * A^1 + d * A^0 #权重为A,
在7进制下,数字1234 的大小应该是
1 * 7^3 + 2 * 7^2 + 3 * 7^1 + 4 * 7^0
=1*343 + 2*49 + 3*7 + 4*1
=466
Python数学函数
函数 | 返回值 ( 描述 ) |
---|---|
abs(x) | 返回数字的绝对值,如abs(-10) 返回 10 |
ceil(x) | 返回数字的上入整数,如math.ceil(4.1) 返回 5 |
cmp(x, y) | 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1 |
exp(x) | 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045 |
fabs(x) | 返回数字的绝对值,如math.fabs(-10) 返回10.0 |
floor(x) | 返回数字的下舍整数,如math.floor(4.9)返回 4 |
log(x) | 如math.log(math.e)返回1.0,math.log(100,10)返回2.0 |
log10(x) | 返回以10为基数的x的对数,如math.log10(100)返回 2.0 |
max(x1, x2,...) | 返回给定参数的最大值,参数可以为序列。 |
min(x1, x2,...) | 返回给定参数的最小值,参数可以为序列。 |
modf(x) | 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。 |
pow(x, y) | x**y 运算后的值。 |
round(x [,n]) | 返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。 |
sqrt(x) | 返回数字x的平方根,数字可以为负数,返回类型为实数,如math.sqrt(4)返回 2+0j |
Python随机数函数
随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。
Python包含以下常用随机数函数:
函数 | 描述 |
---|---|
choice(seq) | 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。 |
randrange ([start,] stop [,step]) | 从指定范围内,按指定基数递增的集合中获取一个随机数,基数缺省值为1 |
random() | 随机生成下一个实数,它在[0,1)范围内。 |
seed([x]) | 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。 |
shuffle(lst) | 将序列的所有元素随机排序 |
uniform(x, y) | 随机生成下一个实数,它在[x,y]范围内。 |
Python三角函数
Python包括以下三角函数:
函数 | 描述 | |
---|---|---|
acos(x) | 返回x的反余弦弧度值。 | |
asin(x) | 返回x的反正弦弧度值。 | |
atan(x) | 返回x的反正切弧度值。 | |
atan2(y, x) | 返回给定的 X 及 Y 坐标值的反正切值。 | |
cos(x) | 返回x的弧度的余弦值。 | |
hypot(x, y) | 返回欧几里德范数 sqrt(x*x + y*y)。 | |
sin(x) | 返回的x弧度的正弦值。 | |
tan(x) | 返回x弧度的正切值。 | |
degrees(x) | 将弧度转换为角度,如math.degrees(math.tan(1.0)) ,返回30.0 | |
radians(x) | 将角度转换为弧度 |
Python数学常量
常量 | 描述 |
---|---|
pi | 数学常量 pi(圆周率,一般以π来表示) |
e | 数学常量 e,e即自然常数(自然常数) |
数据类型比较
1、按存储模型分类
1.标量类型:数值、字符串
2. 容器类型:列表、元组、字典
2、按更新模型分类:
1. 可变类型:列表、字典
2. 不可变类型:数字、字符串、元组
3、按访问模型分类
1. 直接访问:数字
2. 顺序访问:字符串、列表、元组
3. 映射访问:字典
备注:
1、当一个变量使用赋值语句创建出来后,等号右边的值变成了内存中的一个对象,而变量引用(即指向)那个对象
2、当改变一个可变类型时,这个变化是作用于可变类型内存位置中的对象上的
3、但是,当一个变量要改变它的值并且这个值是不可变类型时,Python会分配一个新的内存位置存储新值,并将变量引用到新的对象上。
4、能够原地修改的对象称为可变类型,而不能原地修改的对象称为不可变类型。
5、只有可变对象(列表、字典和集合)可以原处修改
一般来说:
1、列表、字典和元组可以包含任何种类的对象
2、列表、字典和元组可以任意嵌套
3、列表和字典可以动态地扩大和缩小
python中的可哈希与不可哈希
什么是可哈希(hashable)?
简要的说可哈希的数据类型,即不可变的数据结构(字符串str、元组tuple、对象集objects)。
哈希有啥作用?
它是一个将大体量数据转化为很小数据的过程,甚至可以仅仅是一个数字,以便我们可以用在固定的时间复杂度下查询它,所以,哈希对高效的算法和数据结构很重要。
什么是不可哈希(unhashable)?
同理,不可哈希的数据类型,即可变的数据结构 (字典dict,列表list,集合set)
下面举例说明:
可变类型的数据不可哈希,如list,字典:同值不同址,不同值同址
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> print id(a)
56055304
>>> print id(b)
56169992
>>> a.append(4)
>>> print id(a)
56055304
>>>
数值、字母、字符串、数字、元组不可变:同值同址,不同值不同址
>>> a = 12 >>> b = 12 >>> id(a) 50815600L >>> id(b) 50815600L >>> c = 13 >>> id(c) 50815576L >>> a = 13 >>> b =12 >>> id(a) 50815576L >>> id(b) 50815600L
哈希性参考:
https://www.cnblogs.com/liangmingshen/p/10889172.html
http://www.mamicode.com/info-detail-2223756.html