不仅 Python 函数是真正的对象,任何 Python 对象都可以表现得像函数。为此,只需实现实例方法 __call__。

import randomclass BingoCage:
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 BingoCage')  ➍def __call__(self):  ➎return self.pick() 

❶ __init__ 接受任何可迭代对象;在本地构建一个副本,防止列表参数的意外副作用。

❷ shuffle 定能完成工作,因为 self._items 是列表。

❸ 起主要作用的方法。

❹ 如果 self._items 为空,抛出异常,并设定错误消息。

❺ bingo.pick() 的快捷方式是 bingo()。

输出示例:

>>> bingo = BingoCage(range(3))
>>> bingo.pick()
1
>>> bingo()
0
>>> callable(bingo)
True

转载于:https://www.cnblogs.com/wjw2018/p/10672361.html

5.5 用户定义的可调用类型相关推荐

  1. python定义匿名函数关键字_python语言的匿名函数、7种可调用对象以及用户定义的可调用类型...

    匿名函数 在python表达式中,用来创建匿名函数的是lambda关键字. lambda函数在python语言中只能使用纯表达式,也就是说,在lambda函数体中不能使用while和try,当然也不能 ...

  2. udt java_Java DB中的Java用户定义类型(UDT)

    udt java Java DB是基于Java编程语言和SQL的关系数据库管理系统. 这是Apache软件基金会的开源Derby项目的Oracle版本. Java SE 7 SDK中包含Java DB ...

  3. Java DB中的Java用户定义类型(UDT)

    Java DB是基于Java编程语言和SQL的关系数据库管理系统. 这是Apache软件基金会的开源Derby项目的Oracle版本. Java SE 7 SDK中包含Java DB. 用户定义类型( ...

  4. c#.net SQL存储过程直接传表;用户定义表类型的表

    方法一 DataSet dataset = new DataSet(); using (SqlConnection conn = new SqlConnection(SqlHelper.sqlconn ...

  5. boost::spirit模块实现演示自定义的、用户定义的类型如何作为标记值类型轻松地与词法分析器集成

    boost::spirit模块实现演示自定义的.用户定义的类型如何作为标记值类型轻松地与词法分析器集成 实现功能 C++实现代码 实现功能 boost::spirit模块实现演示自定义的.用户定义的类 ...

  6. 具有用户定义类型的format的示例用法

    具有用户定义类型的format的示例用法 实现功能 C++实现代码 实现功能 具有用户定义类型的format的示例用法 C++实现代码 #include "boost/format.hpp& ...

  7. vb连接mysql出现的问题_连接数据库问题用户定义类型未定义【vb6】

    连接数据库问题用户定义类型未定义[vb6]0 Dim cnnImage As NewADODB.Connection Dim rsImage As New ADODB.Recordset Dim st ...

  8. Access FileDialog 用户定义类型未定义(User-defined type not defined)的解决方法

    Access VBA里的FileDialog函数可以打开文件对话框.有的高版Access(2016及以上)会提示"用户定义类型未定义".解决方案是在VBA编辑器里选择" ...

  9. 使用脚本编写 Vim 编辑器,第 2 部分: 用户定义函数

    用户定义函数 Haskell 或 Scheme 程序员会告诉您,函数对于任何严肃的编程语言来说都是最重要的特性.对于 C 或 Perl 程序员,他们也会告诉您完全相同的观点. 函数为严肃的程序员提供了 ...

最新文章

  1. Mysql分页order by数据错乱重复
  2. C# 算法系列一基本数据结构
  3. 批处理解决本地连接无法禁用问题
  4. python装饰器函数-python3 函数:函数装饰器
  5. 直播源码和短视频源码,相亲相爱的一家人
  6. 怎么查看python是多少位_python+位数
  7. 命令行中只用scala来运行一个spark应用
  8. Hook API (C++)
  9. Android 之自定义view实现水波纹效果
  10. Oracle优化笔记
  11. 最短路径——dj+floyd+spfa(hdu2544)
  12. matlab tf-idf,java 兑现tfidf
  13. linux sleeping进程多_一文掌握Linux实战技能系统管理篇
  14. Java-多线程第四篇线程池
  15. 安装Seay代码审计工具
  16. origin拟合曲线,并绘制曲线上某一点的切线
  17. Java-视频按秒截取帧
  18. 常用元器件使用方法12:单节锂电池充电管理芯片XT2055的使用方法
  19. 查询数据表中重复数据及重复次数
  20. 免费的DDoS防火墙有哪些

热门文章

  1. Sparse Modeling of Intrinsic Correspondences
  2. 第九章 OGRE中的整个流程
  3. FCN模型和loss实现(code)
  4. java表示学生信息的类Student,并输出相关信息
  5. python怎么引入thrift文件_python使用thrift教程的方法示例
  6. 零基础入门语义分割——Task1 赛题理解
  7. 一个运营专员该如何做好数据分析?
  8. RuntimeWarning: coroutine ‘ClientResponse.text‘ was never awaited self._context.run(self._callback)
  9. 动态规划之最长回文串
  10. Java Web开发之一:用好的技术设计来犒赏自己