• 关于 python n 的搜索结果

问题

Tensorflow无法导入

is大龙 2020-03-24 20:25:56 0 浏览量 回答数 1

回答

往期回顾: python问答学堂-《python进阶大全》中你必须掌握的QA 【python问答学堂】2期解压序列赋值给多个变量? 【python问答学堂】3解压可迭代对象赋值给多个变量? 【python问答学堂】4期保留最后 N 个元素? 【python问答学堂】5期 查找最大或最小的 N 个元素 【python问答学堂】6期 实现一个优先级队列 【python问答学堂】7期 字典中的键映射多个值 【python问答学堂】8期 字典排序 【python问答学堂】9期 字典的运算 【python问答学堂】10期 查找两字典的相同点 【python问答学堂】11期 删除序列相同元素并保持顺序 【python问答学堂】12期 命令切片 【python问答学堂】13期 序列中出现次数最多的元素 【python问答学堂】14期 通过某个关键字排序一个字典列表 【python问答学堂】15期 排序不支持原生比较的对象 过滤序列元素 【python问答学堂】16期 从字典中提取子集【python问答学堂】17期 映射名称到序列元素【python问答学堂】18期

剑曼红尘 2020-05-18 11:16:43 0 浏览量 回答数 0

问题

转换并同时计算数据【python问答学堂】19期

剑曼红尘 2020-05-18 11:16:36 0 浏览量 回答数 1

新用户福利专场,云服务器ECS低至96.9元/年

新用户福利专场,云服务器ECS低至96.9元/年

回答

往期回顾: python问答学堂-《python进阶大全》中你必须掌握的QA 【python问答学堂】2期解压序列赋值给多个变量? 【python问答学堂】3解压可迭代对象赋值给多个变量? 【python问答学堂】4期保留最后 N 个元素? 【python问答学堂】5期 查找最大或最小的 N 个元素 【python问答学堂】6期 实现一个优先级队列 【python问答学堂】7期 字典中的键映射多个值 【python问答学堂】8期 字典排序 【python问答学堂】9期 字典的运算 【python问答学堂】10期 查找两字典的相同点 【python问答学堂】11期 删除序列相同元素并保持顺序 【python问答学堂】12期 命令切片 【python问答学堂】13期 序列中出现次数最多的元素 【python问答学堂】14期 通过某个关键字排序一个字典列表 【python问答学堂】15期 排序不支持原生比较的对象 过滤序列元素 【python问答学堂】16期 从字典中提取子集【python问答学堂】17期 映射名称到序列元素【python问答学堂】18期 转换并同时计算数据【python问答学堂】19期

剑曼红尘 2020-05-19 13:08:30 0 浏览量 回答数 0

问题

合并多个字典或映射【python问答学堂】20期

剑曼红尘 2020-05-19 13:08:22 0 浏览量 回答数 1

问题

【python问答学堂】15期 排序不支持原生比较的对象

剑曼红尘 2020-05-11 21:30:21 0 浏览量 回答数 1

回答

问题 你想排序类型相同的对象,但是他们不支持原生的比较操作。 往期回顾: python问答学堂-《python进阶大全》中你必须掌握的QA 【python问答学堂】2期解压序列赋值给多个变量? 【python问答学堂】3解压可迭代对象赋值给多个变量? 【python问答学堂】4期保留最后 N 个元素? 【python问答学堂】5期 查找最大或最小的 N 个元素 【python问答学堂】6期 实现一个优先级队列 【python问答学堂】7期 字典中的键映射多个值 【python问答学堂】8期 字典排序 【python问答学堂】9期 字典的运算 【python问答学堂】10期 查找两字典的相同点 【python问答学堂】11期 删除序列相同元素并保持顺序 【python问答学堂】12期 命令切片 【python问答学堂】13期 序列中出现次数最多的元素 【python问答学堂】14期 通过某个关键字排序一个字典列表

剑曼红尘 2020-05-11 21:30:58 0 浏览量 回答数 0

问题

【python问答学堂】14期 通过某个关键字排序一个字典列表

剑曼红尘 2020-05-09 21:06:21 0 浏览量 回答数 0

问题

从字典中提取子集【python问答学堂】17期

剑曼红尘 2020-05-14 11:22:29 1 浏览量 回答数 1

回答

问题 你想构造一个字典,它是另外一个字典的子集。 解决方案 最简单的方式是使用字典推导。比如: 往期回顾: python问答学堂-《python进阶大全》中你必须掌握的QA 【python问答学堂】2期解压序列赋值给多个变量? 【python问答学堂】3解压可迭代对象赋值给多个变量? 【python问答学堂】4期保留最后 N 个元素? 【python问答学堂】5期 查找最大或最小的 N 个元素 【python问答学堂】6期 实现一个优先级队列 【python问答学堂】7期 字典中的键映射多个值 【python问答学堂】8期 字典排序 【python问答学堂】9期 字典的运算 【python问答学堂】10期 查找两字典的相同点 【python问答学堂】11期 删除序列相同元素并保持顺序 【python问答学堂】12期 命令切片 【python问答学堂】13期 序列中出现次数最多的元素 【python问答学堂】14期 通过某个关键字排序一个字典列表 【python问答学堂】15期 排序不支持原生比较的对象 过滤序列元素 【python问答学堂】16期

剑曼红尘 2020-05-14 11:22:45 0 浏览量 回答数 0

问题

【python问答学堂】12期 命令切片

剑曼红尘 2020-05-07 14:54:22 3 浏览量 回答数 1

问题

过滤序列元素 【python问答学堂】16期

剑曼红尘 2020-05-13 20:44:47 4 浏览量 回答数 1

问题

【python问答学堂】11期 删除序列相同元素并保持顺序

剑曼红尘 2020-05-06 14:31:19 0 浏览量 回答数 1

回答

问题 如果你的程序包含了大量无法直视的硬编码切片,并且你想清理一下代码。 解决方案 假定你要从一个记录(比如文件或其他类似格式)中的某些固定位置提取字段: 往期回顾: python问答学堂-《python进阶大全》中你必须掌握的QA 【python问答学堂】2期解压序列赋值给多个变量? 【python问答学堂】3解压可迭代对象赋值给多个变量? 【python问答学堂】4期保留最后 N 个元素? 【python问答学堂】5期 查找最大或最小的 N 个元素 【python问答学堂】6期 实现一个优先级队列 【python问答学堂】7期 字典中的键映射多个值 【python问答学堂】8期 字典排序 【python问答学堂】9期 字典的运算 【python问答学堂】10期 查找两字典的相同点 【python问答学堂】11期 删除序列相同元素并保持顺序

剑曼红尘 2020-05-07 15:02:06 0 浏览量 回答数 0

回答

