正如其他人建议的,使用10个不同的局部变量与布尔值不太可能是写你的例程的最好的方式(特别是如果他们真的有一个单字母的名字:)

根据你在做什么,使用字典可能是有意义的。例如,如果要为一组单字母标志设置布尔预设值,可以执行以下操作:

>>> flags = dict.fromkeys(["a", "b", "c"], True)

>>> flags.update(dict.fromkeys(["d", "e"], False))

>>> print flags

{'a': True, 'c': True, 'b': True, 'e': False, 'd': False}

如果你喜欢,你也可以使用一个赋值语句:

>>> flags = dict(dict.fromkeys(["a", "b", "c"], True),

... **dict.fromkeys(["d", "e"], False))

>>> print flags

{'a': True, 'c': True, 'b': True, 'e': False, 'd': False}

dict的第二个参数不是完全为此设计的:它真的意味着允许你使用关键字参数(如d = False)覆盖字典的各个元素。上面的代码将**后面的表达式的结果转换成一组keyword arguments,它们被传递给被调用的函数。这当然是一种创建字典的可靠方法,人们似乎至少接受这种成语,但我怀疑有些人可能会认为它是无语的。 < / disclaimer>

另一种方法,如果你将经常使用这种模式,最直观的方法是将数据定义为映射到标志名(单字符字符串)的标志值列表(True,False)。然后将此数据定义转换为将标志名称映射到标志值的反转字典。这可以通过嵌套列表解析简单地完成,但这里是一个非常可读的实现:

>>> def invert_dict(inverted_dict):

... elements = inverted_dict.iteritems()

... for flag_value, flag_names in elements:

... for flag_name in flag_names:

... yield flag_name, flag_value

...

>>> flags = {True: ["a", "b", "c"], False: ["d", "e"]}

>>> flags = dict(invert_dict(flags))

>>> print flags

{'a': True, 'c': True, 'b': True, 'e': False, 'd': False}

函数invert_dict是一个generator function.它生成或产生 – 意味着它重复返回 – 键值对的值。这些键值对是初始标志字典的两个元素的内容的逆。它们被馈入到dict构造函数中。在这种情况下,dict构造函数的工作方式不同于上面,因为它被馈送一个iterator而不是一个字典作为其参数。

绘制在@Chris Lutz的评论:如果你真的会使用单字符值,你可以做到

>>> flags = {True: 'abc', False: 'de'}

>>> flags = dict(invert_dict(flags))

>>> print flags

{'a': True, 'c': True, 'b': True, 'e': False, 'd': False}

这是因为Python字符串是iterable,这意味着它们可以通过值按值移动。在字符串的情况下,值是字符串中的单个字符。因此,当它们被解释为可迭代时,如在这种情况下,它们在for循环中使用,[‘a’,’b’,’c’]和’abc’实际上是等价的。另一个例子是当它们被传递给一个需要迭代的函数时,比如tuple。

我个人不会这样做,因为它不直观地阅读:当我看到一个字符串,我期望它被用作一个单一的值,而不是一个列表。所以我看看第一行,认为“好吧,所以有一个True标志和一个False标志。所以虽然这是一个可能性,我不认为这是要走的路。在上面,它可以帮助更清楚地解释迭代和迭代器的概念。

定义函数invert_dict使得它实际返回一个字典也不是一个坏主意;我大多只是没有这样做,因为它不真正有助于解释例程的工作原理。

显然Python 2.7有字典推导,这将使一个非常简洁的方式来实现那个函数。这留给作为一个练习给读者,因为我没有安装Python 2.7

