当前位置: 首页 > news >正文

Python Cookbook-4.16 用字典分派方法和函数

任务

需要根据某个控制变量的值执行不同的代码片段——在其他的语言中你可能会使用case 语句。

解决方案

归功于面向对象编程的优雅的分派概念,case语句的使用大多(但不是所有)都可以被替换成其他分派形式。在Python中,字典及函数是一等(first-class)对象这个事实(比如函数可以作为字典中的值被存储),使得“case 语句”的问题更容易被解决。比如,考虑下面的代码片段:

animals = [ ]
number_of_felines = 0
def deal_with_a_cat():
	global number_of_felines
	print "meow"
	animals.append('feline')
	number_of_felines += 1
def deal_with_a_dog():
	print "bark"
	animals.append('canine')
def deal_with_a_bear():
	print "watch out for the *HUG*!"
	animals.append('ursine')
tokenDict ={
	"cat":deal_with_a_cat,
	"dog":deal_with_a_dog,
	"bear":deal_with_a_bear,
#模拟,比如,从文件中读取的一些单词
words = ["cat","bear","cat","dog"]
for word in words :
	#查找每个单词对应的函数调用并调用之
	return tokenDict[word]()
nf = number_of_felines
print 'we met %d feline%s'(nf,'s'[nf==l:])
print 'the animals we met were:',''.join(animals)

讨论

本节的要点是,构建一个字典,以字符串(或其他对象)为键,以被绑定的方法、函数或其他的可调用体作为值。在每一步的执行过程中,我们都先用字符串键来选择需要执行的可调用体。这个方法可以被当做一个通用的 case 语句用于各处。

这确实非常简单,我也经常使用这种技术。还可以使用被绑定的方法或者其他可调用体来替换本节示例中查找的函数。但当你使用未绑定的方法时,需要传递一个正确的对象作为第一个参数来调用它们。还可以将可调用体和它所需要的参数放在一个元组中,然后把元组当做字典的值存储起来,这样具有更强的通用性。

在别的语言中,可能需要case、switch或者select语句,但在 Python 中,所有类似的地方都用这个技术来实现同样的功能。

相关文章:

  • 广州SMT贴片加工厂精密制造工艺解析
  • Nyquist插件基础:LISP语法-变量及赋值
  • 小型诊疗预约平台(代码+数据库+LW)
  • 使用Golang解决动作冒险游戏帧同步问题
  • 《八大排序算法》
  • 谷歌将 Android OS 完全转变为 “内部开发”
  • java学习
  • Android设计模式之代理模式
  • MacOS安装NVM 切换node版本
  • CP15 协处理器
  • 华为云之使用iSula生态链进行容器镜像构建和运行【玩转华为云】
  • 【大前端系列19】JavaScript核心:Promise异步编程与async/await实践
  • 【C++】从静态到动态:多态的诗意旅程
  • 简单文字验证码人机验证【Java】
  • Python与Web 3.0支付系统:技术融合与未来展望
  • 基础语法(1)
  • [原创](现代C++ Builder 12指南): 再谈如何使用System.JSON?附加代码示例更加详细
  • JavaSE反射篇
  • python练习题
  • OSPFv3 的 LSA 详解
  • 大尺度做爰网站/seo优化的主要任务
  • 做音乐网站的栏目/互联网推广怎么做
  • 网站运行环境配置/品牌营销经典案例
  • 做gif有什么网站/百度博客收录提交入口
  • 网站建设用户登录/安卓手机优化大师官方下载
  • 电子商务网站的开发流程/鸡西seo顾问