Effective Python方法学习


本文主要考虑Python3中的问题,同时请注意尽信书不如无书
study from 2019.11.20

第一章 用Pythonic方式思考

day 1
1.确定自己所用的python版本

(1)cmd中键入python --version
(2)在python中输入

import sys
print(sys.version_info)
print(sys.version)
//
2.遵循PEP8风格指南

PEP8(8号Python增强提案)
空格
(1)用空格表示缩进,而不是制表符
(2)每一级缩进使用4个空格。
(3)所有行限制的最大字符数为79。
(4)对于占多行的表达式,除首行外其余各行都应该在此基础上缩进四个
(5)顶层函数和类的定义,前后用两个空行隔开。
(6)类里的方法定义用一个空行隔开。
(7)二元运算符的左右两侧应该保留一个空格,而且只要一个空格就好。
命名
(1)变量、函数和属性应该使用小写字母来拼写,如果有多个单词就使用下划线进行连接。
(2)类中受保护的实例属性,应该以一个下划线开头。
(3)类中私有的实例属性,应该以两个下划线开头。
(4)类和异常的命名,应该每个单词首字母大写。
(5)模块级别的常量,应该采用全大写字母,如果有多个单词就用下划线进行连接。
(6)类的实例方法,应该把第一个参数命名为self以表示对象自身。
(7)类的类方法,应该把第一个参数命名为cls以表示该类自身。
表达式和语句
(1)采用内联形式的否定词,而不要把否定词放在整个表达式的前面。例如if a is not b就比if not a is b更容易让人理解。
(2)不要用检查长度的方式来判断字符串、列表等是否为None或者没有元素,应该用if not x这样的写法来检查它。
(3)就算if分支、for循环、except异常捕获等中只有一行代码,也不要将代码和if、for、except等写在一起,分开写才会让代码更清晰。
(4)import语句总是放在文件开头的地方。
(5)引入模块的时候,from math import sqrt比import math更好。
(6)如果有多个import语句,应该将其分为三部分,从上到下分别是Python标准模块、第三方模块和自定义模块,每个部分内部应该按照模块名称的字母表顺序来排列。

day2
3.了解bytes、str与unicode的区别

与utf-8与GBK有关,UTF-8与GBK详细介绍
python3中的字符串序列类型是:bytes(原始字节)与str(包含Unicode字符)
python2中的字符串序列类型是:str与unicode(同上)

如果想将Unicode字符转换成二进制数据,使用encode方法。将二进制数据转换成Unicode字符,使用decode方法。
在python3中使用open函数时,会默认使用UTF-8进行编码,而python2中则是二进制形式

with open('/temp/random.bin','w')as f#这在python3不可以写入二进制数据
with open('/temp/random.bin','wb')as f#此时可以写入
4.用辅助函数取代复杂的表达式

python中支持复杂的单行表达式,但是这样书写不易于理解,应该尽可能将其拆分成辅助函数。
下面为一个实例

green=my_values.get('red',[''])[0] or 0

green=get_first_int(my_values,'green')
def get_first_int(values,key,default=0):
    found=values.get(key,[''])
    if found[0]:
        found=int(found[0])
    else:
        found=default
    return found

有一说一,python的单行表达式复杂起来后就很难看懂,如果还没有注释,打爆狗头预定

5.了解切割序列的办法

基本写法:somelist[start:end]
注:end不在其中
要点
1.如果start为0或end为序列长度,应省略
2.切片操作不在意start与end是否越界

a=[8,6,1,2,9,132,8,3]
print(a[-20:])
#这个虽然越界但是没有影响结果

3.如果使用切片操作赋值时,会把相关范围的值进行替换,即使长度不同也可替换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值