初识Python(六)

特殊的方法

在类中有一些特殊的方法具有特殊的意义,比如__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

<function <lambda> 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 "<stdin>", line 1, in ?

AssertionError

repr函数

repr函数用来取得对象的规范字符串表示。你可以通过定义类的__repr__方法来控制你的对象在被repr函数调用的时候返回的内容。

>>> a={'1':1,'2':2,'3':3}

>>> repr(a)

"{'1': 1, '3': 3, '2': 2}"

原文地址:https://www.cnblogs.com/hanmeimei/p/python6.html