问题 你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列 解决方案 最简单的过滤序列元素的方法就是使用列表推导。比如: 这里的关键点在于先创建一个 Boolean 序列,指示哪些元素符合条件。 然后 compress() 函数根据这个序列去选择输出对应位置为 True 的元素。 往期回顾: python问答学堂-《python进阶大全》中你必须掌握的QA 【python问答学堂】2期解压序列赋值给多个变量? 【python问答学堂】3解压可迭代对象赋值给多个变量? 【python问答学堂】4期保留最后 N 个元素? 【python问答学堂】5期 查找最大或最小的 N 个元素 【python问答学堂】6期 实现一个优先级队列 【python问答学堂】7期 字典中的键映射多个值 【python问答学堂】8期 字典排序 【python问答学堂】9期 字典的运算 【python问答学堂】10期 查找两字典的相同点 【python问答学堂】11期 删除序列相同元素并保持顺序 【python问答学堂】12期 命令切片 【python问答学堂】13期 序列中出现次数最多的元素 【python问答学堂】14期 通过某个关键字排序一个字典列表 【python问答学堂】15期 排序不支持原生比较的对象

剑曼红尘 2020-05-13 20:45:28 0 浏览量 回答数 0

回答

问题 怎样在一个序列上面保持元素顺序的同时消除重复的值? 解决方案 如果序列上的值都是 hashable 类型,那么可以很简单的利用集合或者生成器来解决这个问题。比如: 往期回顾: python问答学堂-《python进阶大全》中你必须掌握的QA 【python问答学堂】2期解压序列赋值给多个变量? 【python问答学堂】3解压可迭代对象赋值给多个变量? 【python问答学堂】4期保留最后 N 个元素? 【python问答学堂】5期 查找最大或最小的 N 个元素 【python问答学堂】6期 实现一个优先级队列 【python问答学堂】7期 字典中的键映射多个值 【python问答学堂】8期 字典排序 【python问答学堂】9期 字典的运算 【python问答学堂】10期 查找两字典的相同点

剑曼红尘 2020-05-06 14:32:00 0 浏览量 回答数 0

问题

【python问答学堂】9期 字典的运算

剑曼红尘 2020-04-29 14:41:40 0 浏览量 回答数 1

问题

【python问答学堂】13期 序列中出现次数最多的元素

剑曼红尘 2020-05-08 16:12:34 33 浏览量 回答数 2

回答

问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案。 为了演示,先假设你有一个单词列表并且想找出哪个单词出现频率最高。你可以这样做: 往期回顾: python问答学堂-《python进阶大全》中你必须掌握的QA 【python问答学堂】2期解压序列赋值给多个变量? 【python问答学堂】3解压可迭代对象赋值给多个变量? 【python问答学堂】4期保留最后 N 个元素? 【python问答学堂】5期 查找最大或最小的 N 个元素 【python问答学堂】6期 实现一个优先级队列 【python问答学堂】7期 字典中的键映射多个值 【python问答学堂】8期 字典排序 【python问答学堂】9期 字典的运算 【python问答学堂】10期 查找两字典的相同点 【python问答学堂】11期 删除序列相同元素并保持顺序 【python问答学堂】12期 命令切片

剑曼红尘 2020-05-08 16:12:42 0 浏览量 回答数 0

问题

映射名称到序列元素【python问答学堂】18期

剑曼红尘 2020-05-15 11:20:51 0 浏览量 回答数 1

回答

问题 怎样在数据字典中执行一些计算操作(比如求最小值、最大值、排序等等)? 解决方案 考虑下面的股票名和价格映射字典: 往期回顾: python问答学堂-《python进阶大全》中你必须掌握的QA 【python问答学堂】2期解压序列赋值给多个变量? 【python问答学堂】3解压可迭代对象赋值给多个变量? 【python问答学堂】4期保留最后 N 个元素? 【python问答学堂】5期 查找最大或最小的 N 个元素 【python问答学堂】6期 实现一个优先级队列 【python问答学堂】7期 字典中的键映射多个值 【python问答学堂】8期 字典排序

剑曼红尘 2020-04-29 14:41:50 0 浏览量 回答数 0

回答

问题 你有一段通过下标访问列表或者元组中元素的代码,但是这样有时候会使得你的代码难以阅读, 于是你想通过名称来访问元素。 解决方案 collections.namedtuple() 函数通过使用一个普通的元组对象来帮你解决这个问题。 这个函数实际上是一个返回 Python 中标准元组类型子类的一个工厂方法。 你需要传递一个类型名和你需要的字段给它,然后它就会返回一个类,你可以初始化这个类,为你定义的字段传递值等。 代码示例: 往期回顾: python问答学堂-《python进阶大全》中你必须掌握的QA 【python问答学堂】2期解压序列赋值给多个变量? 【python问答学堂】3解压可迭代对象赋值给多个变量? 【python问答学堂】4期保留最后 N 个元素? 【python问答学堂】5期 查找最大或最小的 N 个元素 【python问答学堂】6期 实现一个优先级队列 【python问答学堂】7期 字典中的键映射多个值 【python问答学堂】8期 字典排序 【python问答学堂】9期 字典的运算 【python问答学堂】10期 查找两字典的相同点 【python问答学堂】11期 删除序列相同元素并保持顺序 【python问答学堂】12期 命令切片 【python问答学堂】13期 序列中出现次数最多的元素 【python问答学堂】14期 通过某个关键字排序一个字典列表 【python问答学堂】15期 排序不支持原生比较的对象 过滤序列元素 【python问答学堂】16期 从字典中提取子集【python问答学堂】17期

剑曼红尘 2020-05-15 11:21:13 0 浏览量 回答数 0

回答

1、说明:python输出时不换行,python版本不同使用方式不同:python2.x 使用print '输出内容',加一个空格即可;python3.x版本使用print('输出内容', end='')这种方式。2、代码示例:python2.xprint '不换行',print '换行'python3.xprint('不换行', end='')print('换行')执行结果:python2.x不换行 换行python3.x不换行换行3、函数说明:python2.xprint一个' n'字符结尾写的,除非'print'声明以逗号结束。这是如果该语句的唯一操作只包含关键字'print'。python3.xprint(...)print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) end: 字符串的最后一个值后追加,默认为新行。

xuning715 2019-12-02 01:10:18 0 浏览量 回答数 0

问题

【精品问答】Python3 实例80问(附源码解析)

珍宝珠 2020-02-17 13:11:47 442 浏览量 回答数 2

回答

