Effective Python:编写高质量的Python代码的59个有效方法(1-3)

第一章
用Pythonic方式来思考

  • 第一条:确认自己所用的Python版本:
    (1)查看python2系列版本
    python --version
    (2)查看python3系列版本
    python3 --version
    (3) 其他
    运行程序时,可以在内置的sys模块查询相关的值,来确定当前使用的python版本
    import sys
    print (sys.version_info)
    print (sys.version)
    (4)要点
    首先要确保操作系统的命令行中运行python时和你想用的python版本相符;python2系列到2020年不再进行相关维护,推荐使用python3系列。
  • 第二条:遵循PEP8风格指南
    (1)PEP8:《Python Enhancement Proposal #8》(8号Python增强提案),是针对Python代码格式而编订的风格指南。利于阅读,利于理解,利于修改。
    1>PEP8列出很多细节,随python更新持续更新中,有时间有兴趣的小伙伴可以把整个指南详细阅读(http://www.python.org/dev/peps/pep-0008)。
    2>几条绝对应该遵守的规则
    空白(whitespace):使用需谨慎
    (1)使用空格(space)来表示缩进,而不要使用制表符(tab),注意不要混用,否则会报错;
    (2)和语法相关的每一层缩进都用四个空格来表示,选择pycharm/sublime text 编辑器会自动缩进;
    (3)每行的字符数不应超过79,如果每一行过长,在sublime text里面可以设置换行(view-word wrap);
    (4)对于占据多行的长表达式,除了首行之外其余各行都应该在通常的缩进级别上再加4个空格;
    (5)函数与类之间用两个空行隔开;
    (6)同一类中,各方法之间用一个空行隔开;
    (7)使用下标获取列表元素、调用函数或给关键字参数赋值的时候,不要在两旁添加空格;
    (8)为变量赋值时,赋值符号左右两侧各自写上一个空格,且只写一个就好。

命名:PEP8提倡采用不同的命名风格来编写python代码的各个部分,以便根据命名看出他们在python语言中的角色。
(1)函数、变量及属性用小写字母,各单词之间下划线相连,例如,lowercase_underscore;
(2)受保护的实例属性,应该以单个下划线开头,例如,_leading_underscore(讲解教程:https://blog.csdn.net/u012193416/article/details/89392958);
(3)私有的实例属性,应该以两个下划线开头,例如,__double_leading_underscore(讲解教程:https://blog.csdn.net/u012193416/article/details/89392958);
(4)类与异常,应该以每个单词首字母均大写的形式来命名;
(5)模块级别的常量,应该全部采用大写字母来拼写,各个单词之间以下划线相连;
(6)类中的实例方法(instance method),应该把首个参数命名为self,以表示该对象自身;
(7)类方法(class method)的首个参数,应该命名为cls,以表示该类自身。


表达式和语句:“每件事都应该有直白的做法,而且最好只有一种。”
(1)采用内联形式的否定词,而不要把否定词放在整个表达式前面,如if a is not b而不是if not a is b;
(2)不要通过检测长度的方法(如if len(somelist)==0)来判断somelist是否为[ ]或‘ ’等空值,而是 if not somelist这种来判断,它会假定:空值将自动评估为false;
检测非控制时也应该如此;
(3)不要编写单行的if,for,while,except复合语句,而是把这些语句分成多行,以示清晰;
(4)import 语句应该放在文件开头;
(5)引入模块的时候,总是应该使用绝对名称,而不应该根据当前路径使用相对名称。例如,引入bar包中的foo模块时,应该完整的写出from bar import foo,而不是简单的写为import foo;
(6)如果一定要以相对名称来写imoprt,那就采用明确写法:from . import foo.
(7)文件中的import语句应该按照顺序划分成三个部分,分别表示标准库模块,第三方模块和自用模块。在每一部分,各import应该按照模块的字母顺序来排列。


  • 第三条:了解bytes、str、unicode的区别
    首先来看一下,python2和python3字符类型的区别:
    图片.png
    (1)Unicode转成二进制:encode;
    (2)二进制转成Unicode:decode。
    需要说明的是
    编写python程序的时候,一定要把编码和解码操作放在界面最外围来做。程序的核心部分应该用Unicode字符类型(python3中的str和python2中的Unicode),且不要对字符编码做任何假设。
    这种办法既可以令程序接受多种类型的文件编码,又可以保证输出的文本信息只采用一种编码形式(utf-8)。
    由于字符类型有区别,代码经常会出现两种常见的使用情景:
    (1)开发者需要原始八位值,这些八位值表示以UTF-8格式(或者其他编码形式)来编码的字符;
    (2)开发者需要操作没有特定编码形式的Unicode字符。
    所以,需要编写两个辅助函数(helper),以便在这两种情况中转换:
    函数一:
    python3中:
    图片.png

    函数二:
    python2中:
    图片.png

    需要注意的地方
    可能会出现在python3中;
    如果通过内置的open函数获取了文件句柄,那么请注意,该句柄默认会采用UTF-8编码格式来操作文件。而在python2中,文件操作的默认编码格式是二进制形式。如此,会导致程序出现奇怪的错误,例如,现在要向文件中随机写入一些二进制数据。下面这种做法在python2中可以正常操作,但python3中不行。
    图片.png

    发生上述异常的原因在于,python3给open函数添加了名为encoding的新参数,而这个新参数的默认值为‘utf-8’。这样在文件句柄上进行read和write操作时,系统就要要求开发者必须传入包含unicode字符的str实例,而不接受包含二进制数据的bytes实例。
    解决这个问题的办法:
    必须使用二进制写入模式(‘wb’)来开启待操作的文件,如下所示:
    图片.png

好了,本回就先学三条吧,再好好消化下。。。
由于各种不可抗拒的问题存在吧,简书写的是零零碎碎,但是这本书一定会从头到尾好好啃
感谢kevinzjy师兄对我的帮助。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容