1 | # 01-15python基础 |
Python100天学习16-20
Python语言进阶
重要知识点
1.生成式,推导式
2.嵌套列表
3.heapq模块(堆排序)
1 | """ |
4.itertools模块
1 | """ |
5.collections模块
namedtuple
:命令元组,它是一个类工厂,接受类型的名称和属性列表来创建一个类。deque
:双端队列,是列表的替代实现。Python中的列表底层是基于数组来实现的,而deque底层是双向链表,因此当你需要在头尾添加和删除元素时,deque会表现出更好的性能,渐近时间复杂度为。Counter
:dict
的子类,键是元素,值是元素的计数,它的most_common()
方法可以帮助我们获取出现频率最高的元素。OrderedDict
:dict
的子类,它记录了键值对插入的顺序,看起来既有字典的行为,也有链表的行为。defaultdict
:类似于字典类型,但是可以通过默认的工厂函数来获得键对应的默认值,相比字典中的setdefault()
方法,这种做法更加高效。
数据结构和算法
选择排序
1 | def select_sort(items, comp=lambda x, y: x < y): |
冒泡排序
1 | def bubble_sort(items, comp=lambda x, y: x > y): |
归并排序
1 | def merge(items1, items2, comp=lambda x, y: x < y): |
快速排序
1 | """ |
选择排序
1 | def select_sort(items, comp=lambda x, y: x < y): |
二分查找
1 | def bin_search(items, key): |
穷举
贪心
动态规划
分治
回溯
函数的使用方式
map``filter
1 | items1 = list(map(lambda x: x ** 2, filter(lambda x: x % 2, range(1, 10)))) |
位置参数、可变参数、关键字参数、命名关键字参数
Local >>> Embedded >>> Global >>> Built-in
装饰器
面向对象相关知识
导致引用计数+1的情况:
- 对象被创建,例如
a = 23
- 对象被引用,例如
b = a
- 对象被作为参数,传入到一个函数中,例如
f(a)
- 对象作为一个元素,存储在容器中,例如
list1 = [a, a]
导致引用计数-1的情况:
- 对象的别名被显式销毁,例如
del a
- 对象的别名被赋予新的对象,例如
a = 24
- 一个对象离开它的作用域,例如f函数执行完毕时,f函数中的局部变量(全局变量不会)
- 对象所在的容器被销毁,或从容器中删除对象
引用计数可能会导致循环引用问题,而循环引用会导致内存泄露,如下面的代码所示。为了解决这个问题,Python中引入了“标记-清除”和“分代收集”。在创建一个对象的时候,对象被放在第一代中,如果在第一代的垃圾检查中对象存活了下来,该对象就会被放到第二代中,同理在第二代的垃圾检查中对象存活下来,该对象就会被放到第三代中。
1 | # 循环引用会导致内存泄露 - Python除了引用技术还引入了标记清理和分代回收 |
以下情况会导致垃圾回收:
- 调用
gc.collect()
gc
模块的计数器达到阀值- 程序退出
面向对象的设计原则
几种设计模式
迭代器和生成器
并发编程
Python中有GIL来防止多个线程同时执行本地字节码,这个锁对于CPython是必须的,因为CPython的内存管理并不是线程安全的,因为GIL的存在多线程并不能发挥CPU的多核特性。
Python100天学习21-30
Web前端概述
第二十一天-第三十天
HTML5 标签
CSS3语法
JavaScript语法
JQuery概述
Ajax
Vue、vue-cli:渐进式框架
Element:UI框架
Echarts:报表框架
Bulma:基于弹性盒子的CSS框架
Bootstrap:响应式布局框架