OSC 第 128 期高手问答 -- Python3 开发实战 @壁_花 @idisikx @hell0cat @DarkAngel @北京老爷们儿      恭喜以上五位网友或获得《Python Web开发实战》图书一本  请私信 @博文视点   告知快递信息(格式:姓名+电话+地址+邮编号码)!  ######@dongwm :不知作者有没有涉及过大数据方向的?我看部分大数据相关的都要用到python这是为什么?Hadoop整个生态圈都是Java的,python的定位是什么?######@dongwm :其实我是一个狂热的Python爱好者,但是还是想问: 用Python来进行Web开发,与它的其他竞争者相比,有什么优势呢?比如,与Ruby On Rails相比,它能更敏捷(快速)地开发,用写尽量少的代码来完成任务吗?与Node.js和Golang相比,它在支持高并发、多线程、执行性能等方面有什么优势吗?如果一些性能方面的优化可以通过编写C扩展模块,或者通过cffi、Boost.Python、Cython等方式进行优化,Node.js、Ruby等同样可以做到。一句话概括上面的问题就是:是什么原因吸引我们使用Python来进行Web开发呢?######@dongwm : 按照“没有银弹”一说,python应该也有自己的适用范围吧,是不是比较适用于机器学习,不适合于web开发呢?######Python被称为「胶水语言」,虽然没有「统治」哪个领域,但是基本上个个领域都把手伸了进去。 机器学习我不熟不敢妄谈是不是更合适。我只能说,Python很适合web开发######使用豆瓣很多年,很喜欢豆瓣的风格。之前一直是在网页端浏览,后来又到了手机app端。我总体感觉豆瓣的进步很快。我想问的问题是,python web一直作为豆瓣的开发首选,是因为什么?还有关于豆瓣的权限模块的设计时,python web发挥了什么优势。作为手机端app的开发,python web会起到什么作用吗?######回复 @机器猫123 : 会的。也许不会开源,但是酱厂里面确实有很多不错的实现######回复 @dongwm : 未来豆瓣会继续用python web衍生开发新的产品吗?######回复 @dongwm : 谢谢老师的回答。######豆瓣选择Python,其实是公司和语言的风格很相似的缘故吧。我们做事喜欢优雅,清晰,高效,这这好也是Python希望的。 豆瓣的基础设施基本都是使用Python完成,包含权限部分,但是Python web和权限模块设计感觉没啥直接的关系,就是抽出来的库和使用它的关系,我也没懂有什么优势或者劣势。 豆瓣app的API后端是使用PythonWeb完成的###### 引用来自“DarkAngel”的评论 @dongwm :其实我是一个狂热的Python爱好者,但是还是想问: 用Python来进行Web开发,与它的其他竞争者相比,有什么优势呢?比如,与Ruby On Rails相比,它能更敏捷(快速)地开发,用写尽量少的代码来完成任务吗?与Node.js和Golang相比,它在支持高并发、多线程、执行性能等方面有什么优势吗?如果一些性能方面的优化可以通过编写C扩展模块,或者通过cffi、Boost.Python、Cython等方式进行优化,Node.js、Ruby等同样可以做到。一句话概括上面的问题就是:是什么原因吸引我们使用Python来进行Web开发呢? 引用来自“dongwm”的评论ROR我倒没有实际的用过,不敢妄言。Python最大的优势是他是一个「胶水」语言,在工作中的各个方向都能看到Python对应的库的身影,学会Python会让你的路比较宽,但是用ruby,可能在我印象里面就是Web开发比较有名。我现在还没有发现做Web开发有比Python效率高的方式。 其实很多人都担心Python的执行效率,然而其实绝大多数情况Python足够快,不快的话要先看看自己是不是用得不对或者不好。现在硬件资源很廉价,除非上升到BAT那种规模,否者基本还没有到达讨论语言瓶颈的问题。现在豆瓣绝大多数基础设施都是使用Python开发的。在Web开发中,我们很少通过写扩展的方式提高性能,其实编程语言一般都不是网站性能的瓶颈,还可以通过其他方式解决。 之前学ROR是因为老师要求用这个,我没有用Python进行Web开发的经验,稍微有一点了解的也只是Flask或者Falcon这种轻量级的,感觉能够快速开发小巧的应用,但是不知道有哪个特别出名的应用或者网站系统是由Python开发的(比如WordPress和Discuz用的PHP,Gitlab用的Ruby,OSC好像用的是Java吧)。Python确实是一种比较万能的语言,但有点万金油却不够专精的感觉。比如在科学计算方面很流行,但是论效率不如Julia,论支持库的丰富和使用广泛度不如Matlab(特别是学校里面,教授做研究或者教学一般都会用Matlab);在系统管理方面看,能用Python干的脚本化工作,用shell或者perl基本上都能干,而且需要写的代码行数说不定更少。如果说用Python进行Web开发效率高,是有特指某一个框架吗,还是泛指? 我在写程序时首先会想到用Python,是因为喜欢tial-and-error这种方式,能够在正式写代码前确认想法能不能实现,能够让我有兴趣和信心继续下去。但真要说起来,能够提供REPL特性的语言也不少。 Python的执行效率貌似永远是Python热门的讨论话题,比如GIL的存在必须要用特殊的方式来优化。像gevent和Tornado之类的存在也适用于高并发的网络连接(不过Python在这方面的性能不一定是最高的,没有看过相关的测试)。再说Python的实现,除了最出名的CPython和PyPy之外,甚至还有为嵌入式设备开发的MicroPython(这也在另一方面说明了Python的万能性)。Dropbox的技术栈中也使用了Python,并且有开发面向性能的Python实现pyston,此外还有Stackless Python(听名字感觉很厉害,虽然其实我并没有去了解这到底是什么),但它家也在用Golang和Rust开发高性能的东西。那么,豆瓣的基础设施实现中,用Python开发的应用效率如何?也有使用除了CPython之外的实现来进行优化吗?(我是不是扯得有点偏题了?) ######回复 @dongwm : 那么用Python来开发Web,是否属于那种会带来这种优势的选择呢?或者有没有哪家公司通过把技术栈切换到Python而带来了这种进步?######回复 @dongwm : 以现在的硬件发展水平,基本上任何数量级的访问都可以通过硬件的堆砌获得支持。不过经常会看到新闻,比如某某公司将它的某某技术构架从XX语言切换到了YY语言,然后获得了性能提升、提高了稳定性、减少了部署的服务器等优势,(我记忆中有看到Twitter的新闻,PHP 7的新闻,还有一些其他的)。######豆瓣每天服务着千万级别的用户(抱歉不能说具体数字)的请求,绝大多数应用和基础设施都是Python实现的。所以应用效率不用担心。虽然可以使用C/C++的扩展提高运行效率,但是我接触的场景里面很少。相当于写扩展的维护性和成本,大家更愿意从架构,算法等方面来解决。######嚯,你的问题好长。 进行Web开发效率高算是泛指,包含django和flask。效率高也体现在它们的第三方扩展和支持比较完善,基本能想到的都有对应的项目支持,这样少造了很多轮子。###### @dongwm :python的确很好,也很强大,我也一直在用,但我大都做的和web方面没有什么联系.而我对web方面挺感兴趣,但自学起来始终不得要领,进展有点慢,大神能否讲一讲web方面的学习经验,或者flask方面的心得.又或者推荐一些关于web好的学习资源.期待您的回答并致谢.###### @dongwm :了解Python基本知识,希望学习一门Python web框架学习后端开发。之前我对部分主流框架进行了一些了解:Django,Tornado,在知乎上有一个非常活跃的群体。在框架的选择问题上,只有最适合你自己、最适合你的团队的框架。编程语言选择也是一个道理,你的团队Python最熟就用Python好了,其实大部分人是没必要太关心框架的性能的,因为你开发的网站根本就是个小站,能上1万的IP的网站已经不多了,上10万的更是很少很少。在没有一定的访问量前谈性能其实是没有多大意义的,因为你的CPU和内存一直就闲着呢。而且语言和框架一般也不会是性能瓶颈,性能问题最常出现在数据库访问和文件读写上。 ######嗯 赞同你的观点。很多人在杞人忧天。先等活到有必要讨论语言的那一天,那时候早就有钱有人有时间,哪怕Python真的不满足,重构呗######@dongwm :Python确实越来越火了,知乎就是python做的,偶尔搞了一点,发现确实很高级,至少比java语言高级一些某些功能Java只需要写100行,而Python可能只要20行。做一些外维系统还是挺方便的,比如日志的提取等,之前学的是2.7版本,现在python3比之前的版本有哪些新特性呢? ######python 3是相当于站在Python2的肩膀上,摒弃了早年设计python 2的错误思想(所以有的地方向前不兼容),加了一些新的语法,比如asyncio,甚至type hint(我不喜欢)。 具体的内容可以看 https://docs.python.org/3/whatsnew/index.html。 总体上和Python 2区别不大。不用纠结Python 2/3###### @dongwm :初入门python,有c、java基础。再看《python基础教程(第二版)》。请问您有推荐的书籍吗?######我个人在知乎专栏写过一篇推荐书的文章 https://zhuanlan.zhihu.com/p/22198827。我建议有一些其他语言基础的同学好好地看看《Python学习手册》,如果你英语比较好,建议直接看原著。《Python基础教程》虽然是一个经典的入门教程,写作风格也相对轻松幽默,但是由于本书写作于2010年,书中有大量内容已经过时,所以不推荐! ========================== Python "RemoteError: Remote error: UnicodeEncodeError 'ascii' codec can't encode ch:报错 {   "traceback": "  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/st2actions/container/base.py\", line 99, in _do_run\n    LOG.debug('Performing run for runner: %s' % (runner.runner_id), extra=extra)\n  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/retrying.py\", line 49, in wrapped_f\n    def wrapped_f(*args, **kw):\n  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/retrying.py\", line 206, in call\n    if not self.should_reject(attempt):\n  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/retrying.py\", line 247, in get\n    else:\n  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/retrying.py\", line 200, in call\n    try:\n  File \"/opt/stackstorm/runners/mistral_v2/mistral_v2.py\", line 219, in run\n    result = self.start(action_parameters=action_parameters)\n  File \"/opt/stackstorm/runners/mistral_v2/mistral_v2.py\", line 256, in start\n    **options)\n  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/mistralclient/api/v2/executions.py\", line 56, in create\n    return self._create('/executions', data)\n  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/mistralclient/api/base.py\", line 95, in _create\n    self._raise_api_exception(resp)\n  File \"/opt/stackstorm/st2/lib/python2.7/site-packages/mistralclient/api/base.py\", line 143, in _raise_api_exception\n    error_message=error_data)\n",         "error": "RemoteError: Remote error: UnicodeEncodeError 'ascii' codec can't encode character u'\\xae' in position 169: ordinal not in range(128)\n[u'Traceback (most recent call last):\\n', u'  File \"/opt/stackstorm/mistral/lib/python2.7/site-packages/oslo_messaging/rpc/server.py\", line 155, in _process_incoming\\n    failure = None\\n', u'  File \"/opt/stackstorm/mistral/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py\", line 222, in dispatch\\n    if hasattr(endpoint, method):\\n', u'  File \"/opt/stackstorm/mistral/lib/python2.7/site-packages/oslo_messaging/rpc/dispatcher.py\", line 192, in _do_dispatch\\n    new_args[argname] = self.serializer.deserialize_entity(ctxt, arg)\\n', u'  File \"/opt/stackstorm/mistral/lib/python2.7/site-packages/mistral/engine/engine_server.py\", line 98, in start_workflow\\n    (rpc_ctx, workflow_identifier, utils.cut(workflow_input),\\n', u'  File \"/opt/stackstorm/mistral/lib/python2.7/site-packages/mistral/utils/__init__.py\", line 284, in cut\\n    return cut_dict(data, length=length)\\n', u'  File \"/opt/stackstorm/mistral/lib/python2.7/site-packages/mistral/utils/__init__.py\", line 198, in cut_dict\\n    v = str(value)\\n', u\"UnicodeEncodeError: 'ascii' codec can't encode character u'\\\\xae' in position 169: ordinal not in range(128)\\n\"]." }

