effective python学习笔记_pythonic思维

优缺点

书的好处是很多新特性提高了可读性代码性等各方面性能,缺点是新特性和py老版本不兼容,老版本可能没有这些新特性,如果用了py早期版本,需要考虑替代方案

查py版本

import sys

sys.version

sys.version_info

遵循PEP8

PEP8,Python Enhancement Proposal #8

章节列了几个点,也可以看原文PEP 8 – Style Guide for Python Code | peps.python.org

导包顺序建议:先导标准库模块,再导三方模块,再导自研模块

pylint是一个py源码静态分析工具,会检查代码是否符合PEP8Pylint - code analysis for Python | www.pylint.org

bytes和str区别

bytes元素是8位无符号,str元素是unicode字符

编码解码有个三明治方法,即让py核心处理unicode,编码和解码放到最开始和最末尾,以此达到目的,也就是说应该让py处理str类型

bytes -> str叫解码,str -> bytes叫编码

bytes和str一些比较,连接操作等会报错,需注意

open文件写入时,w表示支持str,写入bytes会报错,如果希望写入bytes,需要用wb模式。读文件也一样,如果用r读二进制会报错。也可以通过传入encoding编码协议支持w或r操作二进制文件

可以执行import locale;locale.getpreferredencoding()查看当前系统支偏好的编码

用f字符串取代str.format

传统是用%格式化字符串,规则是从C语言继承的,以其为依据。%左边的字符叫格式字符串,在py里这样有几个缺点

1 转换类型不兼容,比如字符串无法和%f %d数值型兼容,需手动检查

2 字符处理和格式字符串会占用较多篇幅

3 若想用同一值填充格式字符串,需要多次传参,当修改时,需要修改多处

4 如果将字典传入格式字符串,会很冗长,因为key和value都要写一遍,还要再格式字符串给每个变量规定名字

解决方案1高级格式字符串

py3添加了高级格式字符串机制,调用内置format函数,不用%号了

{}里可用:分隔,右边写格式说明符

理解:str.format会将每个参数和模式传给format

解决方案2f-string

py3.6添加了f-string

优点:灵活性简洁性达到极致

缺点:py3.6以下不兼容,需考虑替代方案

辅助函数取代表达式

推荐用unpacking到每个变量而不是用下标访问序列

尽量用enumerate取代range

enumerate将可迭代对象封装成惰性生成器,还返回序号。range可用于迭代一系列整数

用zip同时遍历两多个迭代器

zip和enumerate类似,将多个迭代器每次迭代取一个元素返回生成器,内存不会消耗很多

zip遍历时如果迭代器长度不相等,zip只会迭代到元素最短的长度然后停止,如果想zip迭代到最长长度的序列可用itertools.zip_longest方法

for和while后不建议用else

主要是else会较难理解,难理解大过了功能便利

用赋值表达式减少重复代码

赋值表达式也是海象运算符,目的是减少一些临时变量,比如获取一个值然后判断该值,继续后面的逻辑,其实判断结束这个变量就没用了

赋值表达式逻辑为将:=右边运算,结果返回给:=左侧的变量,然后该语句接下来的值就是左边的变量,这种用在if 临时变量时比较合适

当多重if else存在时,或是有switch else结构,可以考虑用海象运算符简化代码结构,也可用于while结构的异常跳出,将还想运算符直接放到while判断跳出的表达式处

总而言之,作用是减少代码行数,提高可读性

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值