无法在要求对象展开的函数中使用 __try_python语言的匿名函数、7种可调用对象以及用户定义的可调用类型...

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

b61397610f16944c2f09169c57abddc7.png
94bc6f2d1d7712a66f63fa7d07cd6f69.png
54524673bd5b3abe8712b4d8108c6117.png

匿名函数

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

6179b845150eabf50619148bc5e09f0e.png

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

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

8c3b8c8d020a1369cbdcbd751064dbba.png

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

可调用对象

2129dd3fbf826149bab1ee5b9df63556.png

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

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

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

f83d55dbe971a35f4bb1fb310b93e5df.png

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 randomIn [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]: 3In [50]: b()Out[50]: 1In [51]: callable(b)Out[51]: True

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

de4fb372e1b58ad657ce396843141a30.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值