作者:下家山(qq:1209050967,微信:xiajiashan)
python大道至简(第二部分)
二十四:Python Number(数字)
Python Number 数据类型用于存储数值。
数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间。
以下实例在变量赋值时 Number 对象将被创建:
注意:del也可以同时删除多个,如:
del var,var2,var3
24.1 python的数值类型
Python 支持四种不同的数值类型:
· 整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点。
· 长整型(long integers) - 无限大小的整数,整数最后是一个大写或小写的L。
· 浮点型(floating pointreal values) - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 =250)
· 复数(complex numbers) - 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点型。
int | long | float | complex |
10 | 51924361L | 0.0 | 3.14j |
100 | -0x19323L | 15.20 | 45.j |
-786 | 0122L | -21.9 | 9.322e-36j |
080 | 0xDEFABCECBDAECBFBAEl | 32.3+e18 | .876j |
-0490 | 535633629843L | -90. | -.6545+0J |
-0x260 | -052318172735L | -32.54e100 | 3e+26J |
0x69 | -4721885298529L | 70.2-E12 | 4.53e-7j |
· 长整型也可以使用小写"L",但是还是建议您使用大写"L",避免与数字"1"混淆。Python使用"L"来显示长整型。
· Python还支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点型
24.2 Python Number 类型转换
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 ) 将一个整数转换为一个八进制字符串
24.3 int函数
http://blog.csdn.net/tongshuo_11/article/details/70226800
Int函数不能把非字符串转成期待的base进制
但是为什么int(12)却可以呢,int(12)不是int(12,10)的简化吗?
24.4 long函数
注意系统默认加’L’。
当第一个参数是整数的时候,第二个参数不能加!
24.5 float函数
Float(12)和float(‘12’)结果一样,其他int和long一样。
24.6 complex函数
还记得复数的运算规则吗:
(a+bj)*(a+bj)=a*a+bj*bj+abj+abj
所以:(1+1j)*(1+1j)=1*1+1j*1j+1*1j+1j+1 =1-1+1j+1j=2j
注意j的平方=-1.
24.7 str和repr函数的区别
Str和repr都是把括号中的对象转成字符串,但是通俗的说法是:
Str转换后的字符串比较直观是个用户看的,而repr转换后的字符串是本来面目,是本质,是个计算机看的。
http://blog.csdn.net/u013961718/article/details/51100464
就像18,十进制表示就是18,是给用户看的,但是用16进制表示却是0x12,是给计算机看,是本质。
24.8 eval函数
http://blog.csdn.net/SeeTheWorld518/article/details/47983511
eval的第一个功能:
用于计算字符串str中包含的有效的表达式的值,并返回结果
计算字符串中有效的表达式2+2,并返回其结果4;
计算字符串中有效的表达式pow(2,2),并返回其结果4。
Eval的第二个功能:
在计算字符串str中包含的有效的表达式的值的同时,返回一个对象
计算字符串中有效的表达式2+2的值,并返回计算结果,同时返回一个对象(4,0)。
Eval的第三个功能:
将字符串转成相应的对象(如list、tuple、dict和string之间的转换)
二十五:list 列表
Python有6个序列的内置类型,但最常见的是列表和元组。
序列都可以进行的操作包括索引,切片,加,乘,检查成员。
list是Python内置的一种数据类型。list是一种有序的集合,可以随时添加和删除其中的元素。
25.1 列表的定义
变量classmates
就是一个list。用len()函数可以计算列表的长度(元素个数)
25.2 通过索引找值和通过值找索引
注意:索引从0开始。当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界。
获取最后一个元素的方法
len(classmates) - 1。
如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:
以此类推
但是,classmates[-4]越界。
注意-0=0,即零没有正负之分
通过值找索引
列表自带index函数,可以通过值找到该值在列表中位置。如果有相同值,则返回第一个匹配的位置。
25.3 列表中的方法
25.3.1 追加元素
list是一个可变的有序表,所以,可以往list中追加元素到末尾:
追加变量也可以
25.3.2 插入insert
原来的第三个元素会往后移。
25.3.3 删除pop
要删除list末尾的元素,用pop()
方法:
删除指定的元素
Pop在删除元素的同时会返回该元素。
注意,列表没有push功能
25.3.4 排序sort
注意:python 3.x不支持sort()里面传参数
通用排序函数sorted()
默认从小到大,倒序通过第二个参数reverse=True指定
25.3.5 通过值找索引位置index
见25.2
通过值找索引
列表自带index函数,可以通过值找到该值在列表中位置。如果有相同值,则返回第一个匹配的位置。
25.3.6统计元素出现的次数count
25.3.7 列表的扩展extend
注意:list2并没有改变
25.3.8 移除列表中的元素
移除remove参数中指定的元素,如果多个,移除第一个
25.3.9 反向列表中的元素reverse
25.4 列表中函数
25.4.1 列表比较函数cmp
注意:python3.x取消了cmp函数
25.4.2 计算列表中元素最大和最小值max(),min()
25.6 替换元素
25.7 列表里面元素可不同
List里面的元素可以是一个list
所以,classmates的元素个数是4。
也可以这样:
要通过classmates访问num里面2怎么做呢?
类似一个二维数组
25.8 空列表的定义和长度
25.9 列表的切片(截取)
25.10 列表操作符
25.10.1 加法
25.10.2 相乘
25.10.3 迭代
判断变量是否在列表中
二十六:tuple 元组
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:
26.1 元组索引
访问方法,还是通过索引,而且从0开始
26.2 元组切片(截取)
26.3 元组一旦定义了就不能修改
现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0]
,classmates[-1]
,但不能赋值成另外的元素。
不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来。
26.4 元组运算符
26.4.1 加法
26.4.2 乘法
26.4.3 判断元素是否存在
26.4.4 迭代
注意:y并不需要定义
26.5 元组内置函数
26.5.1 求元组长度len()
26.5.2 求元组最大值和最小值函数
26.5.3 元组比较函数
相等为0,不等为-1.
注意:python 3.x后没有比较函数了。
26.6 空元祖及空元祖的长度
26.7 一个元素的元组
正确的定义方法
注意:只有一个元素的列表,却没有这个问题
26.8 让不能修改的tuple变为可修改
这个tuple定义的时候有3个元素,分别是'a'
,'b'
和一个list。不是说tuple一旦定义后就不可变了吗?怎么后来又变了?
别急,我们先看看定义的时候tuple包含的3个元素:
当我们把list的元素'A'
和'B'
修改为'X'
和'Y'
后,tuple变为:
表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a'
,就不能改成指向'b'
,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
理解了“指向不变”后,要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。
26.9 删除元组
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组.
26.10 元组和列表的区别
元组和列表都属于python中的有序列表。
元组用圆括号,列表用方括号;
元组中的元素不能修改,列表可以随意修改
元组不支持追加append,插入insert,但是列表可以
二十七:字典(Dictionary)
27.1 什么是字典
1:字典是一种可变容器模型,可以存储任意类型对象。
2:字典中的元素是通过键值来表示的,形如:
d={key1:value1,key2:value2,key3:value3}
3: 键必须是唯一的,值可以不唯一(两个元素的值相同也可以)。
值的数据类型可以任意,但是键的数据类型只能是字符串,数字或元组。
4:键和值之间以冒号(:)分开,元素和元素之间以逗号(,)分开,最后以花括号{}括起来。
27.2 字典的访问
27.3 字典的修改
注意:键是不能修改的,只能删除!
27.4 删除字典
删除了键值对’name’
系统提示找不到’xiajiashan’这个键
注意:只能删除键,不能直接通过del删除值
再访问,提示找不到字典了
访问一个清空的字典,结果为空
删除某个键的方法
删除了键’b’
删除第一个键值对!(注意,有的地方说是随机删除,好像不是)
27.4.1 定义空字典
如何定义一个值为空的键
27.5 字典的特性
字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
27.5.1 在一个字典里面不允许有两个相同的键
如果出现相同的键,则后一个值会被记住。
27.5.2 键的类型必须是数字,字符串或者元组,不能是列表
注意:为什么元组tup排到了中间,而键值’name’却排到了字典的最后面?
27.6 操作字典的函数
27.6.1 计算字典长度len()函数
注意:len计算的是字典键值对的个数!
27.6.2 求字典最大值和最小值的函数
注意,比较的是键,而不是值
27.6.3 比较函数cmp()
注意:cmp比较不仅比较键,还比较值,后面第三个例子中,dist1的值是整型,而dist2的值是浮点型,比较的时候系统会把整型转为浮点型进行比较。
27.6.3 str函数,以字符串的形式表示字典
以字符串的形式表示字典。
注意:str是通过把字典用一对双引号括起来表示为字符串的。
27.6.4 求各种变量的类型函数type
求出各种类型
27.7 字典中的方法
27.7.1 list.clear(),清除字典中的元素,使之为空
27.7.2 返回字典的浅复制
可是:什么是浅复制
27.7.3 通过列表创建一个新字典dist.fromkeys(seq[,vla])
注意,这里的[,val]表示参数是可选的,也即from.keys()函数里面的参数是可选的。
如果第二个参数忽略,创建的新字典值为None
27.7.4 通过key得到val,函数dist.get(key,default)
为什么第二个参数没有用呢?
27.7.5 判断一个键是否在字典中dist.has_key()函数
27.7.6 以列表的形式返回字典中对应的键值对
注意:把字典dist中的键值对,做成了对应的元组形式,然后以列表的形式显示。
27.7.7 以列表的形式返回字典中的键/值
注意,值为None的键,放在了最后。
27.7.8 设置一个键值函数dist.setdefault(key,default)
注意:此函数主要用于插入新的键值对
27.7.9 更新键值对
27.8.1 字典的遍历
https://www.cnblogs.com/stuqx/p/7291948.html
http://www.lfhacks.com/tech/subdictionary-python