Python学习记录(2)

Python对象类型(二)

1.    字典:

Python的字典不是序列,而是一种映射。映射是一个其他对象的集合,但是他们是通过键而不是相对位置来存储的。映射没有任何可靠的从左至右的顺序。他们简单的将键映射到值。字典是python核心对象集合中唯一的映射类型。

1) 映射操作:

作为常量编写时,字典编写在大括号中,并包含一系列的“键:值”对。在我们需要将键和值关联的时候,字典是很有用的。作为一个例子:

>>>D={'name':'zhangs','age':19,'says':'hello world'}

>>>D['name']

'zhangs'

>>> D

{'name':'zhangs', 'age': 19, 'says': 'hello world'}

>>>D['age']+=1

>>> D

{'name':'zhangs', 'age': 20, 'says': 'hello world'}

>>>D['job']='dev'

>>> D

{'name':'zhangs', 'age': 20, 'says': 'hello world', 'job': 'dev'}

通过键索引一个字典,是python中编写搜索最快的方法。

2) 重访嵌套:

>>>rec={'name':{'first':'zhang','last':'smith'},'job':['dev','mgr'],'age':21.5}

>>> rec['name']['last']

'smith'

>>> rec['job'][-1]

'mgr'

>>> rec['job'].append('coder')

>>> rec

{'name': {'first': 'zhang', 'last': 'smith'}, 'job': ['dev', 'mgr','coder'], 'age': 21.5}

              Python对象在内存中如何存储,才能如此自由的使用字典?

3) 键的排序:for 循环

字典仅支持通过键获取元素。但是他也支持类型特定的操作。下面是将字典排序输出的两种示例:

>>>d={'a':1,'c':2,'b':3}

>>>l=list(d.keys())

>>>l

['a','c', 'b']

>>>l.sort()

>>>l

['a','b', 'c']

>>>for i in l:

...  print(i,'=>',d[i])

...

a => 1

b => 3

c => 2

>>>for i in sorted(d):

...  print(i,'=>',d[i])

...

a => 1

b => 3

c => 2

4) 迭代和优化:

从左到右的扫描一个对象的每个python工具都使用迭代协议。

列表解析和相关的函数编程工具(例如map和filter)通常运行的比for循环快:这是对有大数据集合的程序由重大影响的特性之一。

Python中的组要原则就是:首先为了简单和可读性去编写代码,在程序可以工作,并证明确实有必要考虑性能后,正在考虑该问题。更多的情况是diamante本身就应经够快了。若果确实要提高代码性能,python提供了time、timeit模块和profile模块。

5) 不存在的键:if测试:

>>> d

{'a': 1, 'c': 2, 'b': 3}

>>> 'd' in d

False

>>> 'b' in d

True

当然还有其他方法:get方法(带有默认值的条件索引),try语句(一个捕获异常并从异常中回复的工具),if/else表达式:

>>> a=d.get('x','a')

>>> a

'a'

>>> a=d.get('b','a')

>>>

A

3

>>> a=d['x'] if 'x' in d else 0

>>> a

0

2.    元组

元组(tuple)想一个不可以改变的列表。元组是序列,但是具有不可变性。语法上讲,他们编写在圆括号中而不是方括号中,他们支持任意类型、任意嵌套以及常见的序列操作:

>>>t=(1,2,3,4)

>>>len(t)

4

>>>t+(5,6)

(1, 2, 3,4, 5, 6)

>>>t[0]

1

>>>t*2

(1, 2, 3,4, 1, 2, 3, 4)

>>>t[1:]

(2, 3, 4)

1) 元组专有调用方法:

>>> t.index(2)

1

>>> t.count(3)

1

2) 与字典和列表一样,元组同样支持混合类型和嵌套,但是不能增长或缩短,他是不可变的。

3) 为什么使用元组

相比较列表,元组唯一的优势是不可变性。列表的值可能在任何地方改变,但是元组则保证数据不会改变。

>>> def a():

return (1,2)

... ...

>>> c,d=a()

>>> c

1

>>> d

2

>>> 

3.    文件:

文件对象是python代码对电脑上外部文件的主要接口。文件是核心类型,但是他有些特殊:没有特定的常量语法创建文件。要创建一个文件对象,需要调用内置的open函数。

4.    集合

集合可以通过调用内置的set函数而创建,且支持一般的数学集合操作,结合更像一个无值的字典的键:

>>>x=set('spam')

>>> x

{'a', 'm', 'p','s'}

>>>y={'h','a','m'}

>>> x,y

({'a', 'm', 'p','s'}, {'a', 'm', 'h'})

>>>x&y

{'a', 'm'}

>>> x|y

{'p', 'a', 's','m', 'h'}

>>> x-y

{'p', 's'}

>>>{x**2 for x in range(4)}

{0, 1, 4, 9}

5.    Python添加了新的数值类型:十进制数和分数。他们用来解决浮点数的局限性和内在的不精确性。

>>> import decimal

>>> d=decimal.Decimal('2.21')

>>> d

Decimal('2.21')

>>> print(d)

2.21

>>> from fractions import Fraction

>>> f=Fraction(2,3)

>>> f+1

Fraction(5, 3)

>>> f+Fraction(1,2)

Fraction(7, 6)

6.    python还添加了布尔值

7.    编写代码处理对象类型,至少有三种方法实现:

>>> l=[1,2]

>>> type(l)

<class 'list'>

>>> if type(l)==type([]):

...  print('yes')

...

yes

>>> if type(l)==list:

...  print('yes')

...

yes

>>> if isinstance(l,list):

...  print('yes')

...

Yes

但是如此写代码会限制代码灵活性,使得对象只能使用一种类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值