Learning Python(2)

Chap4 python对象

1.Python标准类型:
数字
Integer整型
Boolean布尔型
Long integer长整型
Floating point real number浮点型
Complex number复数型
String字符串
List列表
Tuple元组
Dictionary字典

2.Python其他内建类型
类型
Null对象(None)–没有什么有用的属性,布尔值总是False
文件
集合/固定集合
函数/方法
模块

3.内部类型
代码–编译过的Python源代码片段,可执行对象。内建函数compile()可以得到代码对象,被exec命令或eval()内建函数执行。
帧–Python的执行栈帧
跟踪记录
切片
省略–用于扩展切片语法,起记号作用
Xrange–range的兄弟,用于需要节省内存使用或range无法完成的超大数据集场合

4.Python通过传递引用来处理对象,每个对象都有一个计数器,记录它自己的引用次数。Python提供了is和is not操作符来测试两个变量是否指向同一个对象(a is b)。

5.整型和字符串对象是不可变对象,所以python会很高效地缓存它们。这会造成我们认为Python应该创建新对象时,它却没有创建新对象的假象。(不包含浮点数)

>>> a=1
>>> b=1
>>> a is b
True
>>> id(a)
34121432
>>> id(b)
34121432
>>>

Python仅缓存简单整型,因为它认为在Python应用程序中这些小整型会经常被用到。

6.标准类型内建函数
type(object)
cmp(obj1,obj2)
str()和repr()(及“(反引号)操作符)–
可以方便地以字符串的方式获得对象的内容、类型、数值属性等信息。
str()函数得到的字符串可读性好,repr()函数得到的字符串通常可以用来重新获得该对象,通常obj==eval(repr(obj))。
尽管str()、repr()和“运算在特性和功能方面都非常相似,事实上repr()和“做的是完全一样的事情,它们返回的是一个对象的“官方”字符串表示,也就是说绝大多数情况下可以通过求值运算(eval())重新得到该对象,但str()则有所不同,str()致力于生成一个对象的可读性好的字符串表示,适用于print输出。
type()和isinstance()

>>> class Bar(object):pass

>>> bar=Bar()
>>> type(Bar)
<type ‘type’>
>>> type(bar)
<class ‘__main__.Bar’>
>>> class Foo:pass

>>> foo=Foo
>>> type(Foo)
<type ‘classobj’>
>>> type(foo)
<type ‘classobj’>
>>>

7.以访问模型为标准的类型分类
直接访问:数字
顺序访问:字符串、列表、元组
映射访问:字典

8.不支持的类型:char或byte、指针、int vs short vs long、float vs double

chap5  数字

1.python支持多种数字类型:整型、长整型、布尔型、双精度浮点数、十进制浮点型和复数。

2.在python中,变量更像一个指针指向装变量值的盒子。对于不可改变类型,无法改变盒子的内容,但是可以讲指针指向一个新盒子。

3.除标准整型外,python的长整型类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关,可以轻松表达很大的整型。

4.python中的浮点类型类似C的double,可以用十进制或科学技术法表示,每个浮点型占8个字节,64位,其中52个位用于表示底,11位表示指数,剩余一个符号位。

5.复数(暂时用不到)

6.除法
传统除法–若为整型除法,传统除法会舍去小数部分,返回一个整型(地板除);若操作数之一是浮点型,则执行真正的除法。
真正除法–总是返回真实的商,不管操作数是整型还是浮点型。from  __future__  import division
地板除//–总是舍去小数部分,返回数字序列中比真正的商小的最接近的数字。

7.功能函数
abs()返回绝对值,如果是复数,返回math.sqrt(num.real2+num.imag2).
coerce()返回一个包含类型转换完毕的两个数值元素的元组.
divmod()把除法和取余运算结合,返回一个包含商和余数的元组.
pow(num1,num2,mod=1)(mod可用于次方结果后进行取余操作)和双星号(**)都可以进行指数运算.
round()用于对浮点型进行四舍五入运算。第二个参数指定小数点后位数。

>>> round(3.499999)
3.0
>>> round(3.499999,1)
3.5

8.仅适用于整型的内建转换函数
hex(num)–将数字转换成十六进制并以字符串形式返回
oct(num)–将数字转换成八进制并以字符串形式返回
chr(num)–讲ASCII值的数字转换成ASCII字符,范围0<=num<=255
ord(num)–接受一个ASCII或Unicode字符,返回相应的ASCII值或Unicode值
unichr(num)–接受Unicode码值,返回其对应的Unicode字符

chap6 序列:字符串、列表和元组

1.序列类型操作符
简单说,序列就是包含一些顺序排列对象的一个结构。
1)成员关系操作符(in/not in)
对象 [not]  in 序列
2)连接操作符(+)
sequence1+sequence2–不是最快或者最有效的
对于字符串来说,这个操作不如把所有的子字符串放到一个列表或可迭代对象中,然后调用一个join方法来把所有的内容连接在一起节约内存;类似的,队列表来说,推荐列表类型的extend()方法把两个或多个列表对象合并。
3)重复操作符(*)
sequence*copies_int
4)切片操作符([],[:],[::])
sequence[index]
sequence[starting_index:ending_index]包含起始索引不包含结束索引
5)用步长索引来进行扩展的切片操作