kun坤 2020-06-15 11:08:13 0 浏览量 回答数 0

问题

【python问答学堂】8期 字典排序

剑曼红尘 2020-04-28 14:22:52 0 浏览量 回答数 1

回答

Windows换行符是'\r\n', Unix/Linux的换行符为'\n', Mac的换行符为'\r', 在python中,对换行符进行了统一处理,定义为'\n。 方法一、使用“\”进行换行输入: 1、在python中,Python 用反斜线 (“\”) 作为续行符(换行符),这里以python3.5为例。首先运行终端或者cmd命令行(windows下),执行python3.5的命令。 2、然后输入如下图所示的内容。本身就是输出hello world!的字符串。但是这里使用了"\"进行换行。 3、这种换行方法也可以在编辑器中进行,这里以vim为例,输入与上图类似的代码,保存为t.py脚本文件。 4、在bash中执行如下命令,同样可以执行。 5、如果不希望使用命令,则可以给python脚本加上权限。首先要在脚本文件中指明脚本解释器为python。在上面的t.py脚本文件中加入下面一行内容:#!/usr/bin/env python。 6、然后执行如下命令给t.py添加可执行权限,chmod 755 t.py。 执行如下命令执行python脚本,./t.py,同样可以执行。

游客lz7tjhznmiyda 2019-12-02 01:07:44 0 浏览量 回答数 0

问题

'ascii' codec can't encode ch:报错

kun坤 2020-06-14 10:44:09 0 浏览量 回答数 1

回答

