Head First Python读书笔记
2021-08-18 18:23:23 36 举报
AI智能生成
《Head First Python》读书笔记
作者其他创作
大纲/内容
基础知识
标准库-》模块-》函数
可以导入模块,也可以导入函数,如果导入模块,在调用的时候使用 模块.函数()
如果两个模块有同名函数,那么只能导入模块
dir函数可以列出对象的属性
help访问Python的文档
help(list)
help(list.append)
range(start,stop,step)
数据结构
列表
Python中一切都是对象
有状态和行为
有属性或值,有方法
有序、动态扩展、异构、可变
处理相关数据使用列表
处理结构化数据考虑其他数据结构结合
[ ]
允许从列表两端访问列表
0:正数第一个对象
-1:尾部最后一个对象
方法
append
末尾增加
in / not in
判断是否在列表中
remove
取一个对象值作为唯一参数,如果找不到值,解释器会产生一个错误
pop
可以使用索引值作为参数,弹出一个对象,并返回这个对象
如果没有指定索引值,返回列表中最后一个对象
指定不存在的索引值,解释器会产生一个错误
extend
追加一个列表
insert
索引和对象作为参数,在什么位置插入什么值
复制列表
不要使用赋值操作符,使用copy方法
列表切片
[开始:结束:步长]
非破坏性的,不改变列表状态
在for循环中可以使用切片
字符串
可以使用单引号,也可以使用双引号
大多数程序员用单引号
如果只时一个单引号,可以用双引号来把单引号括起来,避免使用反斜杠转义字符
join函数
'分隔符'.join(seq)
将列表通过分隔符连接起来
str.split('|')
字符串变成的列表
乘法操作符*
可以控制输出几个字符
元组
有序的不可变的对象集合
只有1个对象的元组和字符串的区别
字符串:t=('python')
元组:t=('python',)
( )
字典
无序的键值对
字典的键必须初始化
setdefault(k,v)方法来进行初始化
使用in检查字典中是否存在某个键值
{ : ,: }
[ ]中括号的用法
使用中括号查找值
使用中括号直接往字典插入值
支持 += 递增操作符
遍历字典
items
for k,v in sorted(dict.items()):
sorted不改变字典中顺序,只是返回了一个排序的副本
也可以使用中括号访问[key]
集合
无序的唯一对象集合
可以实现快速查找,列表是顺序查找
快速创建集合
=set('aeeiouu')
集成方法
union
合并集合
difference
非共有元素
intersection
共同对象
{ , }
复杂数据结构
存储数据表
使用字典的字典
使用pprint可以进行美观打印
import pprint
使用[][]访问值
函数和模块
概念
函数的关键字 def return
函数可以接收参数
函数包含代码,还有文档
三重引号或者#来注释
三重引号标识的字符串可以跨多行,单引号和双引号标识的字符串不可以
普通字符串尽量使用单引号
满足PEP 8建议
函数可以隐藏复杂性
函数参数
任何一个参数都可以指定默认值
参数赋值
位置赋值
关键字赋值
参数传递的类型
引用传递
可变对象引用传递,比如列表、字典和集合
值传递
不可变对象值传递,比如字符串、整数、元组
函数返回值
bool
任何非空的数据结构都返回True
0、None、空串等返回False
注解
: 参数类型
-> 返回值类型
使用help可以查看函数的注解和docstring
模块
模块导入搜索位置
当前工作目录
解释器的site-packages位置,这个位置包含了安装的第三方的python模块
标准库位置
不能向标准库增加和删除模块
使用setuptools将模块安装到site-packages
创建发布描述
setup.py
README.txt
可以为空
创建发布文件
py -3 setup.py XX
用pip安装包
共享代码
直接拷贝打包后的zip
将发布文件上传到库PyPI
PEP8兼容性检查
安装pytest和pytest-pep8
pytest --pep8 XX.py
构建一个Web应用
语法
__name__
双下划线dunder name
单下划线 wonder
if __name__ == '__main__' :
app.run(debug=True)
app.run(debug=True)
代码直接由python执行就会调用run
当前活动模块的名字
修饰符@
调整一个函数的行为,而不需要修改代码
route修饰符
将URL web路径和已有的函数做关联
methods = ['POST']
与关联的html的表单的method保持一致
一个函数可以修饰多个地址
Flask
from flask import Flask
app = Flask(__name__)
app.run()
可以指定端口号
debug = True
调试模式,只有修改,服务端重启
127.0.0.1
默认端口5000
web服务器的默认运行端口是80,如果不带端口的话就是表示80
一般8080是常用的测试端口
模板引擎Jinja2
基模板
通过extends继承基模板
语法
{{ }} 模板参数
{% %} 替换块
使用方法
from flask import render_template
修饰函数返回 html
return render_template('xxx.html',模板参数)
目录结构
static
xx.css
templates
base.html
entry.html
xxxx.html
request
from flask import request
request.form
字典属性,包含了html中提交的数据
redirect
重定向另外一个地址
HTTP状态码
100~199
信息消息
200~299
成功消息
300~399
重定向
400~499
客户端错误,服务器从客户端接收到了一个它不理解也无法处理的消息
500~599
服务器错误,服务器从客户端接收到了一个请求,蚕食服务器尝试处理这个请求失败了
存储和管理数据
文件处理
open
r
读,文件不存在报错
r+
读+写,文件不存在报错
w
写数据,文件不存在创建,清空文件
w+
写+读,文件不存在创建,清空文件
a
追加方式写,文件不存在创建,不清空文件
a+
追加方式写+读,文件不存在创建,不清空文件
x
打开新文件写,文件存在则失败
x+
打开新文件写+读,文件存在则失败
b
二进制格式打开
https://blog.csdn.net/longe20111104/article/details/88181976?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4
seek(0)
将文件指针移动到开头
close
read
print
默认每次打印都自动换行,如果不需要自动换行 printf(xxx, end = '')
输出到文件print(XXX, file = XX)
with
上下文管理协议
with open('xx.log','a') as log:
print(req,res, file=log)
print(req,res, file=log)
请求对象 flask_request
escape 转义为Makeup对象
req
req.form
从web应用的html表单提交的数据
req.remote_addr
运行web浏览器的ip地址
req.user_agent
提交数据的浏览器标识
html表格标识
<table>
一个表格
<tr>
一行表格数据
<th>
一个表格列标题
<td>
一个表格数据行
上下文管理协议
类定义方法:__enter__和__exit__
__init__
非必选函数
可以将初始化和建立活动分离
异常
with代码组中如果有异常捕获,上下文管理器会终止代码执行,跳至__exit__方法
__exit__(self, exc_type, exc_value, exc_traceback)
elif exc_type:
raise exc_type(exc_value)
raise exc_type(exc_value)
包装函数
会话
session字典
函数修饰符
前提原则
函数可以作为函数的参数
可以调用传入的函数
函数可以嵌套在函数中
可以从函数返回1个函数
函数修饰符规则
修饰符是1个函数
修饰符取被修饰函数为参数
修饰符返回1个新函数
修饰符维护被修饰函数的签名(函数参数的个数和类型称为函数的签名)
代码
from functiontool import wraps
@wraps(func)
它能保留原有函数的名称和docstring
参数列表
*
列表
**
字典
异常处理
通用代码
try:/except Exception as err:
定制异常
继承Python的Exception类
class ConnectionError(Exception):
pass
pass
raise抛异常
raise ConnectionError('XXXX')
函数调用处接受异常
except ConnectonError as err:
目的:将异常进行封装,保障代码的可维护性和兼容性
线程
示例代码
from threading import Thread
t = Tread(target=xx, args=(xx,xx,xx))
t.start()
确保http请求是活动的
copy_current_request_context
高级迭代
推导式
解释器优化,运行速度更快
类型
列表推导式
字典推导式
集合推导式
过滤器扩展推导式
Q&A
函数调用是值传递?还是重用对象
不可变变量
int、float、string、tuple
修改参数变量,会产生新的对象,因此不会改变实参
可变变量
列表,字典
修改参数变量,不会产生新的对象,因此会影响到实参
0 条评论
下一页