>>> s=’dfgfhgjyuy’
>>> s[::-1]
‘yuyjghfgfd’
>>> s[::2]
‘dghju’

2.字符串
Python里单引号和双引号作用是相同的。Python实际上有三类字符串。通常意义的字符串(str)和Unicode字符串(unicode)实际上都是抽象类basestring的子类。
string模块预定义的字符串:

>>> import string
>>> string.uppercase
‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’
>>> string.lowercase
‘abcdefghijklmnopqrstuvwxyz’
>>> string.letters
‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’
>>> string.digits
‘0123456789’

内建函数
标准类型函数:cmp()
序列类型函数:
len()
max()/min()
enumerate()–遍历字符串,显示方式:序列号 字符
zip()–
>>> s,t=’foa’,’obr’
>>> zip(s,t)
[(‘f’, ‘o’), (‘o’, ‘b’), (‘a’, ‘r’)]
字符串类型函数:
raw_input()
str()/unicode()
chr()/unichr()/ord()
……字符串类型内建方法有很多P122

3.Unicode

用于在多种双字节字符的格式、编码进行转换,其中包括一些对这类字符串的操作管理功能。
Unicode术语
ASCII       美国标准信息交换码
BMP          基本多文中平面
BOM         字节顺序标记
CJK/CJKV   中文-日文-韩文的缩写
Code point  类似于
ASCII值,代表Unicode字符的值
Octet        八位二进制数的位组
UCS
通用字符集
UCS2         UCS的双字节编码方式
UCS4 UCS的四字节编码方式
UTF              Unicode或者UCS的转换格式
UTF-8         8位UTF转换格式(无符号字节序列,长度1—4个字节)
UTF-16       16位UTF转换格式(无符号字节序列,通常是16位长)
新的内建函数unicode()和unichar()可以看出Unicode的str()和chr()。Unicode()函数可以吧任何Python的数据类型转换成一个Unicode字符串,如果是对象,并且该对象定义了__unicode__   ()方法,它还可以把对象转换成相应的Unicode字符串。
Unicode
使用多字节,所以支持多种不同的编码方式,比如codec支持的 4中耳熟能详的编码方式:ASCII、ISO8859-1/Latin-1、UTF-8、UTF-16。

4.列表

1)创建列表类型并给它赋值

>>> aList = [123,’abc’,4.56,[‘inner’,’list’],7-9j]
>>> print aList
[123, ‘abc’, 4.56, [‘inner’, ‘list’], (7-9j)]
>>> list(‘foo’)
[‘f’, ‘o’, ‘o’]

2 )访问列表中的值

>>> aList[0]
123
>>> aList[1:4]
[‘abc’, 4.56, [‘inner’, ‘list’]]
>>> aList[3][1]
‘list’

3)更新列表

>>> aList[2]
4.56
>>> aList[2]=’float’
>>> aList
[123, ‘abc’, ‘float’, [‘inner’, ‘list’], (7-9j)]
>>> aList.append(“hello”)
>>> aList
[123, ‘abc’, ‘float’, [‘inner’, ‘list’], (7-9j), ‘hello’]

4)删除列表元素或者列表本身

>>> aList
[123, ‘abc’, ‘float’, [‘inner’, ‘list’], (7-9j), ‘hello’]
>>> del aList[1]
>>> aList
[123, ‘float’, [‘inner’, ‘list’], (7-9j), ‘hello’]
>>> aList.remove(123)
>>> aList
[‘float’, [‘inner’, ‘list’], (7-9j), ‘hello’]
>>> del aList

列表类型的内建函数
list.append(obj)
list.count(obj)
list.extend(seq)
list.index(obj,i=0,j=len(list))
list.insert(index,obj)
list.pop(index=-1)
list.remove(obj)
list.reverse()
list.sort(func=None,key=None,reverse=False)

那些可以改变对象值的可变对象的方法是没有返回值的!

列表的特殊属性课用于实现堆栈和队列P145

5.元组

1)创建元组并赋值
特别的,只有一个元素的元组需要在元组分割符里面加一个逗号,以防止跟普通的分组操作符混淆。
2)访问类似列表
3)更新元组相当于重新构造新元组
4)如何移除一个元组元素或元组
删除单独的元组元素不可能。大部分情况不需要显示del删除对象。

元组的特殊特性
元组对象本身不可变,不意味着元组包含的可变对象不可变。
是默认的集合类型–所有的多对象的、逗号分隔的、没有明确用符号定义的,默认都是元组。
字典的关键字–列表可变不可做字典的关键字。

拷贝Python对象、浅拷贝和深拷贝

ASC

Leave a Reply

Your email address will not be published. Required fields are marked *