《【收藏】python实用技巧》由会员分享,可在线阅读,更多相关《【收藏】python实用技巧(32页珍藏版)》请在金锄头文库上搜索。
1、http:/ 供稿【收藏】Python 实用技巧 前言 本文主要记录 Python 中一些常用技巧,所描述的是告诉你怎么写才是更好? 如果你 并不熟悉 Python 语法,希望你能在下面代码片段中看到 Python 的简单、优雅; 如果你象我 这样,对 Python 有兴趣或并正在学习,我相信下面的技巧并不会让你失望; 如果你已经 是一名 Pythoner ,那么很乐于你分享你的经验和技巧。 目录 Python 禅道 代码风格: 提高可读性 PEP 8: Python 代码风格指南 空格(行)使用 (1) 空格(行)使用 (2) 命名 较长代码行 较长字符串 复合语句 字符串文档 注释 交换变
2、量 更多关于 Tuples 关于 _ 创建 String: 从列表中创建 尽可能的使用 字典中的 get 函数 字典中的 setdefault 函数 (1) 字典中的 setdefault 函数 (2) defaultdict 创建 分割字典 判断 True 值 True 值 索引 项 (1) 索引 项 (2): enumerate 默认参数值 列表理解 http:/ 供稿生成器表达式 (1) 生成器表达式 (2) 排序 使用 DSU *排序 使用 Key 排序 生成器 生成器示例 从文件中读取数据行 try/except 示例 导入(Importing) 模块 脚本 模块结构 命令行处理 简
3、单比复杂好 不要重新发明轮子 章节 Python 禅道 这是 Python 的指导原则,但有不同诠释。 如果您使用的一种编程语言是以小品喜剧艺术团命名的,你最好有幽默感。 美丽优于丑陋。 http:/ 供稿明确优于含蓄。 简单比复杂好。 平倘优于嵌套。 稀疏比密集更好。 特殊情况不能特殊到打破规则。 错误不应该默默传递。 . 代码风格: 提高可读性 Programs must be written for people to read, and only incidentally for machines to execute.Abelson Sussman, Structure and In
4、terpretation of Computer Programs PEP 8: Python 代码风格指南 值得阅读: http:/ 供稿http:/www.python.org/dev/peps/pep-0008/ 空格(行)使用 (1) 使用 4 个空格缩进。 不要使用制表符。 不要将制表符和空格混合使用。 IDEL 和 Emacs 的 Python 的都支持 spaces 模式。 每个函数之间应该有一个空行。 每一个 Class 之间应该有两个空行。 空格(行)使用 (2) 在使用 字典(dict), 列表(list), 元组(tuple), 参数(argument)列表时, 应在 ,
5、 前添加一个空格, 并且使用字典(dict)时,在 : 号后添加空格,而不是在前面 添加。 在括号之前或参数之前不添加空格。 在文档注释中前后应该没有空格。 Python 代码 http:/ 供稿defmake_squares(key,value=0): Returnadictionaryandalist. d=key:value l=key,value returnd,l 命名 joined_lower 可以是 函数名, 方法名, 属性名 joined_lowerorALL_CAPS 是常量 StudlyCaps 类名 camelCase 只有在预先制定好的命名规范使用 属性:interfa
6、ce,_internal,_private 但尽量避免_private 形式。下面两个链接解释了 为什么 python 中没有 private 声明? http:/ private http:/ 较长代码行 http:/ 供稿保持一行代码在 80 个字符长度。 在括号内使用隐含的行延续: Python 代码 def_init_(self,first,second,third, fourth,fifth,sixth): output=(first+second+third +fourth+fifth+sixth) 或者在需要换行的位置使用 来延续行: Python 代码 VeryLong.lef
7、t_hand_side =even_longer.right_hand_side() 另外,使用反斜杠是有风险的,如果你添加一个空格在反斜杠后面,它就出错了。此外, 它使代码难看。 http:/ 供稿较长字符串 将相邻的字符串进行连接的做法: Python 代码 printone one 虽然字符之间的空格不是必需的,但是这样有助于可读性。 Python 代码 printtr/o t/o http:/ 供稿用一个 “r“ 开头的字符串是一个“raw“的字符串(类似 java 中的转义符)。上面的反斜杠就 会当成普通字符串处理。他们对正则表达式和 Windows 文件系统路径非常有用。 dsyn
8、tax 这是因为自动连接是由 Python 解析器/编译器来处理的,因为其无法在编译时对变量值 进行翻译,所以就这种必须在运行时使用“+“运算符来连接变量。 复合语句 Good: Python 代码 iffoo=blah: do_something() do_one() do_two() do_three() Bad: http:/ 供稿Python 代码 iffoo=blah:do_something() do_one();do_two();do_three() 文档注释(Docstrings) 注释 文档注释 = 用于解释如何使用代码 文档注释公约: http:/www.python.or
9、g/dev/peps/pep-0257/ 注释 = 为什么 (理由) 代码如何工作的如: Python 代码 #!BUG:. #!FIX:Thisisahack http:/ 供稿#?Whyisthishere? 注释对于任何语言开发者来说已经最基本的东西了,这里就不详细说了.交换变量 在其它语言的交换变量的做法一般是: Java 代码 temp=a a=b b=temp Python 的做法: Python 代码 http:/ 供稿b,a=a,b 也许你见到过这样的情况,但是你知道它是如何工作的吗? 首先,逗号是元组构造语法。 等号的右边是定义一个元组 (tuple packing). 其左
10、边为一个目标元组 (tuple unpacking). 右边的元组根据名称被 unpacked 到左边的无组。 更多关于 unpacked 例子: Python 代码 info=David,Pythonista,+1250 name,title,phone=info name Davids title Pythonista phone +1250 在结构化的数据上使用循环: http:/ 供稿info 是在上面定义的一个 list . 所以下面的 people 有两个项, 两个项都是分别都拥有三 个项的 list. Python 代码 people=info,Guido,BDFL,unlist
11、ed for(name,title,phone)inpeople: .printname,phone . David+1250 Guidounlisted 以上循环中,people 中的两个项(list item),都已经被 unpacked 到 (name, title, phone) 无 组中。 可以任意嵌套(只要左右两边的结构一定要能够匹配得上): Python 代码 david,(gname,gtitle,gphone)=people gname Guido gtitle BDFL http:/ 供稿gphone unlisted david David,Pythonista,+125
12、0 更多关于 Tuples 我们看到的是元组通过逗号构造,而不是括号。例如: Python 代码 1, (1,) Python 的解释器会为你显示括号,所以建议你使用括号: Python 代码 http:/ 供稿(1,) (1,) 千万不要忘记逗号! Python 代码 (1) 1 在只有一个元素的元组,尾随逗号是必须的,在 2 + 元素的元组,尾随逗号是可选的。 如果创建一个 0 或空元组,一对括号是快捷的语法: Python 代码 () () tuple() () http:/ 供稿一个常见的错误当你并不想要一个无组,却无意的添加了一个逗号,很容易造成你在代 码中的错误,如: Python
13、 代码 value=1, value#isatuple,notaint (1,) 所以,当你发现一个元组时,赶紧去找一下那个,号吧。 关于 _ 是一个非常有用的功能,但是却很少有人知道。 当你在交互式模式下(如 IDEL)计算一个表达式或调用一个函数后,其结果必然是一个临 时名称,_(下划线): Python 代码 http:/ 供稿1+1 2 _ 2 在 _ 中存储最后输出的值。 当输出的结果是 None 或没有任何输出时,而 _ 的值并不会改变,仍然保存上一次的 值。这就是方便所在。 当然,这只能交互式的模式中使用,在模块中不能支持。 这在交互式模式中是非常有用的,当你在过程中没有保存计算
14、结果 或 你想看最后一步 的执行的输出结果: Python 代码 importmath math.pi/3 1.0471975511965976 angle=_ math.cos(angle) 0.50000000000000011 _ 0.50000000000000011 http:/ 供稿创建 String: 从列表中创建 开始定义一个 string 列表: Python 代码 colors=red,blue,green,yellow 当我们需要将上面的列表连接成一个字符串。尤其当 list 是一个很大的列表时. 不要这样做: Python 代码 result= forsincolors: result+=s 这种方式效率非常低下的,它有可怕的内存使用问题,至于为什么,如果你是 javaer 的 话,其中的 string 连接,我想