python如何声明多个变量_python – 更优雅的方式同时声明多个变量相关推荐

  1. 转: Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)

    转自: Springboot - 用更优雅的方式发HTTP请求(RestTemplate详解) - Java知音号 - 博客园RestTemplate是Spring提供的用于访问Rest服务的客户端, ...

  2. python数组赋值给变量_Python:将数组中的元素导出到变量中 (unpacking)

    问题 你需要将数组(list)或元组(tuple)中的元素导出到N个变量中. 解决方案 任何序列都可以通过简单的变量赋值方式将其元素分配到对应的变量中,唯一的要求就是变量的数量和结构需要和序列中的结构 ...

  3. Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)

    RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率. 我之前的HTTP开发是用ap ...

  4. 以更优雅的方式实现弹性架构

    为什么弹性架构是重要的 谈到IT系统架构,我们经常会用建筑架构来做类比,事实上,Architecture这个词也正是来自于传统的建筑行业.系统架构图就像建筑设计图一样,用来指导软件构建.同时,两者之间 ...

  5. python初体验-hello world答案_Python初体验(一)—【配置环境变量】【变量】【input】【条件语句】【循环语句】...

    关于Paython的安装(win7) 和其他软件的安装一样一样的啦,就是点.点.点的一步一步来就好了.给大家安装的地址呢 关于环境变量以及环境变量的配置 1.什么是环境变量? 首先官方的解释一下,环境 ...

  6. python显示小数点后几位数_Python编程从入门到实践-连载1(变量和简单数据类型)...

    第二章 变量和简单数据类型 2.2.0 变量 我们添加了一个名为message的变量.每个变量都存储了一个值--与变量相关联的信息.在这里,存储的值为文本"Hello Python worl ...

  7. python读取print输出的内容_Python文件中将print的输出内容重定向到变量中

    有时候需要用到别人的代码, 但是又不想修改别人的文件, 想拿到输出的结果, 这时候就需要使用sys模块, 将print输出的内容重定向到变量中. Python调用sys模块中的sys.stdout, ...

  8. python引用模块的私有变量_python 使用不同方法导入模块,模块中私有变量的使用区别...

    文章目录 from somemodule import *import somemodule 首先我们先创建一个test.py文件,将下面代码复制进去: num = 10 _num = 20 __nu ...

  9. python怎么调用另一个py文件的变量_Python中py文件引用另一个py文件变量的方法

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

最新文章

  1. UML中类之间的几种关系
  2. 第1节 yarn:15、关于yarn中常用的参数设置
  3. 使用SAP云平台portal service之前,需要做好哪些准备
  4. 线程同步,线程不同步_重新同步多线程集成测试
  5. mysql删除bin-log_删除MYSQl BIN-LOG 日志
  6. 第二章--电商设计表-商品模块--mysql电商项目设计
  7. html按钮绑定点击事件无效,jquery添加的html元素按钮为何不执行类样式绑定的click事件...
  8. 小齐是如何提高自己的「编程能力」的?
  9. 怎么把github上的东西传到码云_Git同步更新操作GitHub和码云仓库上面的代码
  10. html4与html5的区别
  11. Logstash自定义grok正则匹配规则
  12. NO.76 禅道使用分享第八期:创维软件开发团队畅谈专业版
  13. (原创)用cmd命令制作恶搞程序
  14. 学生信息管理系统(SSM+JSP)
  15. EhCache初体验
  16. web前端-----细线表格(table)的制作
  17. 微信单删和互删有什么区别?
  18. python 文件夹中的文件批量处理 高通道tif图片转换成jpg格式
  19. Network Emulator Toolkit (NEWT) 网络限速工具 (手机和电脑方面)
  20. 语言学中不同视角的抽象与具体——谈索绪尔、乔姆斯基、韩礼德的语言观

热门文章

  1. 抖音爆款短视频配音如何制作?分享3个免费好用的配音软件
  2. iphone 显示蓝牙电量
  3. Android小提示六
  4. 《牛津字典精华总结》- 初阶系列 - 字母 - M
  5. 面向对象(三、类私有属性和私有方法)
  6. iOS 性能优化方案
  7. leet209. 长度最小的子数组 滑动窗口
  8. Python栈的实现
  9. Android Shell脚本编辑运行
  10. wps流程图直线上怎么填字_简单三步,用WPS轻松完成一个又大气又好看的流程图!...