了解K神( kennethreitz)是从它牛逼的requests库开始,号称最顶尖的Python程序员之一。大神有很多作品,而且还有一个非常励志的传奇故事,从一个胖胖的不修边幅的码农,励志减肥而变成一个爱摄影玩音乐的,有艺术家气息程序员。今天我们一起来拜读一下大神关于写Python代码的建议!

一.Mutable and immutable types

Python有两种内置或用户定义的类型。可变类型是允许就地修改内容的类型。典型的可变列表是列表和词典:所有列表都有变异方法,如 list.append()或list.pop(),并且可以在适当的位置进行修改。词典也是如此。

不可变类型不提供改变其内容的方法。例如,设置为整数6的变量x没有“增量”方法。如果要计算x + 1,则必须创建另一个整数并为其指定名称。

体会一下这Best这招,选择是使用map函数,它可以将内置函数类型str映射到迭代器range。这会生成一个map对象,然后就可以像其他示例一样join。在某些情况下,map函数甚至可能比列表理解更快,更简洁!

二.One statement per line

每一行一个语句,尤其在复杂的逻辑表达式的时候,这样会清晰很容易阅读。

虽然列表推导等一些复合语句因其简洁性和表达性而被允许和赞赏,但在同一行代码上有两个脱节语句是不好的做法

三.Explicit code

Python因为技巧性非常高,有的时候滥用一些黑魔法,过度的使用技巧而反而失去了代码本身的直观性。

字典的更新有几种方法,dict(**locals)本意是想生成一个新的字典返回。在上面的好代码中,显式地从调用者接收x和y,并返回显式字典。使用此函数的开发人员通过读取第一行和最后一行就能确切地知道要做什么,而不是像坏例子的那种情况,比较晦涩难懂,不直接。

四.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.

当一个函数在其正常过程中有多个主要出口时,调试返回的结果变得很困难,因此最好保留一个退出点。这也将有助于分解一些代码路径,如果函数有多个出口点,说明你的代码要进一步的重构。

五.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

六.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 sdef lookup_list(l): return s in l即使两个函数看起来都相同,因为lookup_set利用了Python中的集合是哈希表的事实,两者之间的查找性能是非常不同的。

要确定项目是否在列表中,Python必须遍历每个项目,直到找到匹配的项目。

这很费时,特别是对于长列表。另一方面,在集合中项目的哈希将告诉Python在集合中的哪个位置寻找匹配项目。因此,即使集合很大,也可以快速完成搜索

七.Check if variable equals a constan

检查变量是否等于常数

您不需要显式地将值与True或None或空进行比较 - 您只需将其添加到if语句即可。

八.Access a Dictionary Element

访问字典元素

不要使用该dict.has_key()方法。相反使用语法或传递默认参数 比如x in dict ,dict.get(k,default_value)

九.Filtering a list

过滤列表坏的做法,或者初学者经常会犯的错误。

好的做法是使用filter函数,从Python 3.0开始,该filter()函数返回迭代器而不是列表。如果你真的需要一个列表,前面加一个list()即可!

十.Read From a File

使用语法从文件中读取,这将自动为您关闭文件,一定要用with open

十一.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解释器将加入下一行,直到括号被关闭。对于大括号和方括号,同样的行为也适用。

python九十八类_Python领域最伟大工程师Kenneth Reitz,教你写代码相关推荐

  1. python的逆袭之路_Python领域最伟大工程师Kenneth Reitz的逆袭之路

    这是当年在PyCON演讲「Python for Humans」时候的样子: 程序员+大胖子 + 小胸,想必大家理解了.当时Kenneth Reitz本人还真一点都不介意,心宽体胖,还会自嘲.站在讲台的 ...

  2. Python编程从入门到实践(第二版)课后习题自写代码

    Python编程从入门到实践(第二版)课后习题自写代码 第八章 函数 最近自学的python,动手做了一下课后习题,错误也许会有,和大家一起探讨.多多指教! 8.3 返回值 动手试一试代码片 &quo ...

  3. python如何定义类_Python 面向对象

    Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...

  4. python中定制类_python定制类__str__(实例详解)

    在接下来的文章中,让我们明白什么是python中的自定义类.学习什么是python的自定义类,python定制类可以扮演何种角色在python编程.当你看到像__xxx__ __slots__变量或函 ...

  5. python编写ATM类_Python中编写类的各种技巧和方法

    有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象.Pickling).你可以把它当作一个教程, ...

  6. python如何定义类_python中定义类

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 类的定义python中,定义类是通过class关键字,例如我们定义一个存储学生信 ...

  7. [python笔记]八.类

    一.创建和使用类 1)创建类 eg: class Dog():def __init__(self, name, age):self.name = nameself.age = agedef sit(s ...

  8. python编写student类_Python艺术编程节——以趣味活动促进学生学习编程

    陈斌 近年来,Python逐渐成为最热门的计算机编程语言之一,如何开展Python语言的编程教学也成为了计算机基础教育领域的热门话题.面向中小学生的编程教学尤其需要激发并培养学生的学习兴趣.因此,在针 ...

  9. python type创建类_Python基于内置函数type创建新类型

    英文文档: class type(object) class type(name, bases, dict) With one argument, return the type of an obje ...

最新文章

  1. java关闭当前窗口打开另一窗口
  2. iOS编程——经过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC版)
  3. SAS数据挖掘方法论 ─ SEMMA
  4. 小米笔记本充电实测追求速度牺牲兼容性小米笔记本充电驱动_是海尔?也是雷神?不足1千克MixBook Air超轻薄笔记本...
  5. 数论 欧几里得与扩展欧几里得
  6. android开发工具哪个好_小程序开发工具怎么用?哪个好用?
  7. python索引例子_谈谈python中的索引
  8. nagios 163邮件报警
  9. C语言volatile关键字
  10. Android开发实战使用(VR技术实现360°全景视频播放功能)
  11. 最大流(Dinic算法)
  12. u 只读 盘 突然_u盘变成只读方式了,怎么办
  13. 小米路由器3G刷入OpenWrt
  14. 登录samba后提示“你可能没有权限访问网络资源”的解决方法
  15. 技术文摘12 yun jia 技术 资料 截图工具 美容
  16. 数据合并中pd.merge()和pd.concat()区别
  17. 玩转手机中的linux系统termux并搭建java开发环境
  18. 两块STM32之间 SPI DMA通信
  19. 视听融合综述(三)Audiovisual Fusion: Challenges and New Approaches
  20. 树莓派基于ffmpeg+阿里云流媒体服务器实现视频直播

热门文章

  1. 技嘉z68pds3刷中文bios_技嘉RTX 3080 VISION OC雪鹰显卡评测:内容创作、3A游戏两不误之选...
  2. CentOS 8 即将停更,未来我们该何去何从?
  3. 皮一皮:经历过的举手报道...
  4. 皮一皮:从地理位置分析当年的那件事...
  5. 每日一皮:开会不关微信的尴尬(2)
  6. 来阿里前 vs 来阿里后
  7. 西南交通大学计算机绘图,西南交通大学网络教育计算机绘图主观题第二次答案...
  8. adb查看手机cpu使用率_记录一下Unity打包Android在骁龙cpu上概率性卡死的问题
  9. android 无法安装测试版本,在测试应用更新时,安装无提示阻止Android版本构建签名APK...
  10. oracle的正则表达式(regular expression)简单介绍