专业编程基础技术教程

网站首页 > 基础教程 正文

python知识分享:匿名函数、7种可调用对象和定义可调用类型方法

ccvgpt 2024-11-18 09:23:08 基础教程 5 ℃

#python打卡##Python数学编程##python#

匿名函数

在python表达式中,用来创建匿名函数的是lambda关键字。

python知识分享:匿名函数、7种可调用对象和定义可调用类型方法

lambda函数在python语言中只能使用纯表达式,也就是说,在lambda函数体中不能使用while和try,当然也不能赋值等python语句。

实际应用过程中,lambda函数最适合在参数列表中使用。下面我们来看胰腺癌例子,使用lambda函数表达式反转拼写,然后依据发转的结果对其进行排序,具体如下所示:

那么,是不是意味着lambda函数很受欢迎,应用范围很广呢?其实不然。除了向上述的例子中那样,lambda函数作为参数传给高阶函数外,python中很少使用匿名函数。很少使用的原因是lambda函数不易阅读和不易撰写。

可调用对象

既然提到可调用对象,我们就需要判断什么样的对象是可调用的,如何进行判断呢?

判断对象是否可调用可以使用python内置的callable()函数。

python数据模型文档中给出了7种可调用对象,具体如下:

1.用户定义的函数

使用def语句创建函数

使用lambda表达式创建函数

2.内置函数

使用C语言实现的函数,例如len或time.strftime。

3.内置方法

使用C语言实现的方法,如dict.get。

4.方法

在类的定义体中定义的函数。

5.类

定义类我们使用的是class,调用类就相当于调用函数。

6.类的实例

如果类定义类__call__方法,则它的实例可以作为函数进行调用。

7.生成器函数

使用yield关键字的函数或方法,而调用生成器函数返回的是生成器对象。

用户定义的可调用类型

除了python函数是真正的对象外,任何python对象都可以像函数一样表现。因此,只需要实现实例方法__call__。

接下来,我们来看下如何定义可调用类型。

In [45]: import random
In [46]: class B:
    ...:     def __init__(self,items):
    ...:         self._items=list(items)
    ...:         random.shuffle(self._items)
    ...:         
In [47]: class B:
    ...:     def __init__(self,items):
    ...:         self._items=list(items)
    ...:         random.shuffle(self._items)
    ...:     def pick(self):
    ...:         try:
    ...:             return self._items.pop()
    ...:         except IndexError:
    ...:             raise LookupError('pick from empty B')
    ...:     def __call__(self):
    ...:         return self.pick()
    ...:         
In [48]: b=B(range(6))
In [49]: b.pick()
Out[49]: 3
In [50]: b()
Out[50]: 1
In [51]: callable(b)
Out[51]: True

如上代码所示,最后使用callabel方法判断了对象b是否可调用,返回的结果是True,即b是可调用对象。


最近发表
标签列表