4.python基础

一、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(整型)

  在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
  在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都是实数。

注:Python中存在小数字池:-5 ~ 257
 
4、bool(布尔值):
1.该类型的取值只有两个,即True和False ;
2.True的数值为1,False的数值为0
3.在判断语句中,空列表、空元组、空字符串、空字典、数值为0的数字以及None皆为False,其他皆为True
 
4.所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布尔 True 或 False 值。
5.空对象、 值为零的任何数字或者 Null 对象 None 的布尔值都是 False。
下列对象的布尔值是 False。 
 
 
None
False (布尔类型)
 所有的值为零的数
0 (整型)
(浮点型)
0L (长整型)
0.0+0.0j (复数)
"" (空字符串)
[] (空列表)
() (空元组)
{} (空字典) 
 
 
6.值不是上面列出来的任何值的对象的布尔值都是 True,例如 non-empty、 non-zero 等等。
7.用户创建的类实例如果定义了 nonzero(__nonzero__())或 length(__len__())且值为 0,那么它们的布尔值就是 False。
8.数字如果非零,则为真
9.其他对象如果非空,则为真
 
 
 
5、数字表示方式
1.python默认以十进制数显示
2.数字以0开头表示为8进制数
3.数字以0x或0X开头表示16进制数
4.数字以0b或0B开头表示2进制数
 
 
6、创建数值对象并赋值
1、数字提供了标量贮存和直接访问
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
怎么判断可变不可变 ?
 
总结:改个值 看id是不是一样,id一样的为可变,则不可哈希,
改了值,id变化,则为不可变,则可哈希

哈希性参考:

https://www.cnblogs.com/liangmingshen/p/10889172.html

http://www.mamicode.com/info-detail-2223756.html

原文地址:https://www.cnblogs.com/zhongguiyao/p/11048081.html