九阳神王txt免费下载:初识Python(六)

来源:百度文库 编辑:中财网 时间:2024/05/12 07:00:17
特殊的方法
在类中有一些特殊的方法具有特殊的意义,比如__init__和__del__方法,它们的重要性我们已经学习过了。
一般说来,特殊的方法都被用来模仿某个行为。例如,如果你想要为你的类使用x[key]这样的索引操作(就像列表和元组一样),那么你只需要实现__getitem__()方法就可以了。想一下,Python就是对list类这样做的!
名称说明
__init__(self,...)这个方法在新建对象恰好要被返回使用之前被调用。
__del__(self)恰好在对象要被删除之前调用。
__str__(self)在我们对对象使用print语句或是使用str()的时候调用。
__lt__(self,other)当使用 小于 运算符(<)的时候调用。类似地,对于所有的运算符(+,>等等)都有特殊的方法。
__getitem__(self,key)使用x[key]索引操作符的时候调用。
__len__(self)对序列对象使用内建的len()函数的时候调用。
列表综合
通过列表综合,可以从一个已有的列表导出一个新的列表。例如,你有一个数的列表,而你想要得到一个对应的列表,使其中所有大于2的数都是原来的2倍。对于这种应用,列表综合是最理想的方法。
>>> a=[2,3,4,5]
>>> b=[2*i for i in a if i>2]
>>> print b
[6, 8, 10]
在函数中接收元组和列表
当要使函数接收元组或字典形式的参数的时候,有一种特殊的方法,它分别使用*和**前缀。
由于在args变量前有*前缀,所有多余的函数参数都会作为一个元组存储在args中。如果使用的是**前缀,多余的参数则会被认为是一个字典的键/值对。
>>> def say(*a):
b=()
for i in range(0,len(a)):
print a[i],
>>> say(2,3,4)
2 3 4
>>> def say(*a):
print a
>>> say(2,3,4)
(2, 3, 4)
lambda形式
lambda语句被用来创建新的函数对象,并且在运行时返回该函数
>>> def say(n):
return lambda s:s*n
>>> func=say(2)    运行say()时返回了lambda创建的新函数s:s*2给func,此时func就是一个函数,其参数是s  计算的是s*2
>>> print func
at 0x00B5D1B0>
>>> print func(5)
10
exec语句与eval语句
exec语句用来执行储存在字符串或文件中的Python语句。例如,我们可以在运行时生成一个包含Python代码的字符串,然后使用exec语句执行这些语句。
>>> exec "print func(5)"   接上面的lambda形式
10
eval语句用来计算存储在字符串中的有效Python表达式。
>>> eval("6>5")
True
assert语句
assert语句用来声明某个条件是真的。例如,如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。当assert语句失败的时候,会引发一个AssertionError。
>>> mylist = ['item']
>>> assert len(mylist) >= 1
>>> mylist.pop()
'item'
>>> assert len(mylist) >= 1
Traceback (most recent call last):
File "", line 1, in ?
AssertionError
repr函数
repr函数用来取得对象的规范字符串表示。你可以通过定义类的__repr__方法来控制你的对象在被repr函数调用的时候返回的内容。
>>> a={'1':1,'2':2,'3':3}
>>> repr(a)
"{'1': 1, '3': 3, '2': 2}"