6. Python基础知识 ¶
开发口头禅:“Don’t Repeat Yourself”
coding env: python3.10+
6.1. 书籍推荐 ¶
-
《流畅的Python》
-
能够解决大部分疑难杂症
-
-
《 python3 cookbook 》
-
《 python 进阶 》 深入python语法等
-
《python Cookbook》
-
《Python工匠-案例,技巧与工程实践》
-
讲的也比较深入,也有具体的示例,兼顾了了理论和实践,如面向对象的设计原则等。
-
6.2. 第一部分 编码规范 ¶
良好的习惯我们就从最开始刻意练习,让我们的代码也要同翻译的三字标准一样: 信、雅、达 。这里记录我认为比较好的习惯吧,供大家参考使用。
-
缩进规范
-
使用 纯空格 缩进,不要Tab、不要空格与Tab混用。
-
-
导包规范
-
尽量避免 import *,如果要导入一个命名空间下的多个方法,可使用import test_class,再使用test_class.func的方式
-
顺序问题。标准库 》第三方库 》本地库
-
-
命名规范
-
命名要尽量达意!长一点倒不怕,就怕他人看到名字不能很快了解其含义。比如表示订单数量:num、order_num 你说哪个好!
-
-
对于嵌套处理尽量不要超过4层。比如for与if的嵌套,按照我的经验这类代码肯定是有优化空间,可以从Python自身的一些好用特性和业务逻辑本身两个角度与优化。
6.3. 第二部分 基础知识 ¶
基础不牢,地动山摇。
6.4. 第三部分 进阶知识 ¶
攀登高峰的脚步👣不能停下来,向前进……。主要包含python的高阶函数使用及技巧。
-
产生随机字典、集合(一般在测试代码时使用)
-
主要使用random包中的randint模块
#!/usr/bin/env python3 from random import randint # generate dict d = {"name%d" % n :randint(10, 30) for n in range(10)} # generate set s = {randint(10, 30) for _ in range(10)}
-
-
集合的求交集操作
-
key points: keys() of dict、func map, reduce
-
把函数作为结果返回的函数是高阶函数:map、filter、reduce(py3已不再内置)、sorted、all etc.
-
map 函数:把函数应用到各个元素上,生成一个新序列。
-
reduce 函数:把一系列值归约成单个值。第一个参数是接受两个参数的函数,第二个参数是一个可迭代的对象。看下一个例子:
from functools import reduce # example: reduce reduce(func, iterable): reduce(lambda a, b: a * b, range(1, 5)) >>> 24
from random import randint, sample from functools import reduce # random generate three dict s = 'china' d1 = {k: randint(2, 5) for k in sample(s, randint(4, 7))} d2 = {k: randint(2, 5) for k in sample(s, randint(4, 7))} d3 = {k: randint(2, 5) for k in sample(s, randint(4, 7))} # 求以上三个字典的公共键:使用map、all d1 = [d1, d2, d3] [k for k in d1[0] if all(map(lambda d: k in d, d1[1:]))] >>> ['o'] # 使用集合运算求交集:reduce。使用场景:存在多个自典时。 reduce(lambda dict1, dict2: dict1 & dict2, map(dict.keys, d1)) >>> {'o'}
-
-
枚举、命名元组模块
6.5. 第四部分 高阶知识 ¶
会当凌绝顶,一览众山小。
一切皆对象(包括类和函数) ¶
```python
def func_1(name='zhang'):
print(name)
def func_2():
return func_1
# return func
new_inst = func_2() # 返回一个函数
new_inst('li')
```
类型、对象和类 ¶
元编程 ¶
还记得咱们的开发口头禅吗?对就是“don’t repeat yourself”,Python自身也为我们开发人员提供了一种实现方式,即元编程,目的就是减少重复性代码,主要技术是使用装饰器、类装饰器和元类。
-
装饰器
-
场景1: 在系统中大多数的模块都有日志打印、时间统计等功能。
-
类方法。@classmethod装饰器,表示属于类但无需实例化也可调用
-
静态方法。@staticmethod装饰器,这个方法和实例内容没有关联,就相当于一个普通的函数,但是静态方法能被子类继承和重写。
-
@property 。模糊属性和类方法的调用差异。当某个方法使用了该关键字后,该方法就变为一个虚拟的属性,比如获取学生的信息方法, stu.stu_info() --> stu.stu_info。其次,对于学生信息的增加和删除也可以基于@stu_info.setter 或 @stu_info.deleter装饰器实现。
-
@abstractmethod。来源于collections.abc模块,把某个方法标记为抽象类方法,如果该方法所在类作为父类被继承则需要在子类中实现该方法。相当于Java的接口实现。
-
多线程 ¶
-
先要知道GIL(Global Interpreter Lock),Python的一把全局解释锁
协程 ¶
协程(Coroutine),又称微线程
6.6. 第五部分 性能优化 ¶
6.7. 第六部分 思考和总结 ¶
不忘初心,方得始终,回望过去,是为了更好走向远方。
6.8. python小应用 ¶
总结工作中可能用到的业务功能。