许多Python初学者都会问:我应该学习哪个版本的Python。对于这个问题,我的回答通常是“先选择一个最适合你的Python教程,教程中使用哪个版本的Python,你就用那个版本。等学得差不多了,再来研究不同版本之间的差别”。 许多Python初学者都会问:我应该学习哪个版本的Python。对于这个问题,我的回答通常是“先选择一个最适合你的Python教程,教程中使用哪个版本的Python,你就用那个版本。等学得差不多了,再来研究不同版本之间的差别”。但如果想要用Python开发一个新项目,那么该如何选择Python版本呢?我可以负责任的说,大部分Python库都同时支持Python 2.7.x和3.x版本的,所以不论选择哪个版本都是可以的。但为了在使用Python时避开某些版本中一些常见的陷阱,或需要移植某个Python项目时,依然有必要了解一下Python两个常见版本之间的主要区别。__future__模块Python 3.x引入了一些与Python 2不兼容的关键字和特性,在Python 2中,可以通过内置的__future__模块导入这些新内容。如果你希望在Python 2环境下写的代码也可以在Python 3.x中运行,那么建议使用__future__模块。例如,如果希望在Python 2中拥有Python 3.x的整数除法行为,可以通过下面的语句导入相应的模块。from future import division 下表列出了__future__中其他可导入的特性:特性 可选版本 强制版本 效果nested_scopes 2.1.0b1 2.2 PEP 227:Statically Nested Scopesgenerators 2.2.0a1 2.3 PEP 255:Simple Generatorsdivision 2.2.0a2 3.0 PEP 238:Changing the Division Operatorabsolute_import 2.5.0a1 3.0 PEP 328:Imports: Multi-Line and Absolute/Relativewith_statement 2.5.0a1 2.6 PEP 343:The “with” Statementprint_function 2.6.0a2 3.0 PEP 3105:Make print a functionunicode_literals 2.6.0a2 3.0 PEP 3112:Bytes literals in Python 3000(来源: https://docs.python.org/2/library/future.html)示例:from platform import python_version print函数虽然print语法是Python 3中一个很小的改动,且应该已经广为人知,但依然值得提一下:Python 2中的print语句被Python 3中的print()函数取代,这意味着在Python 3中必须用括号将需要输出的对象括起来。在Python 2中使用额外的括号也是可以的。但反过来在Python 3中想以Python2的形式不带括号调用print函数时,会触发SyntaxError。Python 2print 'Python', python_version() print 'Hello, World!' print('Hello, World!') print "text", ; print 'print more text on the same line' Python 2.7.6 Hello, World! Hello, World! text print more text on the same line Python 3print('Python', python_version()) print('Hello, World!') print("some text,", end="") print(' print more text on the same line') Python 3.4.1 Hello, World! some text, print more text on the same line print 'Hello, World!' File "", line 1 print 'Hello, World!' ^ SyntaxError: invalid syntax 注意:在Python中,带不带括号输出”Hello World”都很正常。但如果在圆括号中同时输出多个对象时,就会创建一个元组,这是因为在Python 2中,print是一个语句,而不是函数调用。print 'Python', python_version() print('a', 'b') print 'a', 'b' Python 2.7.7 ('a', 'b') a b 整数除法由于人们常常会忽视Python 3在整数除法上的改动(写错了也不会触发Syntax Error),所以在移植代码或在Python 2中执行Python 3的代码时,需要特别注意这个改动。所以,我还是会在Python 3的脚本中尝试用float(3)/2或 3/2.0代替3/2,以此来避免代码在Python 2环境下可能导致的错误(或与之相反,在Python 2脚本中用from future import division来使用Python 3的除法)。Python 2print 'Python', python_version() print '3 / 2 =', 3 / 2 print '3 // 2 =', 3 // 2 print '3 / 2.0 =', 3 / 2.0 print '3 // 2.0 =', 3 // 2.0 Python 2.7.6 3 / 2 = 1 3 // 2 = 1 3 / 2.0 = 1.5 3 // 2.0 = 1.0 Python 3print('Python', python_version()) print('3 / 2 =', 3 / 2) print('3 // 2 =', 3 // 2) print('3 / 2.0 =', 3 / 2.0) print('3 // 2.0 =', 3 // 2.0) Python 3.4.1 3 / 2 = 1.5 3 // 2 = 1 3 / 2.0 = 1.5 3 // 2.0 = 1.0 UnicodePython 2有基于ASCII的str()类型,其可通过单独的unicode()函数转成unicode类型,但没有byte类型。而在Python 3中,终于有了Unicode(utf-8)字符串,以及两个字节类:bytes和bytearrays。Python 2print 'Python', python_version() Python 2.7.6 print type(unicode('this is like a python3 str type')) print type(b'byte type does not exist') print 'they are really' + b' the same' they are really the same print type(bytearray(b'bytearray oddly does exist though')) Python 3print('Python', python_version()) print('strings are now utf-8 u03BCnicou0394é!') Python 3.4.1 strings are now utf-8 μnicoΔé! print('Python', python_version(), end="") print(' has', type(b' bytes for storing data')) Python 3.4.1 has print('and Python', python_version(), end="") print(' also has', type(bytearray(b'bytearrays'))) and Python 3.4.1 also has 'note that we cannot add a string' + b'bytes for data' TypeError Traceback (most recent call last) in () ----> 1 'note that we cannot add a string' + b'bytes for data' TypeError: Can't convert 'bytes' object to str implicitly xrange在Python 2.x中,经常会用xrange()创建一个可迭代对象,通常出现在“for循环”或“列表/集合/字典推导式”中。这种行为与生成器非常相似(如”惰性求值“),但这里的xrange-iterable无尽的,意味着可能在这个xrange上无限迭代。由于xrange的“惰性求知“特性,如果只需迭代一次(如for循环中),range()通常比xrange()快一些。不过不建议在多次迭代中使用range(),因为range()每次都会在内存中重新生成一个列表。在Python 3中,range()的实现方式与xrange()函数相同,所以就不存在专用的xrange()(在Python 3中使用xrange()会触发NameError)。import timeit n = 10000 def test_range(n): return for i in range(n): pass def test_xrange(n): for i in xrange(n): pass Python 2print 'Python', python_version() print 'ntiming range()' %timeit test_range(n) print 'nntiming xrange()' %timeit test_xrange(n) Python 2.7.6 timing range() 1000 loops, best of 3: 433 µs per loop timing xrange() 1000 loops, best of 3: 350 µs per loop Python 3print('Python', python_version()) print('ntiming range()') %timeit test_range(n) Python 3.4.1 timing range() 1000 loops, best of 3: 520 µs per loop print(xrange(10)) NameError Traceback (most recent call last) in () ----> 1 print(xrange(10)) NameError: name 'xrange' is not defined Python 3中的range对象中的__contains__方法另一个值得一提的是,在Python 3.x中,range有了一个新的__contains__方法。__contains__方法可以有效的加快Python 3.x中整数和布尔型的“查找”速度。x = 10000000 def val_in_range(x, val): return val in range(x) def val_in_xrange(x, val): return val in xrange(x) print('Python', python_version()) assert(val_in_range(x, x/2) == True) assert(val_in_range(x, x//2) == True) %timeit val_in_range(x, x/2) %timeit val_in_range(x, x//2) Python 3.4.1 1 loops, best of 3: 742 ms per loop 1000000 loops, best of 3: 1.19 µs per loop 根据上面的timeit的结果,查找整数比查找浮点数要快大约6万倍。但由于Python 2.x中的range或xrange没有__contains__方法,所以在Python 2中的整数和浮点数的查找速度差别不大。print 'Python', python_version() assert(val_in_xrange(x, x/2.0) == True) assert(val_in_xrange(x, x/2) == True) assert(val_in_range(x, x/2) == True) assert(val_in_range(x, x//2) == True) %timeit val_in_xrange(x, x/2.0) %timeit val_in_xrange(x, x/2) %timeit val_in_range(x, x/2.0) %timeit val_in_range(x, x/2) Python 2.7.7 1 loops, best of 3: 285 ms per loop 1 loops, best of 3: 179 ms per loop 1 loops, best of 3: 658 ms per loop 1 loops, best of 3: 556 ms per loop 下面的代码证明了Python 2.x中没有__contain__方法:print('Python', python_version()) range.__contains__ Python 3.4.1 print('Python', python_version()) range.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last) in () 1 print 'Python', python_version() ----> 2 range.__contains__ AttributeError: 'builtin_function_or_method' object has no attribute '__contains__' print('Python', python_version()) xrange.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last) in () 1 print 'Python', python_version() ----> 2 xrange.__contains__ AttributeError: type object 'xrange' has no attribute '__contains__' 关于Python 2中xrange()与Python 3中range()之间的速度差异的一点说明:有读者指出了Python 3中的range()和Python 2中xrange()执行速度有差异。由于这两者的实现方式相同,因此理论上执行速度应该也是相同的。这里的速度差别仅仅是因为Python 3的总体速度就比Python 2慢。def test_while(): i = 0 while i < 20000: i += 1 return print('Python', python_version()) %timeit test_while() Python 3.4.1 %timeit test_while() 100 loops, best of 3: 2.68 ms per loop print 'Python', python_version() %timeit test_while() Python 2.7.6 1000 loops, best of 3: 1.72 ms per loop 触发异常Python 2支持新旧两种异常触发语法,而Python 3只接受带括号的的语法(不然会触发SyntaxError):Python 2print 'Python', python_version()Python 2.7.6 raise IOError, "file error" IOError Traceback (most recent call last) in ()----> 1 raise IOError, "file error" IOError: file error raise IOError("file error") IOError Traceback (most recent call last) in ()----> 1 raise IOError("file error") IOError: file errorPython 3print('Python', python_version())Python 3.4.1raise IOError, "file error"File "", line 1raise IOError, "file error"^SyntaxError: invalid syntaxThe proper way to raise an exception in Python 3:print('Python', python_version())raise IOError("file error")Python 3.4.1 OSError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 raise IOError("file error") OSError: file error异常处理Python 3中的异常处理也发生了一点变化。在Python 3中必须使用“as”关键字。Python 2print 'Python', python_version()try: let_us_cause_a_NameError except NameError, err: print err, '--> our error message' Python 2.7.6name 'let_us_cause_a_NameError' is not defined --> our error messagePython 3print('Python', python_version())try: let_us_cause_a_NameError except NameError as err: print(err, '--> our error message') Python 3.4.1name 'let_us_cause_a_NameError' is not defined --> our error messagenext()函数和.next()方法由于会经常用到next()(.next())函数(方法),所以还要提到另一个语法改动(实现方面也做了改动):在Python 2.7.5中,函数形式和方法形式都可以使用,而在Python 3中,只能使用next()函数(试图调用.next()方法会触发AttributeError)。Python 2print 'Python', python_version()my_generator = (letter for letter in 'abcdefg')next(my_generator)my_generator.next()Python 2.7.6'b'Python 3print('Python', python_version())my_generator = (letter for letter in 'abcdefg')next(my_generator)Python 3.4.1'a' my_generator.next() AttributeError Traceback (most recent call last) in ()----> 1 my_generator.next() AttributeError: 'generator' object has no attribute 'next'For循环变量与全局命名空间泄漏好消息是:在Python 3.x中,for循环中的变量不再会泄漏到全局命名空间中了!这是Python 3.x中做的一个改动,在“What’s New In Python 3.0”中有如下描述:“列表推导不再支持[… for var in item1, item2, …]这样的语法,使用[… for var in (item1, item2, …)]代替。还要注意列表推导有不同的语义:现在列表推导更接近list()构造器中的生成器表达式这样的语法糖,特别要注意的是,循环控制变量不会再泄漏到循环周围的空间中了。”Python 2print 'Python', python_version() i = 1print 'before: i =', i print 'comprehension: ', [i for i in range(5)] print 'after: i =', iPython 2.7.6before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 4Python 3print('Python', python_version()) i = 1print('before: i =', i) print('comprehension:', [i for i in range(5)]) print('after: i =', i)Python 3.4.1before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 1比较无序类型Python 3中另一个优秀的改动是,如果我们试图比较无序类型,会触发一个TypeError。Python 2print 'Python', python_version()print "[1, 2] > 'foo' = ", [1, 2] > 'foo'print "(1, 2) > 'foo' = ", (1, 2) > 'foo'print "[1, 2] > (1, 2) = ", [1, 2] > (1, 2)Python 2.7.6[1, 2] > 'foo' = False(1, 2) > 'foo' = True[1, 2] > (1, 2) = FalsePython 3print('Python', python_version())print("[1, 2] > 'foo' = ", [1, 2] > 'foo')print("(1, 2) > 'foo' = ", (1, 2) > 'foo')print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2)) Python 3.4.1 TypeError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 print("[1, 2] > 'foo' = ", [1, 2] > 'foo')3 print("(1, 2) > 'foo' = ", (1, 2) > 'foo')4 print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2))TypeError: unorderable types: list() > str()通过input()解析用户的输入幸运的是,Python 3改进了input()函数,这样该函数就会总是将用户的输入存储为str对象。在Python 2中,为了避免读取非字符串类型会发生的一些危险行为,不得不使用raw_input()代替input()。Python 2Python 2.7.6[GCC 4.0.1 (Apple Inc. build 5493)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) my_input = raw_input('enter a number: ') enter a number: 123 type(my_input) Python 3Python 3.4.1[GCC 4.2.1 (Apple Inc. build 5577)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) 返回可迭代对象,而不是列表在xrange一节中可以看到,某些函数和方法在Python中返回的是可迭代对象,而不像在Python 2中返回列表。由于通常对这些对象只遍历一次,所以这种方式会节省很多内存。然而,如果通过生成器来多次迭代这些对象,效率就不高了。此时我们的确需要列表对象,可以通过list()函数简单的将可迭代对象转成列表。Python 2print 'Python', python_version() print range(3)print type(range(3))Python 2.7.6[0, 1, 2]Python 3print('Python', python_version())print(range(3))print(type(range(3)))print(list(range(3)))Python 3.4.1range(0, 3)[0, 1, 2]下面列出了Python 3中其他不再返回列表的常用函数和方法:zip()map()filter()字典的.key()方法字典的.value()方法字典的.item()方法 __future__模块 [回到目录] Python 3.x引入了一些与Python 2不兼容的关键字和特性,在Python 2中,可以通过内置的__future__模块导入这些新内容。如果你希望在Python 2环境下写的代码也可以在Python 3.x中运行,那么建议使用__future__模块。例如,如果希望在Python 2中拥有Python 3.x的整数除法行为,可以通过下面的语句导入相应的模块。 ? 1 from future import division 下表列出了__future__中其他可导入的特性: 特性 可选版本 强制版本 效果 nested_scopes 2.1.0b1 2.2 PEP 227:Statically Nested Scopes generators 2.2.0a1 2.3 PEP 255:Simple Generators division 2.2.0a2 3.0 PEP 238:Changing the Division Operator absolute_import 2.5.0a1 3.0 PEP 328:Imports: Multi-Line and Absolute/Relative with_statement 2.5.0a1 2.6 PEP 343:The “with” Statement print_function 2.6.0a2 3.0 PEP 3105:Make print a function unicode_literals 2.6.0a2 3.0 PEP 3112:Bytes literals in Python 3000 (来源: https://docs.python.org/2/library/future.html) 示例: ? 1 from platform import python_version print函数 [回到目录] 虽然print语法是Python 3中一个很小的改动,且应该已经广为人知,但依然值得提一下:Python 2中的print语句被Python 3中的print()函数取代,这意味着在Python 3中必须用括号将需要输出的对象括起来。 在Python 2中使用额外的括号也是可以的。但反过来在Python 3中想以Python2的形式不带括号调用print函数时,会触发SyntaxError。 Python 2 ? 1234 print 'Python', python_version()print 'Hello, World!'print('Hello, World!')print "text", ; print 'print more text on the same line' ? 1234 Python 2.7.6Hello, World!Hello, World!text print more text on the same line Python 3 ? 12345 print('Python', python_version())print('Hello, World!') print("some text,", end="") print(' print more text on the same line') ? 123 Python 3.4.1Hello, World!some text, print more text on the same line ? 1 print 'Hello, World!' ? File "", line 1print 'Hello, World!'^SyntaxError: invalid syntax 注意: 在Python中,带不带括号输出”Hello World”都很正常。但如果在圆括号中同时输出多个对象时,就会创建一个元组,这是因为在Python 2中,print是一个语句,而不是函数调用。 ? 123 print 'Python', python_version()print('a', 'b')print 'a', 'b' Python 2.7.7('a', 'b')a b 整数除法 [回到目录] 由于人们常常会忽视Python 3在整数除法上的改动(写错了也不会触发Syntax Error),所以在移植代码或在Python 2中执行Python 3的代码时,需要特别注意这个改动。 所以,我还是会在Python 3的脚本中尝试用float(3)/2或 3/2.0代替3/2,以此来避免代码在Python 2环境下可能导致的错误(或与之相反,在Python 2脚本中用from future import division来使用Python 3的除法)。 Python 2 ? 12345 print 'Python', python_version()print '3 / 2 =', 3 / 2print '3 // 2 =', 3 // 2print '3 / 2.0 =', 3 / 2.0print '3 // 2.0 =', 3 // 2.0 Python 2.7.63 / 2 = 13 // 2 = 13 / 2.0 = 1.53 // 2.0 = 1.0 Python 3 ? 12345 print('Python', python_version())print('3 / 2 =', 3 / 2)print('3 // 2 =', 3 // 2)print('3 / 2.0 =', 3 / 2.0)print('3 // 2.0 =', 3 // 2.0) Python 3.4.13 / 2 = 1.53 // 2 = 13 / 2.0 = 1.53 // 2.0 = 1.0 Unicode [回到目录] Python 2有基于ASCII的str()类型,其可通过单独的unicode()函数转成unicode类型,但没有byte类型。 而在Python 3中,终于有了Unicode(utf-8)字符串,以及两个字节类:bytes和bytearrays。 Python 2 ? 1 print 'Python', python_version() Python 2.7.6 ? 1 print type(unicode('this is like a python3 str type')) ? 1 print type(b'byte type does not exist') ? 1 print 'they are really' + b' the same' they are really the same ? 1 print type(bytearray(b'bytearray oddly does exist though')) Python 3 ? 12 print('Python', python_version())print('strings are now utf-8 u03BCnicou0394é!') Python 3.4.1strings are now utf-8 μnicoΔé! ? 12 print('Python', python_version(), end="")print(' has', type(b' bytes for storing data')) Python 3.4.1 has ? 12 print('and Python', python_version(), end="")print(' also has', type(bytearray(b'bytearrays'))) and Python 3.4.1 also has ? 1 'note that we cannot add a string' + b'bytes for data' TypeError Traceback (most recent call last) in ()----> 1 'note that we cannot add a string' + b'bytes for data' TypeError: Can't convert 'bytes' object to str implicitly xrange [回到目录] 在Python 2.x中,经常会用xrange()创建一个可迭代对象,通常出现在“for循环”或“列表/集合/字典推导式”中。 这种行为与生成器非常相似(如”惰性求值“),但这里的xrange-iterable无尽的,意味着可能在这个xrange上无限迭代。 由于xrange的“惰性求知“特性,如果只需迭代一次(如for循环中),range()通常比xrange()快一些。不过不建议在多次迭代中使用range(),因为range()每次都会在内存中重新生成一个列表。 在Python 3中,range()的实现方式与xrange()函数相同,所以就不存在专用的xrange()(在Python 3中使用xrange()会触发NameError)。 ? 12345678910 import timeit n = 10000def test_range(n): return for i in range(n): pass def test_xrange(n): for i in xrange(n): pass Python 2 ? 1234567 print 'Python', python_version() print 'ntiming range()'%timeit test_range(n) print 'nntiming xrange()'%timeit test_xrange(n) Python 2.7.6 timing range()1000 loops, best of 3: 433 µs per loop timing xrange()1000 loops, best of 3: 350 µs per loop Python 3 ? 1234 print('Python', python_version()) print('ntiming range()')%timeit test_range(n) Python 3.4.1 timing range()1000 loops, best of 3: 520 µs per loop ? 1 print(xrange(10)) NameError Traceback (most recent call last)in ()----> 1 print(xrange(10)) NameError: name 'xrange' is not defined Python 3中的range对象中的__contains__方法 另一个值得一提的是,在Python 3.x中,range有了一个新的__contains__方法。__contains__方法可以有效的加快Python 3.x中整数和布尔型的“查找”速度。 ? 123456789101112 x = 10000000def val_in_range(x, val): return val in range(x) def val_in_xrange(x, val): return val in xrange(x) print('Python', python_version())assert(val_in_range(x, x/2) == True)assert(val_in_range(x, x//2) == True)%timeit val_in_range(x, x/2)%timeit val_in_range(x, x//2) Python 3.4.11 loops, best of 3: 742 ms per loop1000000 loops, best of 3: 1.19 µs per loop 根据上面的timeit的结果,查找整数比查找浮点数要快大约6万倍。但由于Python 2.x中的range或xrange没有__contains__方法,所以在Python 2中的整数和浮点数的查找速度差别不大。 ? 12345678910 print 'Python', python_version() assert(val_in_xrange(x, x/2.0) == True)assert(val_in_xrange(x, x/2) == True)assert(val_in_range(x, x/2) == True)assert(val_in_range(x, x//2) == True)%timeit val_in_xrange(x, x/2.0)%timeit val_in_xrange(x, x/2)%timeit val_in_range(x, x/2.0)%timeit val_in_range(x, x/2) Python 2.7.71 loops, best of 3: 285 ms per loop1 loops, best of 3: 179 ms per loop1 loops, best of 3: 658 ms per loop1 loops, best of 3: 556 ms per loop 下面的代码证明了Python 2.x中没有__contain__方法: ? 12 print('Python', python_version())range.__contains__ Python 3.4.1 ? 12 print('Python', python_version())range.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last) in ()1 print 'Python', python_version()----> 2 range.__contains__ AttributeError: 'builtin_function_or_method' object has no attribute '__contains__' ? 12 print('Python', python_version())xrange.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last)in ()1 print 'Python', python_version()----> 2 xrange.__contains__ AttributeError: type object 'xrange' has no attribute '__contains__' 关于Python 2中xrange()与Python 3中range()之间的速度差异的一点说明: 有读者指出了Python 3中的range()和Python 2中xrange()执行速度有差异。由于这两者的实现方式相同,因此理论上执行速度应该也是相同的。这里的速度差别仅仅是因为Python 3的总体速度就比Python 2慢。 ? 12345 def test_while(): i = 0 while i < 20000: i += 1 return ? 12 print('Python', python_version())%timeit test_while() Python 3.4.1%timeit test_while()100 loops, best of 3: 2.68 ms per loop ? 12 print 'Python', python_version()%timeit test_while() Python 2.7.61000 loops, best of 3: 1.72 ms per loop 触发异常 [回到目录] Python 2支持新旧两种异常触发语法,而Python 3只接受带括号的的语法(不然会触发SyntaxError): Python 2 ? 1 print 'Python', python_version() Python 2.7.6 ? 1 raise IOError, "file error" IOError Traceback (most recent call last) in ()----> 1 raise IOError, "file error" IOError: file error ? 1 raise IOError("file error") IOError Traceback (most recent call last) in ()----> 1 raise IOError("file error") IOError: file error Python 3 ? 1 print('Python', python_version()) Python 3.4.1 ? 1 raise IOError, "file error" File "", line 1raise IOError, "file error"^SyntaxError: invalid syntaxThe proper way to raise an exception in Python 3: ? 12 print('Python', python_version())raise IOError("file error") Python 3.4.1 OSError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 raise IOError("file error") OSError: file error 异常处理 [回到目录] Python 3中的异常处理也发生了一点变化。在Python 3中必须使用“as”关键字。 Python 2 ? 12345 print 'Python', python_version()try: let_us_cause_a_NameErrorexcept NameError, err: print err, '--> our error message' Python 2.7.6name 'let_us_cause_a_NameError' is not defined --> our error message Python 3 ? 12345 print('Python', python_version())try: let_us_cause_a_NameErrorexcept NameError as err: print(err, '--> our error message') Python 3.4.1name 'let_us_cause_a_NameError' is not defined --> our error message next()函数和.next()方法 [回到目录] 由于会经常用到next()(.next())函数(方法),所以还要提到另一个语法改动(实现方面也做了改动):在Python 2.7.5中,函数形式和方法形式都可以使用,而在Python 3中,只能使用next()函数(试图调用.next()方法会触发AttributeError)。 Python 2 ? 1234 print 'Python', python_version()my_generator = (letter for letter in 'abcdefg')next(my_generator)my_generator.next() Python 2.7.6'b' Python 3 ? 123 print('Python', python_version())my_generator = (letter for letter in 'abcdefg')next(my_generator) Python 3.4.1'a' ? 1 my_generator.next() AttributeError Traceback (most recent call last) in ()----> 1 my_generator.next() AttributeError: 'generator' object has no attribute 'next' For循环变量与全局命名空间泄漏 [回到目录] 好消息是:在Python 3.x中,for循环中的变量不再会泄漏到全局命名空间中了! 这是Python 3.x中做的一个改动,在“What's New In Python 3.0”中有如下描述: “列表推导不再支持[... for var in item1, item2, ...]这样的语法,使用[... for var in (item1, item2, ...)]代替。还要注意列表推导有不同的语义:现在列表推导更接近list()构造器中的生成器表达式这样的语法糖,特别要注意的是,循环控制变量不会再泄漏到循环周围的空间中了。” Python 2 ? 12345678 print 'Python', python_version() i = 1print 'before: i =', i print 'comprehension: ', [i for i in range(5)] print 'after: i =', i Python 2.7.6before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 4 Python 3 ? 12345678 print('Python', python_version()) i = 1print('before: i =', i) print('comprehension:', [i for i in range(5)]) print('after: i =', i) Python 3.4.1before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 1 比较无序类型 [回到目录] Python 3中另一个优秀的改动是,如果我们试图比较无序类型,会触发一个TypeError。 Python 2 ? 1234 print 'Python', python_version()print "[1, 2] > 'foo' = ", [1, 2] > 'foo'print "(1, 2) > 'foo' = ", (1, 2) > 'foo'print "[1, 2] > (1, 2) = ", [1, 2] > (1, 2) Python 2.7.6[1, 2] > 'foo' = False(1, 2) > 'foo' = True[1, 2] > (1, 2) = False Python 3 ? 1234 print('Python', python_version())print("[1, 2] > 'foo' = ", [1, 2] > 'foo')print("(1, 2) > 'foo' = ", (1, 2) > 'foo')print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2)) Python 3.4.1 TypeError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 print("[1, 2] > 'foo' = ", [1, 2] > 'foo')3 print("(1, 2) > 'foo' = ", (1, 2) > 'foo')4 print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2))TypeError: unorderable types: list() > str() 通过input()解析用户的输入 [回到目录] 幸运的是,Python 3改进了input()函数,这样该函数就会总是将用户的输入存储为str对象。在Python 2中,为了避免读取非字符串类型会发生的一些危险行为,不得不使用raw_input()代替input()。 Python 2 ? 1234567891011121314151617 Python 2.7.6[GCC 4.0.1 (Apple Inc. build 5493)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) my_input = raw_input('enter a number: ') enter a number: 123 type(my_input) Python 3 ? 12345678 Python 3.4.1[GCC 4.2.1 (Apple Inc. build 5577)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) 返回可迭代对象,而不是列表 [回到目录] 在xrange一节中可以看到,某些函数和方法在Python中返回的是可迭代对象,而不像在Python 2中返回列表。 由于通常对这些对象只遍历一次,所以这种方式会节省很多内存。然而,如果通过生成器来多次迭代这些对象,效率就不高了。 此时我们的确需要列表对象,可以通过list()函数简单的将可迭代对象转成列表。 Python 2 ? 1234 print 'Python', python_version() print range(3)print type(range(3)) Python 2.7.6[0, 1, 2] Python 3 ? 1234 print('Python', python_version())print(range(3))print(type(range(3)))print(list(range(3))) Python 3.4.1range(0, 3)[0, 1, 2] 下面列出了Python 3中其他不再返回列表的常用函数和方法:•zip()•map()•filter()•字典的.key()方法•字典的.value()方法•字典的.item()方法 更多关于Python 2和Python 3的文章 [回到目录] 下面列出了其他一些可以进一步了解Python 2和Python 3的优秀文章, //迁移到 Python 3•Should I use Python 2 or Python 3 for my development activity?•What's New In Python 3.0•Porting to Python 3•Porting Python 2 Code to Python 3•How keep Python 3 moving forward // 对Python 3的褒与贬•10 awesome features of Python that you can't use because you refuse to upgrade to Python 3•关于你不想知道的所有Python3 unicode特性•Python 3 正在毁灭 Python•Python 3 能振兴 Python•Python 3 is fine

xuning715 2019-12-02 01:10:35 0 浏览量 回答数 0

回答

问题 你想创建一个字典,并且在迭代或序列化这个字典的时候能够控制元素的顺序。 解决方案 为了能控制一个字典中元素的顺序,你可以使用 collections 模块中的 OrderedDict 类。 在迭代操作的时候它会保持元素被插入时的顺序,示例如下: 往期回顾: python问答学堂-《python进阶大全》中你必须掌握的QA 【python问答学堂】2期解压序列赋值给多个变量? 【python问答学堂】3解压可迭代对象赋值给多个变量? 【python问答学堂】4期保留最后 N 个元素? 【python问答学堂】5期 查找最大或最小的 N 个元素 【python问答学堂】6期 实现一个优先级队列 【python问答学堂】7期 字典中的键映射多个值

剑曼红尘 2020-04-28 14:22:58 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播