现在的位置: 首页 > 综合 > 正文

15. 更多内容

2013年10月01日 ⁄ 综合 ⁄ 共 1886字 ⁄ 字号 评论关闭

15. 更多内容

1.类中的特殊函数

在类中有一些特殊的方法具有特殊的意义,比如__init__和__del__方法,它们的重要性我们已经学习过了。

一般说来,特殊的方法都被用来模仿某个行为。例如,如果你想要为你的类使用x[key]这样的索引操作(就像列表和元组一样),那么你只需要实现__getitem__()方法就可以了。想一下,Python就是对list类这样做的!

下面这个表中列出了一些有用的特殊方法。如果你想要知道所有的特殊方法,你可以在《Python参考手册》中找到一个庞大的列表。

表15.1 一些特殊的方法

名称

说明

__init__(self,...)

这个方法在新建对象恰好要被返回使用之前被调用。

__del__(self)

恰好在对象要被删除之前调用。

__str__(self)

在我们对对象使用print语句或是使用str()的时候调用。

__lt__(self,other)

当使用 小于 运算符(<)的时候调用。类似地,对于所有的运算符(+,>等等)都有特殊的方法。

__getitem__(self,key)

使用x[key]索引操作符的时候调用。

__len__(self)

对序列对象使用内建的len()函数的时候调用。

 

2.assert语句

l  assert语句用来声明某个条件是真的并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。当assert语句失败的时候,会引发一个AssertionError。

>>> mylist = ['item']

>>> assert len(mylist)>= 1

>>> mylist.pop()

'item'

>>> assert len(mylist)>= 1

Traceback (most recent call last):

 File "<stdin>", line 1, in ?

AssertionError

l  exec语句用来执行储存在字符串或文件中的Python语句。

>>>'print "Hello World"'

Hello World

 

3.几个函数

l  eval函数用来计算存储在字符串中的有效Python表达式

>>>eval('3*2')

6

l  repr函数用来取得对象的规范字符串表示。反引号(也称转换符)可以完成相同的功能。注意,在大多数时候有eval(repr(object)) == object。你可以通过定义类的__repr__方法来控制你的对象在被repr函数调用的时候返回的内容。

>>> i =[]

>>>i.append('item')

>>> `i`

"['item']"

>>>repr(i)

"['item']"

4. 元组和字典做函数参数

不像其他的类型,元组和字典类型做参数比较特殊,分别需要在参数名前加上*和**前缀。字典的例子就不举了:

#!/usr/bin/python

def powersum(power, *args):

   '''Return the sum of each argument raised to specified power.'''

   total = 0

   for i in args:

      total += pow(i, power)

    return total

print powersum(2, 3, 4)
print powersum(2, 10)

显示:

25

100

由于在args变量前有*前缀,所有多余的函数参数都会作为一个元组存储在args中。如果使用的是**前缀,多余的参数则会被认为是一个字典的键/值对。

5. lambda语句

lambda语句被用来创建新的函数对象,并且在运行时返回它们。

#!/usr/bin/python

def make_repeater(n):
   return lambda s: s*n
 
twice = make_repeater(2)

print twice('word')
print twice(5)

显示:

wordword

10

6. 列表解析

列表解析是对某个列表进行一些判断和处理生成一个新的列表:

>>>a = [1, 2, 3, 4]

>>>[u * 2 for u in a]

[2, 4, 6, 8]

>>>[u + 2 for u in a if u > 2]

[5, 6]

 

列表解析更像是把处理数据的语句提到整个语句最前面,例如第一个列表的解析可以写成:

x = []

for u in a:

         x.append(u* 2)

第二个解析可以写成:

x = []

for u in a:

         ifu > 2:

                   x.append(u+ 2)

怎么样,对比一下我们会发现这是一个非常方便的功能啊,在很多时候,我们都是使用循环来处理列表中的每一个元素,而使用列表综合可以用一种更加精确、简洁、清楚的方法完成相同的工作。

抱歉!评论已关闭.