暑期带你不走偏快速学习python
2024-09-24 10:10:00 5 举报
AI智能生成
有一篇系统的路线能带你不走偏快速学习python,赶紧学习起来吧
作者其他创作
大纲/内容
python简介
解释型语言(编译型语言)
基础代码库、第三方库
安装python
官网安装python(可以自动改环境变量,自带cpython解释器)
python解释器
Python的解释器很多,但使用最广泛的还是CPython
第一个python程序
命令行模式和python交互模式;exit()后退出python交互模式。
python代码运行助手(在线打印结果)
输入和输出
python基础
代码格式
Python使用缩进来组织代码块,请务必遵守约定俗成的习惯,坚持使用4个空格的缩进;在文本编辑器中,需要设置把Tab自动转换为4个空格,确保不混用Tab和空格
数据类型和变量
整数、浮点数、字符串、布尔值、空值(列表、字典、自定义)
变量(类型不固定,动态语言),常量
字符串和编码
ASCII(英文)-Unicode(统一)-UTF-8(可变长编码);
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码;
为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换;
格式化
使用list和tuple
list和tuple是Python内置的有序集合,一个可变,一个不可变。根据需要来选择使用它们
条件判断
if-elif-else
循环
for,while;break,continue
使用dict和set
使用key-value存储结构的dict在Python中非常有用,选择不可变对象作为key很重要,最常用的key是字符串。
tuple虽然是不变对象,但试试把(1, 2, 3)和(1, [2, 3])放入dict或set中,并解释结果
函数
调用函数
定义函数
def 函数;如果有必要,可以先对参数的数据类型做检查
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
函数可以同时返回多个值,但其实就是一个tuple
函数的参数
位置参数、默认参数(默认参数必须指向不变对象!)、
可变参数、关键字参数、命名关键字参数
*args是可变参数,args接收的是一个tuple;
**kw是关键字参数,kw接收的是一个dict。
递归函数
如果一个函数在内部调用自身本身,这个函数就是递归函数
Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题
高级特性
切片(Slice)
L[::2](相当于substring,只不过可以用于数组和字符串,功能更强大)
迭代/循环
就是for循环遍历,练习没做出来
列表生成器
将一个循环语句,写在[]中:[x * x for x in range(1, 11)]
生成器(习题暂放)
只要把一个列表生成式的[]改成(),就创建了一个生成器
迭代的数组是生成器,生成器里可以放下更多的数据
迭代器(Iterator)
迭代器=生成器(可迭代对象>迭代器)
凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如list/tuple、dict/set、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
函数式编程
高阶函数
把函数作为参数传入,这样的函数称为高阶函数
map/reduce(习题暂放)
map函数:map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回
如:def f(x) map(f,[x1,x2,x3,x4]) = [f(x1),f(x2),f(x3),f(x4)]
reduce函数:reduce与map结构类似,但必须接收两个集合元素,reduce会把结果继续和序列的下一个元素做累积计算
如:def f(x) reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
filter(习题暂放)
filter()的作用是从一个序列中筛出符合条件的元素。由于filter()使用了惰性计算,所以只有在取filter()结果的时候,才会真正筛选并每次返回下一个筛出的元素
list(filter(is_odd(自定义函数), [1, 2, 4, 5, 6, 9, 10, 15]))
sorted
排序函数:
sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
返回函数
函数作为返回值
闭包(不太懂)
返回一个函数时,牢记该函数并未执行,返回函数中不要引用任何可能会变化的变量
匿名函数
lambda x(参数): x * x(返回值)
装饰器(不懂)
大概是对函数的功能增强,一层又一层的
给函数动态加上功能
偏函数
给函数设置默认值
int2 = functools.partial(int, base=2)
max2 = functools.partial(max, 10)
模块
模块
易管理、可复用
使用模块
代码书写规范
这句感觉没什么作用啊?if __name__=='__main__':
作用域
安装第三方模块
安装常用模块
Anaconda,这是一个基于Python的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库
MySQL驱动程序,Web框架Flask,科学计算Numpy
模块搜索路径
面向对象编程
类和实例
类的写法;类中定义属性和方法;调用属性和方法
访问限制(题目不知道错在哪)
属性不能直接访问,通过get访问,set修改
继承和多态
把类看作一种数据类型:例如传入Animal类型的数据,根据实际的类型打印出不同的值,就是多态
“开闭”原则:
对扩展开放:允许新增Animal子类;
对修改封闭:不需要修改依赖Animal类型的run_twice()等函数
动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的,有相同的方法就行
获取对象信息
type():判断对象类型
使用types模块中定义的常量进一步判断?
isinstance():优先使用isinstance()判断类型,可以将指定类型及其子类“一网打尽”
dir():获得一个对象的所有属性和方法
配合getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态
实例属性和类属性
类和实例都有属性,最好不要用一样的名称
面向对象高级编程
使用__slots__
限制当前类可以定义的属性 ,对子类不起作用
子类如使用__slots__,可以定义的属性是父类加上子类的__slots__
使用@property
@property装饰器就是负责把一个方法变成属性调用的
get->@property; set->@width.setter
(怎么这里类不用设置属性了?)
多重继承
多重继承:只允许单一继承的语言(如Java)不能使用MixIn的设计
class Bat(Mammal, Flyable):
pass
MixIn
主线往往单一继承,混入其他功能,叫做MixIn
通过排列组合快速构成所需类
定制类
形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的
__len__()
__str__
优化print打印出来的实例
__repr__ = __str__优化直接打印出来的实例
__iter__
1、如果一个类想被用于for ... in循环
2、实现一个__iter__()方法,该方法返回一个迭代对象
3、Python的for循环就会不断调用该迭代对象的__next__()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环
__getitem__
(需进一步理解)使得一个迭代器实例可以像数组一样取值和切片
__getattr__
在没有找到属性的情况下,才调用__getattr__
(需进一步理解)动态调用API的例子没看懂
__call__
直接对实例进行调用(有点像构造函数?)
使用枚举
enum题不会做
使用元类
type()
type()函数可以查看一个类型或变量的类型
type()函数允许我们动态创建出类
metaclass(一般不会使用)
先定义metaclass,就可以创建类,最后创建实例
(没看懂)ORM框架创建的例子
错误、调试和测试
bug、输入检查、异常处理
错误处理(题未做)
try
try...except...finally
调用栈
如果错误没有被捕获,Python解释器来打印出错误堆栈
记录错误
logging.exception(e)
程序打印完错误信息后会继续执行,并正常退出
抛出错误
raise
调试
print()
断言
assert n != 0, 'n is zero!'
logging
import logging
logging.basicConfig(level=logging.INFO)
logging.info('n = %d' % n)
pdb
很麻烦,单步方式运行,一步步查看运行状态
pdb.set_trace()
相当于在可能出错的地方打断点,再一步步查看
IDE
Visual Studio Code:https://code.visualstudio.com/,需要安装Python插件
PyCharm:http://www.jetbrains.com/pycharm/
单元测试
编写
运行
setUp与tearDown
文档测试
IO编程
文件读写
StringIO和BytesIO
操作文件和目录
序列化
进程和线程
多进程
多线程
TreadLocal
进程 vs. 线程
分布式进程
正则表达式
常用内建模块
常用第三方模块
virtualenv
图形界面
海龟绘图
网络编程
TCP/IP简介
TCP编程
UDP编程
电子邮件
SMTP发送邮件
POP3收取邮件
访问数据库
使用SQLite
使用MySQL
使用SQLAlchemy
web开发
HTTP协议简介
HTML简介
WSGI接口
使用Web框架
使用模板
异步IO
协程
asyncio
async/await
aiohttp
实战
实战可以在github上搜索一些优质python项目
0 条评论
下一页