1. 枚举 - enumerate 可以有参数哦之前我们这样操作12i0foriteminiterable:printi, item i1现在我们这样操作123fori, iteminenumerate(iterable):printi, itemenumerate函数还可以接收第二个参数。就像下面这样1234list(enumerate(abc))[(0,a), (1,b), (2,c)]list(enumerate(abc,1))[(1,a), (2,b), (3,c)]2. 字典/集合 解析你也许知道如何进行列表解析但是可能不知道字典/集合解析。它们简单易用且高效。就像下面这个例子1234my_dict{i: i*iforiinxrange(100)}my_set{i*15foriinxrange(100)}# There is only a difference of : in both# 两者的区别在于字典推导中有冒号3. 强制浮点除法12from__future__importdivisionresult1/2# print(result)# 0.54. 对Python表达式求值我们都知道eval函数但是我们知道literal_eval函数么也许很多人都不知道吧。可以用这种操作12importastmy_listast.literal_eval(expr)来代替以下这种操作1expr[1, 2, 3]my_listeval(expr)我相信对于大多数人来说这种形式是第一次看见但是实际上这个在Python中已经存在很长时间了。5. 字符串/数列 逆序你可以用以下方法快速逆序排列数列12 a[1,2,3,4] a[::-1][4,3,2,1]# This creates a new reversed list. # If you want to reverse a list in place you can do:a.reverse()这总方式也同样适用于字符串的逆序1 fooyasoob foo[::-1]boosay6. 三元运算三元运算是if-else 语句的快捷操作也被称为条件运算。这里有几个例子可以供你参考它们可以让你的代码更加紧凑更加美观。12[on_true]if[expression]else[on_false]x, y50,25smallxifx yelsey7. Python里面如何拷贝一个对象标准库中的copy模块提供了两个方法来实现拷贝.一个方法是copy,它返回和参数包含内容一样的对象.1importcopynew_listcopy.copy(existing_list)有些时候,你希望对象中的属性也被复制,可以使用deepcopy方法:12importcopynew_list_of_dictscopy.deepcopy(existing_list_of_dicts)copy(x)Shallow copy operation on arbitrary Python objects.deepcopy(x, memoNone, _nil[])Deep copy operation on arbitrary Python objects.8. python中如何判断对象相等首先是C#中字符串的和equal方法。“” :对于内置值类型而言 判断两个内存值是否相等。对于用户自定义的值类型而言(Struct) 需要重载否则不能使用。对于引用类型而言默认是同一引用才返回true但是系统重载了很多引用类型的 比如下文提到的string所以c#中引用类型的比较并不建议使用 。“equals” :对于值类型而言 内存相等才返回true。对于引用类型而言指向同一个引用才算相等。但是比较特殊的是字符串String,是一个特殊的引用型类型在C#语言中重载了string的equals()方法使string对象用起来就像是值类型一样。python中的 python中的对象包含三要素:id, type, valueid 用来标识唯一一个对象type标识对象的类型value用来设置对象的值。is 判断是否是一个对象使用id来判断的。 是判断a对象的值是否是b对象的值默认调用它的__eq__方法。9. 命名技巧今天阅读代码发现一个不错的函数命名方式:1defrequest(_argv):就是把所有的参数前面都加上_下划线这样你在函数体中一眼就可以看出那些是局部变量那些是作为参数传入的类似把全局变量前面加上g。10. 开发者工具集锦pydoc 模块可以根据源代码中的docstrings为任何可导入模块生成格式良好的文档。doctest模块该模块可以从源代码或独立文件的例子中抽取出测试用例。unittest模块该模块是一个全功能的自动化测试框架该框架提供了对测试准备(test fixtures), 预定义测试集(predefined test suite)以及测试发现(test discovery)的支持。trace模块可以监控Python执行程序的方式同时生成一个报表来显示程序的每一行执行的次数。这些信息可以用来发现未被自动化测试集所覆盖的程序执行路径也可以用来研究程序调用图进而发现模块之间的依赖关系。编写并执行测试可以发现绝大多数程序中的问题Python使得debug工作变得更加简单这是因为在大部分情况下Python都能够将未被处理的错误打印到控制台中我们称这些错误信息为traceback。如果程序不是在文本控制台中运行的traceback也能够将错误信息输出到日志文件或是消息对话框中。当标准的traceback无法提供足够的信息时可以使用cgitb 模块来查看各级栈和源代码上下文中的详细信息比如局部变量。cgitb模块还能够将这些跟踪信息以HTML的形式输出用来报告web应用中的错误。