共计 3425 个字符,预计需要花费 9 分钟才能阅读完成。
理解 K 神 (kennethreitz) 是从它牛逼的 requests 库开始,号称最顶尖的 Python 程序员之一。大神有很多作品,而且还有一个十分励志的传奇故事,从一个胖胖的蓬头垢面的码农,励志减肥而变成一个爱摄影玩音乐的,有艺术家气味程序员。明天咱们一起来拜读一下大神对于写 Python 代码的倡议!
1.Mutable and immutable types
Python 有两种内置或用户定义的类型。
可变类型是容许就地批改内容的类型。典型的可变列表是列表和词典:所有列表都有变异办法,如 list.append()或 list.pop(),并且能够在适当的地位进行批改。词典也是如此。
不可变类型不提供扭转其内容的办法。例如,设置为整数 6 的变量 x 没有“增量”办法。如果要计算 x + 1,则必须创立另一个整数并为其指定名称。
领会一下这 Best 这招,抉择是应用 map 函数,它能够将内置函数类型 str 映射到迭代器 range。这会生成一个 map 对象,而后就能够像其余示例一样 join。在某些状况下,map 函数甚至可能比列表了解更快,更简洁!
2.One statement per line
每一行一个语句,尤其在简单的逻辑表达式的时候,这样会清晰很容易浏览。
尽管列表推导等一些复合语句因其简洁性和表白性而被容许和赞叹,但在同一行代码上有两个脱节语句是不好的做法
3.Explicit code
Python 因为技巧性十分高,有的时候滥用一些黑魔法,适度的应用技巧而反而失去了代码自身的直观性。
字典的更新有几种办法,dict(**locals)本意是想生成一个新的字典返回。在下面的好代码中,显式地从调用者接管 x 和 y,并返回显式字典。应用此函数的开发人员通过读取第一行和最初一行就能确切地晓得要做什么,而不是像坏例子的那种状况,比拟艰涩难懂,不间接。
4.Returning values
对于返回值的解决
当函数的复杂性减少时,在函数体内应用多个 return 语句并不常见。然而,为了放弃清晰的用意和可继续的可读性程度,最好防止从体内的许多输入点返回有意义的值。
在函数中返回值有两种次要状况:函数在失常解决时返回的后果,以及批示谬误输出参数的谬误状况或函数无奈实现其计算的任何其余起因或工作
def complex_function(a, b, c): if not a: return None
Raising an exception might be better if not b: return None # Raising an exception might be better
Some complex code trying to compute x from a, b and c
Resist temptation to return x if succeeded if not x:
Some Plan-B computation of x return x
One single exit point for the returned value x will help
when maintaining the code.
当一个函数在其失常过程中有多个次要进口时,调试返回的后果变得很艰难,因而最好保留一个退出点。这也将有助于合成一些代码门路,如果函数有多个进口点,阐明你的代码要进一步的重构。最初,如果你的工夫不是很缓和,并且又想疾速的进步,最重要的是不怕吃苦,倡议你能够分割维:762459510,那个真的很不错,很多人提高都很快,须要你不怕吃苦哦!大家能够去增加上看一下~
5.Unpacking
如果晓得列表或元组的长度,则能够通过解压缩为其元素指定名称。比方 enumerate()将为列表中的每个项提供两个元素的元组,一个下标一个值:
for index, item in enumerate(some_list): # do something with index and item
也能够应用它来替换变量:
a, b = b, a
嵌套解包也实用 Py3.x:
a, (b, c) = 1, (2, 3) a, *rest = [1, 2, 3]
a = 1, rest = [2, 3] a, *middle, c = [1, 2, 3, 4]
a = 1, middle = [2, 3], c = 4
6.Searching for an item in a collection
有时咱们须要搜寻一系列的货色。让咱们看看两个选项:列表和汇合。
以上面的代码为例:
s = set([‘s’, ‘p’, ‘a’, ‘m’]) l = [‘s’, ‘p’, ‘a’, ‘m’] def lookup_set(s): return ‘s’ in s def lookup_list(l): return ‘s’ in l
即便两个函数看起来都雷同,因为 lookup_set 利用了 Python 中的汇合是哈希表的事实,两者之间的查找性能是十分不同的。
要确定我的项目是否在列表中,Python 必须遍历每个我的项目,直到找到匹配的我的项目。最初,如果你的工夫不是很缓和,并且又想疾速的进步,最重要的是不怕吃苦,倡议你能够分割维:762459510,那个真的很不错,很多人提高都很快,须要你不怕吃苦哦!大家能够去增加上看一下~
这很费时,特地是对于长列表。另一方面,在汇合中我的项目的哈希将通知 Python 在汇合中的哪个地位寻找匹配我的项目。因而,即便汇合很大,也能够疾速实现搜寻
7.Check if variable equals a constan
查看变量是否等于常数
您不须要显式地将值与 True 或 None 或空进行比拟 – 您只需将其增加到 if 语句即可。
8.Access a Dictionary Element
拜访字典元素
不要应用该 dict.has_key()办法。相同应用语法或传递默认参数 比方 x in dict,dict.get(k,default_value)
9.Filtering a list
过滤列表坏的做法,或者初学者常常会犯的谬误。
好的做法是应用 filter 函数,从 Python 3.0 开始,该 filter()函数返回迭代器而不是列表。如果你真的须要一个列表,后面加一个 list()即可!
10.Read From a File
应用语法从文件中读取,这将主动为您敞开文件,肯定要用 with open
11.Line Continuations
代码长度的继续
当咱们的逻辑代码行长于可承受的限度时(PEP8 规定是 79 个字符),须要将其拆分为多个物理行。
如果行的最初一个字符是反斜杠,Python 解释器将连贯间断的行。这在某些状况下很有用,但通常应该防止因为它的脆弱性。
在反斜杠之后增加到行尾的空格会毁坏代码并可能产生意外后果。
Bad:
my_very_big_string = “””For a long time I used to go to bed early. Sometimes, when I had put out my candle, my eyes would close so quickly that I had not even time to say“I’m going to sleep.”””” from some.deep.module.inside.a.module import a_nice_function, another_nice_function, yet_another_nice_function
Good:
my_very_big_string = (“For a long time I used to go to bed early. Sometimes, ” “when I had put out my candle, my eyes would close so quickly ” “that I had not even time to say“I’m going to sleep.””) from some.deep.module.inside.a.module import (a_nice_function, another_nice_function, yet_another_nice_function)
更好的做法是在元素四周应用括号。在行尾留下一个未闭合的括号,Python 解释器将退出下一行,直到括号被敞开。对于大括号和方括号,同样的行为也实用。最初,如果你的工夫不是很缓和,并且又想疾速的进步,最重要的是不怕吃苦,倡议你能够分割维:762459510,那个真的很不错,很多人提高都很快,须要你不怕吃苦哦!大家能够去增加上看一下~
大神的领导十分有用,通过这些倡议的招式,咱们须要缓缓的思考为啥要这样写,这样背地的原理是啥!透过这些倡议来了解大神对 Python 代码的思考,素来缓缓的领悟 Python 之美,升华本人的 Python 功力!