没有合适的资源?快使用搜索试试~ 我知道了~
effective python学习笔记.pdf
需积分: 31 17 下载量 196 浏览量
2018-05-13
13:19:34
上传
评论
收藏 1.52MB PDF 举报
温馨提示
记录了我的effective-Python学习笔记,精简了effective-Python中重要的部分。effective-Python是一本值得多看几遍的书,但是看后面的几遍的时候完全可以直接看自己的学习笔记。此学习笔记侧重与比较实用的部分即前四章。
资源推荐
资源详情
资源评论
⼈
⽣
苦
短
我
⽤
Python
注
:
最
后
附
电
⼦
书
地址
⼀
、
Pythonic Thinking
第
1
条
:
确
认
⾃
⼰
所
⽤
的
Python
版
本
使
⽤
python -version
查
看
当
前
Python
版
本
Python
的
运
⾏
时
版
本
:
CPython
,
JyPython
,
IronPython
和
PyPy
等
优
先
考
虑
使
⽤
Python 3
第
2
条
:
遵
循
PEP 8
⻛
格
指
南
PEP 8
:
http://www.python.org/dev/peps/pep-0008/
PEP 8
:
http://www.python.org/dev/peps/pep-0008/
空
⽩
:
不
要
使
⽤
tab
缩
进
,
使
⽤
空
格
来
缩
进
使
⽤
四
个
空
格
缩
进
,
使
⽤
四
个
空
格
对
⻓
表
达
式
换
⾏
缩
进
每
⾏
的
字
符
数
不
应
该
超
过
79
class
和
funciton
之
间
⽤
两个
空
⾏
,
class
的
method
之
间
⽤
⼀个
空
⾏
list
索
引
和
函
数
调
⽤
,
关
键
字
参
数
赋
值
不
要
在
两
旁
加
空
格
变
量
赋
值
前
后
都
⽤
⼀个
空
格
命
名
函
数
,
变
量
以
及
属
性
应
该
使
⽤
⼩
写
,
如
果
有
多
个
单
词
推
荐
使
⽤
下
划
线
进
⾏
连
接
,
如
lowercase_underscore
被
保
护
的
属
性
应
该
使
⽤
单
个
前
导
下
划
线
来
声
明
。
私
有
的
属
性
应
该
使
⽤
两个
前
导
下
划
线
来
进
⾏
声
明
。
类
以
及
异
常
信
息
应
该
使
⽤
单
词
⾸
字
⺟
⼤
写
形
式
,
也
就
是
我
们
经
常
使
⽤
的
驼
峰
命
名
法
,
如
CapitalizedWord
。
模
块
级
别
的
常
量
应
该
使
⽤
全
部
⼤
写
的
形
式
,
如
ALL_CAPS
。
类
内
部
的
实
例
⽅
法
的
应
该
将
self
作
为
其
第
⼀个
参
数
。
且
self
也
是
对
当
前
类
对
象
的
引
⽤
。
类
⽅
法
应
该
使
⽤
cls
来
作
为
其
第
⼀个
参
数
。
且
self
引
⽤
⾃
当
前
类
。
表
达
式
和
语
句
( Python
之
禅
:
每
件
事
都
应
该
有
直⽩的
做
法
,
⽽
且
最
好
只
有
⼀
种
)
使
⽤
内
联
否
定
(
如
if a is not b
)
⽽
不
是显
⽰
的
表
达
式
(
如
if not a is b
)
。
不
要
简
单
地
通
过
变
量
的
⻓
度
(
if len(somelist) == 0
)
来
判
断
空
值
。
使
⽤
隐
式
的
⽅
式
如
来
假
设
空
值
的
情
况
(
如
if not somelist
与
False
来
进
⾏
⽐
较
)
。
上
⾯
的
第
⼆
条
也
适
⽤
于
⾮
空
值
(
如
[1] ,
或
者
'hi'
)
。
对
这
些
⾮
空
值
⽽
⾔
if somelist
默
认
包
含
隐
式
的
True
。
避
免
将
if , for , while , except
等
包
含
多
个
语
块
的
表
达
式
写
在
⼀
⾏
内
,
应
该
分割
成
多
⾏
。
总
是
把
import
语
句
写
在
Python
⽂
件
的
顶
部
。
当
引
⽤
⼀个
模
块
的
时
候
使
⽤
绝
对
的
模
块
名
称
,
⽽
不
是
与
当
前
模
块
路
径
相
关
的
名
称
。
例
如
要
想
引
⼊
bar
包
下
⾯
的
foo
模
块
,
应
该
使
⽤
from bar import foo
⽽
不
是
import foo
。
如
果
⾮
要
相
对
的
引
⽤
,
应
该
使
⽤
明
确
的
语
法
from . import foo
。
按
照
以
下
规
则
引
⼊
模
块
:
标
准
库
,
第
三
⽅
库
,
你
⾃
⼰
的
库
。
每
⼀个
部
分
内
部
也
应
该
按
照
字
⺟
顺
序
来
引
⼊
。
第
3
条
:
了
解
bytes
、
str
与
unicode
的
区
别
备
忘
录
:
Python3
两
种
字
符
串
类
型
:
bytes
和
str
,
bytes
表
⽰
8-bit
的
⼆
进
制
值
,
str
表
⽰
unicode
字
符
Python2
两
种
字
符
串
类
型
:
str
和
unicode
,
str
表
⽰
8-bit
的
⼆
进
制
值
,
unicode
表
⽰
unicode
字
符
从
⽂
件
中
读
取
或
者
写⼊
⼆
进
制
数
据
时
,
总
应
该
使
⽤
'rb'
或
'wb'
等
⼆
进
制
模
式
来
开
启
⽂
件
Python3
中
的
str
实
例
和
Python2
中
的
unicode
实
例
并
没
有
相
关
联
的
⼆
进
制
编
码
。
所
以
要
想
将
Unicode
字
符
转
换
成
⼆
进
制
数
据
,
就
必
须
使
⽤
encode
⽅
法
,
反
过
来
,
要
想
把
⼆
进
制
数
据
转
换
成
Unicode
字
符
,
就
必
须
使
⽤
decode
⽅
法
。
当
你
开
始
写
Python
程
序
的
时
候
,
在
接
⼝
的
最
开
始
位
置
声
明
对
Unicode
的
编
码
解
码
的
细
节
很
重
要
。
在
你
的
代
码
中
,
最
核
⼼
的
部
分
应
使
⽤
Unicode
字
符
类
型
(
Python3
中
使
⽤
str , Python2
中
使
⽤
unicode
)
并
且不
应
该
考
虑
关
于
字
符
编
码
的
任何
其
他
⽅
式
。
本
⽂
允
许
你使
⽤
⾃
⼰
喜
欢
的
可
替
代
性
的
⽂
本
编
码
⽅
式
(
如
Latin-1 , Shift
JIS , Big5
),
但
是
应
该
对
你
的
⽂
本
输
出
编
码
严
格
的
限
定
⼀下
(
理
想
的
⽅
式
是
使
⽤
UTF-8
编
码
)
。
由
于
字
符
类
型
的
不
同
,
导
致
了
Python
代
码
中
出
现
了
两
种
常
⻅
的
情
形
的
发
⽣
。
你
想
操
作
UTF-8
(
或
者
其
他
的
编
码
⽅
式
)
编
码
的
8
⽐
特
值
序
列
。
你
想
操
作
没
有
特
定
编
码
的
Unicode
字
符
。
所
以
你
通
常
会
需
要
两个
⼯
具
函
数
来
对
这
两
种
情
况
的
字
符
进
⾏
转
换
,
以
此
来
确
保
输
⼊
值
符
合
代
码
所
预
期
的
字
符
类
型
。
⼆
进
制
值
和
unicode
字
符
需
要
经
过
encode
和
decode
转
换
,
Python2
的
unicode
和
Python3
的
str
没
有
关
联
⼆
进
制
编
码
,
通
常
使
⽤
UTF-8
Python2
转
换
函
数
:
to_unicode
to_str
Python2
,
如
果
str
只
包
含
7-bit
的
ascii
字
符
,
unicode
和
str
是
⼀
样
的
类
型
,
所
以
:
# Python 2
def to_unicode(unicode_or_str):
if isinstance(unicode_or_str, str):
value = unicode_or_str.decode('utf-8')
else:
value = unicode_or_str
return value # Instance of unicode
# Python 2
def to_str(unicode_or_str):
if isinstance(unicode_or_str, unicode):
value = unicode_or_str.encode('utf-8')
else:
value = unicode_or_str
return value # Instance of str
使
⽤
+
连
接
:
str + unicode
可
以
对
str
和
unicode
进
⾏
⽐
较
unicode
可
以
使
⽤
格
式
字
符
串
,
’%s’
注
:
在
Python2
中
,
如
果
只
处
理
7
位
ASCII
的
情
形
下
,
可
以
等
价
str
和
unicode
上
⾯
的
规
则
,
在
Python3
中
bytes
和
str
实
例
绝
不
等
价
使
⽤
open
返
回
的
⽂
件
操
作
,
在
Python3
是
默
认
进
⾏
UTF-8
编
码
,
但
在
Pyhton2
是
⼆
进
制
编
码
这
时
我
们
可
以
⽤
⼆
进
制
⽅
式
进
⾏
写⼊
和
读
取
:
第
4
条
:
⽤
辅
助
函
数
来
取
代
复
杂
的
表
达
式
开
发
者
很
容
易
过
度
使
⽤
Python
的
语
法
特
效
,
从
⽽
写
出
那
种
特
别
复
杂
并
且
难
以
理
解
的
单
⾏
表
达
式
请
把
复
杂
的
表
达
式
移
⼊
辅
助
函
数
中
,
如
果
要
反
复
使
⽤
相
同
的
逻
辑
,
那
就
更
应
该
这
么
做
使
⽤
if/else
表
达
式
,
要
⽐
使
⽤
or
或
者
and
这
样
的
Booolean
操
作
符
更
加
清
晰
第
5
条
:
了
解
切割
序
列
的
办
法
分
⽚
机
制
⾃
动
处
理
越
界
问
题
,
但
是
最
好
在
表
达边
界
⼤
⼩
范
围
是
更
加
的
清
晰
。
(
如
a[:20]
或
者
a[-20:]
)
list
,
str
,
bytes
和
实
现
__getitem__
和
__setitem__
这
两个
特
殊
⽅
法
的
类
都
⽀
持
slice
操
作
基
本
形
式
是
:
somelist[start:end]
,
不
包
括
end
,
可
以
使
⽤
负
数
,
-1
表
⽰
最
后
⼀个
,
默
认
正
向
选
取
,
下
标
0
可
以
省
略
,
最
后
⼀个下
标
也
可
以
省
略
slice list
是
shadow copy
,
somelist[0:]
会
复
制
原
list
,
切割
之
后
对
新
得
到
的
列
表
进
⾏
修
改
不
会
影
响
原
来
的
列
表
# python3
with open(‘/tmp/random.bin’, ‘w’) as f:
f.write(os.urandom(10))
# >>>
#TypeError: must be str, not bytes
# python3
with open('/tmp/random.bin','wb) as f:
f.write(os.urandom(10))
a = ['a','b','c','d','e','f','g','h']
print('Middle Two:',a[3:-3])
>>>
Middle Two: ['d','e']
slice
赋
值
会
修
改
slice list
,
即
使
⻓
度
不⼀
致
(
增
删
改
)
引
⽤
-
变
化
-
追
随
当
为
列
表
赋
值
的
时
候
省
去
开
头
和
结
尾
下
标
的
时
候
,
将
会
⽤
这
个
引
⽤
来
替
换
整
个
列
表
的
内
容
,
⽽
不
是
创
建
⼀个
新
的
列
表
。
同
时
,
引
⽤
了
这
个
列
表
的
列
表
的相
关内
容
,
也
会
跟
着
发
⽣
变
化
。
第
6
条
:
避
免
在
单
次
切
⽚
操
作
内
同
事
指
定
start
、
end
和
stride
(
个
⼈
觉
得
还
好
)
备
忘
录
:
在
分
⽚
中
指
定
start
,
end , stride
会
让
⼈
感
到
困
惑
,
难
于
阅
读
。
a = ['a','b','c','d','e','f','g','h']
b = a[4:]
print("Before:", b)
b[1] = 99
print("After:",b)
print("Original:",a)
>>>
Before: ['e','f','g','h']
After: ['e',99,'g','h']
Original: ['a','b','c','d','e','f','g','h']
print("Before:",a)
a[2:7] = [99,22,14]
print("After:",a)
>>>
Before: ['a','b','c','d','e','f','g','h']
After: ['a','b',99,22,14,'h']
a = ['a','b','c','d','e','f','g','h']
b = a
print("Before:",b)
a[:] = [101,102,103]
print("After:",b)
>>>
Before: ['a','b','c','d','e','f','g','h']
After: [101,102,103]
#
解
决
⽅
案
:
深
拷
⻉
import copy
b = copy.copy(a)
print("Before:",b)
a[:] = [101,102,103]
print("After:",b)
>>>
Before: ['a','b','c','d','e','f','g','h']
After: ['a','b','c','d','e','f','g','h']
尽
可
能
的
避
免
在
分
⽚
中
使
⽤
负
数
值
。
避
免
在
分
⽚
中
同
时
使
⽤
start
,
end
,
stride
;
如
果
⾮
要
使
⽤
,
考
虑
两
次
赋
值
(
⼀个
分
⽚
,
⼀个
调
幅
),
或
者
使
⽤
内
置
模
块
itertoolsde
的
islice
⽅
法
来
进
⾏
处
理
。
步
幅
Python
有
针
对
步
幅
的
特
殊
的
语
法
,
形
如
:
somelist[start:end:stride]
。
负
数
步
幅
步
幅
为
-1
来
实
现
字
符
串
的
逆
序
,
反向
选
取
第
7
条
:
⽤
列
表
推
导
来
代
替
map
和
filter
备
忘
录
列
表表
达
式
⽐
内
置
的
map , filter
更
加
清
晰
,
因
为
map , filter
需
要
额
外
的
lambda
表
达
式
的
⽀
持
。
列
表表
达
式
允
许
你
很
容
易
的
跳
过
某
些
输
⼊
值
,
⽽
⼀个
map
没
有
filter
帮
助
的
话
就
不
能
完
成
这
⼀个
功
能
。
字
典
和
集
合
也
都
⽀
持
列
表表
达
式
。
第
⼀个
例
⼦
:
a = ['red','orange','yellow','green','blue','purple']
odds = a[::2]
print(odds)
>>>
['red','yellow','blue']
#
当
数
据
仅仅
为
ASCII
码
内
数
据
时
⼯
作
正
常
x = b'mongoose'
y = x[::-1]
print(y)
>>>
b'esoognom'
#
出
现
Unicode
字
符
的
时
候
就
会
报
错
w = '
谢谢
'
x = w.encode(utf-8')
y = a[::-1]
z = y.decode('utf-8')
>>>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9d in position 0: invalid start
byte.
a = ['a','b','c','d','e','f','g','h']
a[2::2] # ['c','e','g']
a[-2::-2] # ['g','e','c','a']
a[-2:2:-2] # ['g','e']
尤
其
注
意
这
⾥
,
类
似
于
坐
标
轴
,
分
⽚
范
围
是
左
闭
右
开
,
所
以
2
的
位
置
不
可
达
a[2:2:-2] # []
剩余50页未读,继续阅读
资源评论
风-破
- 粉丝: 9
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 全国330多个地级市一、二、三产业GDP和全国及各省土地流转和耕地面积数据-最新出炉.zip
- FIC7608-spec-brief-V1.1 - 20240419
- 惠普打印机(M233sdn)驱动下载
- 初学者Python入门指南:从安装到应用
- 无锁异步化、事件驱动架构设计的 java netty 网络编程框架; 轻量级,无需依赖任何第三方中间件或数据库就能支持集群、分布式; 适用于网络游戏服务器、物联网、内部系统及各种需要长连接的场景
- 单通道H桥马达驱动器T1016H的技术参数与应用指南
- 全国各地级市GDP、土地流转和耕地面积数据-最新出炉.zip
- ARM Cortex-M0+微控制器 CW32F030x6/x8 数据手册解析与应用指导
- 1/2.55英寸CMOS图像传感器IMX362的技术特性与应用
- 使用TensorFlow实现花卉分类识别系统
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功